停止問題の決定不能性の証明


25

停止問題の決定不能性の証拠を理解するのに苦労しています。

http://computing.guide/wp-content/uploads/2014/12/HaltingProblem1.jpg

がプログラムが入力で停止するかどうかを返す場合、なぜと両方にのコードを渡す必要があるのですか?HababPab

にと任意の入力(などを入力できないのはなぜですか?HPバツ


ここで使用されている計算モデルでは、すべての(エンコードされた)入力が許可されることに注意してください。型チェックなどはありません。いつでもプログラムをエンコードして、それを自分自身への入力として渡すことができます。
asmeurer

2
Hに任意の入力を与えることができます。この証明の構造では、特定の入力を考慮する必要があります。H
デビッドリチャービー16年

1
プログラムに任意の入力を提供できます。目的は矛盾を見つけることです。理論的には、マシン「H」はあらゆる種類の入力に対して機能するはずです。したがって、矛盾を引き起こす可能性のあるすべての入力の1つを検討します。
ウグネス

この証明には微妙な欠陥があります。それ以外のすべてで機能するH()があるかどうかを検討してください。これは、停止問題の一般的な解決策です。
ジョシュア

回答:


27

証拠は矛盾を見つけることを目指しています。がそれ自体への入力として使用される理由を理解するために、導出された矛盾が何であるかを理解する必要があります。矛盾は非公式です。「aがbを受け入れる」と決定するマシンH(a、b)がある場合、自分自身を受け入れないマシンを受け入れるマシンを構築できます。(あなたはそれを得るまで数回ということ読む。)画像に示されているマシン-レッツ・コールもM - M P =Pは受け付けませP ⟩をPMMP=PP

あなたが尋ねるとき、矛盾が起こる:ん受け入れMをMM?2つのオプションを試して、矛盾があるかどうかを確認してください。

受け入れMを場合に限り、 Mは受け付けませんMをMMM。これは明らかに矛盾しています。M

これが、証明が任意の入力ではなく、それ自体でを実行することが不可欠である理由です。これは、対角引数として知られる不可能性証明の一般的なテーマです。P


38

しばらく画像を無視してください。間もなく到達します。プログラムは停止テスターであると想定されています:Hにプログラムaの入力(プログラムのリストとしてaと考えてください)およびbH a b 次のように機能しますH(a,b)HaabH(a,b)

  1. 入力としてbが与えられたときにaで表されるプログラム停止した場合、H a b は「yes」と答えます。プログラムはで説明した場合一方、入力が与えられたとき、永遠の実行B、その後H bが、「いいえ」と答えるでしょう。abH(a,b)abH(a,b)
  2. 重要なことに、プログラムは常に停止し、任意のペアa b に対して正しい答えを返します。H(a,b)

議論、ビルドすることは不可能であるが、特定の「あまのじゃく」プログラムの動作に依存しているP使用して、1 Hをサブルーチンとして。Pは、入力としてプログラムxのリストを受け取り、次のことを行います。HPHPx

P(x) =
  run H(x, x)
  if H(x, x) answers "yes"
      loop forever
  else
      halt

それを見るのは難しくありません

は、プログラム xが独自の説明を入力として与えられたときに永久に実行される場合にのみ停止します。P(x)x

これまでのところ、はサブルーチンHがプログラムである限り、確実にプログラムになります。PH

今、絵に戻ります。入力として独自の説明が与えられるとどうなりますか?絵はまさにそのシナリオを説明しています。pをプログラムPの説明とし、次に上記の強調表示された部分に代入すると、次のようになります。PpP

は、プログラム P p が永久に実行される場合にのみ停止します。P(p)P(p)

我々はサブルーチンという結論に強制しているので、明らかに、この逆説的な動作は、不可能である、それが与えられています一つのケースに失敗したため、停止テスターすることはできませんP P を入力として。H正常に機能する他のケースもありますが、Hは少なくとも1つの状況で失敗するため、必要に応じて完全な停止テスターに​​することはできません。H(p,p)HH


私はこの答えが好きです。私はその証明を理解しましたが、Hが再帰制限例外をスローできることを証明しているように見えます。
ファックス

2
@Fax Hは2回以上呼び出されることはありPません。再帰はまったくありません。H(P, P)実行されPP、渡されたときに停止するかどうかを「魔法のように」判断するだけです。
Ajedi32

@ Ajedi32 H(P,P)は実行する必要はありませんが、停止するかどうかを判断する一部としてP実行H(x ↦ H(x,x), P)する必要がありPます。などに展開H(x ↦ H(y ↦ H(y,y), x), P)します。
ファックス

@Faxの実装はH、この証明では指定されていません。そのため、それが何であれ、それ自体であれ、何も実行する必要はありませんP。証拠Hは、停止問題を魔法のように決定する何らかのプログラムが存在するという仮定から始まり、そのようなプログラムの存在そのものが矛盾であり、したがってそのようなプログラムは存在しないことを証明し続けます。
Ajedi32

1
@Fax自分自身で呼び出された場合を除き、停止の問題を決定するプログラムが存在できるかどうかについて、良い点を挙げます。参照してください任意の証明は自己参照または対角に依存しない停止問題の決定不能ありますか?それについての興味深い質問に対して。
Ajedi32

9

よりきれいな証明を試してくださいアニメーションでを。そして、縫製業者にはサイトへの単なるリンク以上のものが含まれているはずなので、ここにあなたの質問に対する答えがあります。

最初に、Halting oracleが存在しないという証明がどのように機能するかを思い出しましょう。HHalting oracleの候補があれば、プログラムPと入力aがあり、どのプログラムがH何を正しく予測できないかを証明します。P(a)ます。

定理: Let Hは、2つの入力を受け取り、常にhaltまたはのいずれかを返すプログラムloopです。次にプログラムが存在するQと、入力aようにQ(a)停止した場合、およびのみ、もしH(Q,a)戻りますloop

証明。プログラムを検討する

program P(y):
  if H(y,y) = halt then
    loop forever
  else:
    return

させQ = Pてくださいa = P。どちらかH(Q,a) = haltH(Q,a) = loop

  • もしH(Q,a) = haltその後、Q(a)(ちょうどであるP(P)の定義によって永遠に実行されます)P
  • もしH(Q,a) = loop、その後Q(a)のdefinitoinで停止P

QED

他のもののH(P,P)代わりに私たちが考えた理由を尋ねた。明白な答えは、「証明が機能するためです」です。任意のに使用した場合、スタックします。実際、証明は次のようになります。H(P,X)XH(P,P)H(P,X)X

壊れた証拠。プログラムを検討する

program P(y):
  if H(y,y) = halt then
    loop forever
  else:
    return

させるQ = Pa = Xいくつかの任意のX。どちらかH(Q,X) = haltH(Q,X) = loop

  • 仮定H(Q,X) = haltし、我々は何を言うことができないP(X)ためか、ないP(X)停止が何に依存してH(X,X)戻ります。我々が立ち往生しています。我々はそれを知っていた場合は、P(X)X(X)同じですが、我々は進歩を遂げることができました。(だから、私たちは本当に取る必要がありますX = P)。
  • その場合H(Q,a) = loop、私たちは再び立ち往生しX = Pます。

QEDなし。

これH(P,P)が、アイデアを機能させるために考慮する必要があることを示していることを願っています。


ハハ。驚くばかり!:)
aelguindy

2

証明の結果はこの類推です:

PPPPPPPPです。🙂

PP

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