問題の停止-私を悩ませている1つの問題


8

私の知る限りでは、停止の問題は、テスト対象のプログラムがあるプログラム(存在するプログラム、または入力データに関係なく)が終了するかどうかを決定するプログラムが存在するかどうかを尋ねます。この問題に対する答えは「いいえ」です。言い換えれば、すべての可能なペア(一部のアルゴリズム、一部の入力データ)を検証できる「単一」のプログラムはありません。

しかし、特定のプログラムXが終了するかどうかを決定できないという意味ではありません。

他の回答にはまだコメントできませんが、そのうちの1つが私の注意を引き付けました。

それはあなたがあなたの無知な上司に「あなたが求めていることは数学的に不可能である」と伝えることを可能にするので、実際には重要です。

たぶん、その人の意味を教えてくれませんか 私のシナリオでは、私の無知な上司が、私のプログラム(特定のプログラム)が終了するかどうかを確認(実際には、証明または反証)するように依頼することができます。そしてもちろん、終了する(または終了しない)ことが証明できるペア(アルゴリズム、入力データ)があります。

問題は、そのようなペア(プログラム、入力データ)ごとに個別に証明できるかどうかです。答えが「はい」の場合でも、問題があります-「入力データ」が無限に存在する可能性があります。したがって、質問するのはかなり自然です。どの入力データを入力しても、すべてのアルゴリズムについて、このアルゴリズムが終了する(またはその逆になる)ことを証明できますか?


そのような証拠をすべて見つけることができるかどうかは、論理の問題だと思いますが、確かに、まだ見つけていないことがたくさんあります。
ラファエル

停止問題はプログラムが停止するかどうを決定できる特定のアルゴリズムとして定義されます。特定のプログラム(または複数の特定のプログラム)を、停止できるかどうかを異なるアルゴリズムでチェックすることは可能です(一般的なケースではありません)
Nikos M.

回答:


6

いいえ、すべてのアルゴリズム(Turingマシン)でこれを証明することはできません。これは、計算に関する問題ではなく、証明の性質に関する問題になります。

以下のチューリングマシンを検討文の証拠が存在する場合は、チェックを:XをMバツ停止、長さ| x | (自己参照の説明については、Kleneeの再帰定理を参照してください)。そのような証明が見つかった場合は、無限ループに入ります(そうでなければ停止します)。バツMバツ|バツ|

MバツバツppMバツバツMMバツバツTTバツMバツ


これは、「入力したデータに関係なく、すべてのアルゴリズムについて、このアルゴリズムが終了する(またはその逆)ことを証明できますか?」に対する答えです。- 念のため。
user4205580 2015年

はい。より多くの文字が必要
Arielが

Godelの不完全性の結果にも興味があるかもしれません。基本的に、算術について話すのに十分強力な論理システムには、証明できない真のステートメントがあります。
jmite 2015年

Mバツバツ=2222

yMyバツ

2

1つの特定のプログラムについて、プログラムがすべての入力で停止することを確実に証明できます。私のプログラムには、最初の命令として「停止」があります。

別の例:チューリングマシンシミュレータ(つまり、ユニバーサルチューリングマシン)である特定のプログラムを使用できます。これは、その入力をチューリングマシンの説明として解釈し、シミュレーターは空のテープで実行されているマシンをシミュレートします。したがって、シミュレータは、入力されているマシンが停止すると停止し、入力されているマシンが永久に実行されると永久に実行されます。(入力がTuringマシンを説明する正しい形式でない場合、シミュレーターは停止します。)

ブランクテープで起動したときに任意のチューリングマシンが停止するかどうかを判断することは不可能です。そのため、私の特定のシミュレータマシンでは、任意の入力に対して何を実行するかを決定するアルゴリズムはありません。

これら2つの例が役立つかどうかはわかりません。

確かに多くの問題領域では、特定のプログラムが終了することを証明できるのは理にかなっています。私のプログラムが2つの行列を乗算する場合、それが永遠に続く方法がないことを証明できると期待します。


2

私は、架空のボスがこの答えにつながると推測する仮定の質問を少なくとも明確にすることができます。

この他のプログラム/テンプレート/データベースクエリなどを使用して、終了/例外の発生/メモリ不足を常に判断するプログラムを設計できますか?

不可能性の証明の要点は、そのようなタスクは達成できないということです。もちろん、そのようなタスクはかなりよく近似できることは今日の常識です。つまり、プログラムが例外を発生させるかどうかを決定するアルゴリズムを与えることは可能ですが、プログラムが例外を発生させても実際にはそれをしないでください

これらの一部は、実際に実行するのも困難です。たとえば、「現実世界のプログラム」のnullポインタ例外がないことよりも終了を証明するのは非常に困難です(ただし、理論的には同等です)。

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