私は、ホールディングプロブレムプルーフのアイデアを可能な限りアクセスしやすい方法で説明する方法を見つけようとしています(学部生のCS学生に)。私が見つけた最も単純な議論はこれです。これがまさに私が目指している治療スタイルです。ただし、自己参照(特に、プログラムがそれ自体で停止するかどうかのチェック)は、最も教訓的ではありません。
証明スケッチとして私が疑問に思っているのは、これ以上単純化できず、次のように言えない理由H(P,I)
です。停止する場合にtrueでP(I)
停止し、それ以外の場合はfalseで停止する停止問題のプログラムを想定すると、プログラムを作成できます。フォームの:
def Q(J):
if H(Q,J) then loop forever
else halt
...停止問題が有効なプログラムである場合にのみ有効なプログラムです。次に、次のように質問できます。H(Q,J)
任意の値に対して何を返す必要がありJ
ますか?両方の可能性に矛盾があり、の存在によりH
矛盾したプログラムを構築できるQ
ため、このような形式のプログラムはH
存在できないと結論付けます。
プログラムQ
が現在の入力で停止するかどうかをチェックする(そしてその逆を行う)という点で、まだいくつかの自己参照がありますが、私にとって、これは、呼び出しを必要とする状況を設定するよりもはるかに直感的ですフォームP(P)
やH(P,P)
など。しかし、私はこの単純な引数が使用されるのを見たことがありません。したがって、私の質問は次のとおりです。
- 上記の議論は、停止問題の証明(スケッチ)として十分ですか?
- もしそうなら、なぜこれほど多くの引数は、フォームの混乱のステップに行くのです
P(P)
かH(P,P)
?(式から重要でない「入力」を削除するだけですか?) - そうでない場合、何が欠けていますか?
- もしそうなら、なぜこれほど多くの引数は、フォームの混乱のステップに行くのです
このトピックには、次のようなさまざまな関連する質問があります。
また、ベリーのパラドックスに基づいた証明についての言及も見つかりました。これは非常に魅力的です。それでも、上記の特定の引数が機能するかどうかを自分で納得させることができませんでした(たとえ自分の理解のためだけでも、私はおそらく何か愚かなことを逃していると感じ、それが何であるか知りたいと思っています)。