停止する問題が不純なプログラム(つまり、I / Oやマシンのグローバル状態に依存する状態を持つプログラム)で決定できない理由を理解するのは非常に簡単です。しかし、直感的には、理想的なコンピューターでの純粋なプログラムの停止は、静的分析などによって決定できるように思われます。
これは事実ですか?そうでない場合、この主張を反証する反例や論文は何ですか?
停止する問題が不純なプログラム(つまり、I / Oやマシンのグローバル状態に依存する状態を持つプログラム)で決定できない理由を理解するのは非常に簡単です。しかし、直感的には、理想的なコンピューターでの純粋なプログラムの停止は、静的分析などによって決定できるように思われます。
これは事実ですか?そうでない場合、この主張を反証する反例や論文は何ですか?
回答:
ここに、ホールティング問題からの縮小による決定不能性の証拠があります。
削減:マシンを考えるとと入力xは、新しいチューリングマシンの構築H任意の入力を読み取ることはありませんが、書き込みはMとXをテープにしてシミュレートMを上のxまでのM停止。
この新しいマシンの動作は入力テープに依存しないため、静的解析のみを適用できる純粋なチューリングマシンです。静的解析が十分であれば、Hが停止するかどうかを示すことができます。これは、Mがxで停止するかどうかを示し、不純なマシンの停止問題を解決します。
いいえ、そうではなく、さらにI / Oに依存しません。
単純な反例:完全な奇数を見つけるプログラムを作成します(これは未解決の問題です:存在するかどうかはまだわかりません)-入力を受け取らず、不純なタスクを実行しません。見つかった場合は停止するか、無限に動作します(そのような番号が存在しない場合)。静的解析が停止ケースを決定するのに十分強力である場合、この(およびより多くの質問)に答えるために使用されます。停止はそのような数の肯定的な存在を意味し、停止しないことはそのような数がないことを意味しますが、残念ながら静的解析強力ではありません。
対角化 による古典的な証明は純粋な機械であり、純粋なチューリング機械であるだけでなく、「未解決の問題」に依存しません。
たとえば、Collatz予想を実行するチューリングマシンは不明な停止ステータスを持っていますが、それはCollatz予想についての無知に依存しています。 (入力によっては停止しない、または常に停止する)。
ですから、Collatz予想はすでに(少なくとも一時的に)あなたの質問に答えることができますが、それは私たちが知らない何かに依存しています。代わりに、古典的な証明は解決された問題です:私たちはすでにそれが決定できないことを知っています。
記録のためだけに、停止する問題の決定不能性の標準的な証明は、クインと同じ考え方に依存しています。そのサブタームの一部がプログラム全体のソースコードに評価されるプログラムを書くことができるということです。次に、halts
プログラムのソースコードが与えられ、そのプログラムがすべての入力で停止した場合にTrueを返し、それ以外の場合にFalseを返す関数があった場合、これは正当なプログラムになります。
prog() = if halts "prog" then prog() else ()
どこ"prog"
のソースコードに評価されるいくつかの式になりprog
ます; ただし、prog
停止しない限り、(すべての入力に対して)停止することがすぐにわかります。これは矛盾です。この証明には何もI / Oに依存していません(クインを書くためにI / Oが必要ですか?)。
ちなみに、「ダイアログベースのI / O」を調べて、I / Oが問題とまったく無関係であることのさらなる証拠を探すことができます(基本的に、I / Oを行うプログラムは、 (明示的な)関数の引数と、遅延言語での(明示的な)追加結果としての出力を返します)。残念ながら、今のところ、合理的で偏りのない(または親ダイアログ)ページをウェブ上で見つけることができません。