特定の入力/仮定に対して計算可能な停止問題


19

プログラムxが停止するかどうかを計算するプログラムP(x)がある場合、Pを入力としてPを与えるとパラドックスが発生するため、停止問題は計算可能ではないという証明の理解から、この問題は計算できません。同じP、P:P(P)、Pが停止するか、P自体を使用しないかを決定しようとする

だから私の質問は:P自体以外の入力として使用される他のすべてのプログラムについて、プログラムPによって停止問題を計算できますか?言い換えると、停止の問題はこの特別な場合にのみ計算できないのですか、それとも証明がより一般的で、何かが足りないのですか?


停止する問題は計算可能ではないという証拠を誤解していると思います。Pは常にプログラムが有限時間で停止するかどうかを判断するため、P(P)はtrueを返します。矛盾に到達するには、少し複雑な構成を行う必要があります。
ダンステイリー

停止する問題を解決できるプログラムがたくさんあるかどうかを尋ねた場合、あなたはより良く、おそらく実質的に関連性の高い答えを得ると思います。結局、多くのプログラムは正式に検証可能です。これには、与えられた入力で停止するかどうかの決定も含まれます。私は、そのグループを決定することはできないと思います(それは解決することになります...、あなたは知っています)が、実世界のプログラムの大部分には、関連する入力について、それらが停止するかどうかを判断する障害はありません。
ピーター-モニカの復活

回答:


10

場合任意の計算可能な関数は、であり、Gとして定義され、fg

g(n)={f(n)if nkvotherwise

任意の選択に対しても計算可能です。k,v

基本的には、プログラムがある場合を計算G N すべてのためのnを除くのをN = K、することができ、 『フィックス』という場合(例えば、使用して)、別のプログラム取得Pを計算G N のためのすべてのnPg(n)nn=kif then elsePg(n)n

したがって、「1つの場合を除いて」停止関数を計算できれば、例外も含めて停止関数を計算できます。それから、いつものように矛盾を得ることができます。

結論:いいえ、停止問題を「1つの場合を除いて」(または「有限の多くの場合を除いて」)決定することはできません。


1
わかりました。数学的にわかったと思います...しかし、私は疑問に思っていました。HPを計算するプログラムを作成しようとすると、具体的な問題に直面するでしょうか。そのようなプログラムを書くことができないことを、いつどのように理解するのでしょうか?
アレッシオマルトラナ

@AlessioMartoranaそれは依存します:あなたはそのような問題にどのようにアプローチしますか?主な問題は、入力が停止しないプログラムであっても、は常に停止する必要があることです。したがって、単純に入力プログラムをシミュレートすることはできません。P
カイ

そして、入力プログラムのコードが見えると仮定しますか?コードから、プログラムが停止するかどうかを確認できませんか?
アレッシオマルトラナ

2
@AlessioMartorana実際にコードを見ることができますが、たとえばwhileループがある場合、一般的にはあまり言えません。whileループは、任意の数学的推測の可能な証明をすべてチェックし、証明が見つかった場合にのみ停止する場合があります。このループが停止するかどうかを決定するということは、推測が証明可能かどうかを決定することを意味します。HPを解くと、正式な数学的質問に「はい」(証明可能)/「いいえ」(証明不可能)と答えるマシンができます。それは非現実的に強力です。
カイ

1
@AlessioMartoranaあなたがHPを解決するプログラムを書いたと思ったら、あなたのプログラムが失敗する場所は2つの方法の1つです:一部のプログラムでは、間違った結果を返すかもしれません停止します)および/または決定プログラム自体が多くの入力で停止せず、本当に停止しないのか、答えを計算するのにもっと時間が必要なのかわからない
シャッフルパンツ

21

P以外の入力として使用される他のすべてのプログラムについて、プログラムPによって停止問題を計算できますか?

いいえ。プログラムの無限のシーケンスを考えてみましょうここで、P iは「頭のi  を右に移動し、次にi  を左に移動してから、Pが行うことを正確に行う」です。これらのプログラムはどれも、すべての入力に対してPとまったく同じ出力を生成し  ます(P  が永久にループする場合は永久にループすることを含みます)が、すべて異なるプログラムです。P1,P2,PiiiPPP

P


15
あなたの最後の文はおそらく真実だと思いますが、プロパティが決定不能であるため、そのプロパティに基づいて入力セットを制限すると問題が決定不能になるとは思いません。馬鹿げた例として、入力セットを終了プログラム(決定できないプロパティ)に制限した場合、問題は(常にtrueを返すプログラムによって)決定可能になります。
オーウェン

3
@Owen制限自体が決定できない場合、実際には何も買えないように制限を課すことはできません。
デビッドリチャービー

5

特定のクラスのプログラムが停止または停止しないことを示すアルゴリズムがあります。例えば、

  • 有限状態マシンをモデル化するプログラムが停止するかどうかをアルゴリズムで判断できます。
  • 線形制限のチューリングマシンが停止するかどうかを算術的に判断することができます。
  • プログラムがどの複雑度クラスに属しているかを知っていれば、プログラムは有限入力で停止することがわかります。

任意のプログラムが停止するかどうかを判断するアルゴリズムはありませんが、大部分のコードは停止する(ほとんどのサブルーチンのように)か、停止しない(イベントを処理する無限ループのように)ように設計されており、どちらがアルゴリズムであるかを判断することが可能です。言い換えれば、「停止」、「停止しない」、または「私は知らない」のいずれかに答えるアルゴリズムを持つことができ、そのようなアルゴリズムは有用となる十分なプログラムをカバーするように設計できます。


これはgotoと何の関係がありますか?gotoを使用し、有限状態マシンをモデル化する限り、停止するかどうかを決定するプログラムを作成することはできませんか?
ベルギ

私はforループの観点から停止について書き、その後、有限状態マシンなどについて話すためにそれを変更しました
Antonio Perez

4

矛盾による証拠は網羅的である必要はなく、反例は1つあれば十分です。停止の問題が決定不能であることの証明は、停止プロパティを決定できないPの1つの例を提供します。この証明は、Pがそのようなプログラムだけであるとは述べていません。実際、Pの完全に異なるクラスを構築する独立した証明が存在する可能性があります。


3

証明は確かにより一般的です:停止する問題はライスの定理の特別な場合であり、

Φ

ABΦ(A)Φ(B)

xx

使用するプログラムのスペースを制限することで、いくつかの結果得ることができます、これらの制限はかなり厳しいものでなければなりません。たとえば、与えられたプログラムが100ステップ以内に停止するか、永久に実行されることが保証されている場合、停止するかどうかの決定は容易になります。

NkBB(k)


1
N

1
最後の段落はBusy Beaverに似ています。

「かなり抜本的な」制限に関しては、プログラミング言語全体が重要です。彼らは比較的高度な洗練度を必要とする傾向があるので、あなたはその抜本的なことを考えるかもしれませんが、おそらく停止する可能性のあるプログラムのスペースで本当の問題を解決することは可能です。
ベンミルウッド

en.wikipedia.org/wiki/Rice%27s_theoremへのリンクを含めると、IMOが意味をなします。
ドミトリーグリゴリエフ

ありがとう、答えを更新しました。@BenMillwood確かに、しかし彼らの解決策が「すべてを停止させる」ことだとすれば、それが本当にアレッシオが探しているものかどうかはわかりません。ただし、停止動作は決定可能ですが、自明ではない場合は興味深いでしょう:多分Agda +共誘導型?
アントン

0

Rを再帰的に列挙可能であるが非再帰的なセットとする。そのようなセットは無限にあります。Tを、kがRにある場合にのみ入力kで停止するチューリングマシンとします。このようなTは、再帰的に列挙可能なセットに対して存在します。このTの停止問題を解決できるプログラムを作成することは不可能です。これは、Tが停止するかどうかを決定するアルゴリズムがRのメンバーシップを決定するアルゴリズムを生成するためです。そのようなRは無限に多く、それぞれが異なるチューリングマシンを提供するため、プログラムPを停止しようとすると失敗するチューリングマシンは無限に多くあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.