私は CS の理論クラスを受講しており、停止の問題について話し合ったところです。私の理解では、問題が解決できない理由は、プログラムが停止しないかどうかを教えてくれるプログラム Halt があり、別のプログラムを書くと、
function Proof (program, input)
if (Halt(program, input)) loop infinitely;
else return 1
私にとって、問題の核心は、if 条件がプログラムを無限にループさせることであり、これが Halt の失敗条件であるということです。
これは私が確信していない部分です:
別のプログラムが特定の入力に対して数値 4 を返すかどうかをチェックするプログラムがあるとします。このプログラムを FourCheck としましょう。次に、次のような別のプログラム ProofFour を作成できます。
ProofFour(program, input)
if(FourCheck(program, input) return 5;
else return 4;
この場合、ProofFour(ProofFour,input) を呼び出すことができます。FourCheck() が true を返す場合、ProofFour は 5 を返すため、FourCheck() の出力は正しくありません。FourCheck が false を返す場合、ProofFour は 4 を返し、FourCheck() の出力が正しくなくなります。
したがって、チェッカー プログラムの出力を本質的に反転させる Proof() や ProofFour() に似たプログラムをいつでも構築できるため、他のプログラムをチェックするプログラムは本質的にないと仮定するのは正しいでしょうか。