停止する問題は、理想的なコンピューター上の純粋なプログラムで決定可能ですか?


25

停止する問題が不純なプログラム(つまり、I / Oやマシンのグローバル状態に依存する状態を持つプログラム)で決定できない理由を理解するのは非常に簡単です。しかし、直感的には、理想的なコンピューターでの純粋なプログラムの停止は、静的分析などによって決定できるように思われます。

これは事実ですか?そうでない場合、この主張を反証する反例や論文は何ですか?


35
停止の問題が決定不能であるという標準的な証明(wikipedia:en.wikipedia.org/wiki/Halting_problem#Sketch_of_proofで説明されているものなど)はすべて、I / Oを表現しようとさえしない計算モデルで機能することに注意してください。また、たとえばチューリングマシンはステートフルですが、その動作は純粋な関数の観点から正式に定義されています。したがって、ある意味では、「理想的なコンピューター上の純粋なプログラム」は、実際には停止する問題が決定不能であることが証明される設定です。
ベン

1
どんな研究をしましたか?グーグル「Halting problem」はすでにこの質問に答えているはずです。
ジョナサンキャスト

回答:


38

ここに、ホールティング問題からの縮小による決定不能性の証拠があります。

削減:マシンを考えるとと入力xは、新しいチューリングマシンの構築H任意の入力を読み取ることはありませんが、書き込みはMXをテープにしてシミュレートMをのxまでのM停止。MバツHMバツMバツM

この新しいマシンの動作は入力テープに依存しないため、静的解析のみを適用できる純粋なチューリングマシンです。静的解析が十分であれば、Hが停止するかどうかを示すことができます。これは、Mxで停止するかどうかを示し、不純なマシンの停止問題を解決します。HHMバツ



@HendrikJan正確に!
リューウェヴィンクハイゼン

16

いいえ、そうではなく、さらにI / Oに依存しません。

単純な反例:完全な奇数を見つけるプログラムを作成します(これは未解決の問題です:存在するかどうかはまだわかりません)-入力を受け取らず、不純なタスクを実行しません。見つかった場合は停止するか、無限に動作します(そのような番号が存在しない場合)。静的解析が停止ケースを決定するのに十分強力である場合、この(およびより多くの質問)に答えるために使用されます。停止はそのような数の肯定的な存在を意味し、停止しないことはそのような数がないことを意味しますが、残念ながら静的解析強力ではありません。


18
私はこの答えに要点を本当に見ていません。現在、そのような数値が存在するかどうかわからないからといって、それが存在しないことを意味するわけでも、将来これを決定できる静的アナライザーを書くこともできないというわけではありません。より良い代替策は、既知の決定不可能な問題を使用することです。たとえば、すべてのディオファンタス方程式を解くことができるプログラムはないことが知られており、そのような方程式を解くことは、答えに示されているものと同様のタスクです。
バクリウ

2
停止問題が決定可能であれば、プログラムを停止するかどうかを尋ねるフォームに入れることができれば、すべての問題が決定可能になります。またはフォームの質問:カウント可能なセットがあり、個々の潜在的な要素がセットに含まれているかどうかを判断できます。セットは空ですか?ディオファントス方程式には、数え切れないほどの潜在的な解のセットがあり、個々の潜在的な解が解であるかどうかを確認できます。ホールティング問題が決定可能であれば、ディオファントス方程式が決定可能になります。
gnasher729

10
@ gnasher729はい、それらは停止ではないため、停止の問題は決定できません。それが私のポイントです。この答えの声明には本当の意味はありませんが、「この数学的定義を考慮してください。現在、これを決定するプログラムが停止するかどうかはわかりませんが、明日、男はそれができるかどうかを知ることができ、この答えは100になります%無意味」。
バクリウ

6
これは、πが数字のシーケンスを持っているかどうかどのように決定できるのでしょうか?、停止する問題は、単一の問題ではなく、問題のクラスでは決定できません。
-npostavs

2

対角化 による古典的な証明は純粋な機械であり、純粋なチューリング機械であるだけでなく、「未解決の問題」に依存しません。

たとえば、Collat​​z予想を実行するチューリングマシンは不明な停止ステータスを持っていますが、それはCollat​​z予想についての無知に依存しています。 (入力によっては停止しない、または常に停止する)。

ですから、Collat​​z予想はすでに(少なくとも一時的に)あなたの質問に答えることができますが、それは私たちが知らない何かに依存しています。代わりに、古典的な証明は解決された問題です:私たちはすでにそれが決定できないことを知っています。


0

記録のためだけに、停止する問題の決定不能性の標準的な証明は、クインと同じ考え方に依存しています。そのサブタームの一部がプログラム全体のソースコードに評価されるプログラムを書くことができるということです。次に、haltsプログラムのソースコードが与えられ、そのプログラムがすべての入力で停止した場合にTrueを返し、それ以外の場合にFalseを返す関数があった場合、これは正当なプログラムになります。

prog() = if halts "prog" then prog() else ()

どこ"prog"のソースコードに評価されるいくつかの式になりprogます; ただし、prog停止しない限り、(すべての入力に対して)停止することがすぐにわかります。これは矛盾です。この証明には何もI / Oに依存していません(クインを書くためにI / Oが必要ですか?)。

ちなみに、「ダイアログベースのI / O」を調べて、I / Oが問題とまったく無関係であることのさらなる証拠を探すことができます(基本的に、I / Oを行うプログラムは、 (明示的な)関数の引数と、遅延言語での(明示的な)追加結果としての出力を返します)。残念ながら、今のところ、合理的で偏りのない(または親ダイアログ)ページをウェブ上で見つけることができません。

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