停止の問題は、特定のプログラムが停止するかどうかを判断するアルゴリズムがないことを示しています。結果として、終了するかどうかわからないプログラムがあるはずです。そのようなプログラムの最も単純な(最小の)既知の例は何ですか?
停止の問題は、特定のプログラムが停止するかどうかを判断するアルゴリズムがないことを示しています。結果として、終了するかどうかわからないプログラムがあるはずです。そのようなプログラムの最も単純な(最小の)既知の例は何ですか?
回答:
停止の問題は、特定のプログラムが停止するかどうかを判断するアルゴリズムがないことを示しています。結果として、終了するかどうかわからないプログラムがあるはずです。
「私たち」はアルゴリズムではありません=)特定のプログラムがすべてのプログラムで停止するかどうかを判断できる一般的なアルゴリズムはありません。
そのようなプログラムの最も単純な(最小の)既知の例は何ですか?
次のプログラムを検討してください。
n = 3
while true:
if is_perfect(n):
halt()
n = n + 2
関数is_perfectは、nが完全な数であるかどうかをチェックします。奇数の完全な数があるかどうかは不明であるため、このプログラムが停止するかどうかはわかりません。
あなたが書く:
停止の問題は、特定のプログラムが停止するかどうかを判断するアルゴリズムがないことを示しています。結果として、終了するかどうかわからないプログラムがあるはずです。
これは、両方向の非セキトゥアです。あなたは対処する価値のある一般的な誤 toに屈します。
固定プログラム与えられた場合、その答えは「はい」または「いいえ」であるため、その停止問題(「Pは常に停止しますか?」)は常に決定可能です。どちらかがわからなくても、常に「はい」と答える2つの些細なアルゴリズムのいずれかがわかります。「no」はP停止問題を解決します。
アルゴリズムですべてのプログラムの停止問題を解決する必要がある場合にのみ、そのようなアルゴリズムが存在しないことを示すことができます。
さて、停止問題が決定不能であることを知っていても、誰も終了またはループを証明できないプログラムがあることを意味するわけではありません。チューリングマシンよりも強力ではない場合でも(これは仮説にすぎず、証明された事実ではありません)、私たちが知っているのは、すべてのプログラムにそのような証明を提供できる単一のアルゴリズム/人はいないということです。プログラムごとに異なる人が決定する場合があります。
関連する読み物:
したがって、実際の質問(以下で繰り返します)は、停止する問題が計算可能かどうかとは関係がないことがわかります。まったく。
[停止またはループすることを知らないプログラム]の最も単純な(最小の)既知の例は何ですか?
確かに、これらはあまり「自然」ではありません。
特定のプロパティを持つ数値の存在に関する未解決の問題があると、そのようなプログラム(そのような数値を検索するプログラム)が発生します。たとえば、Collatzの推測を考えます。本当かどうかわからないので、次のプログラムが終了するかどうかもわかりません。
n:=1;
found:=false;
while not found do
s:={};
i:=n;
while i not in s do
add i to s;
if i even then i:=i/2 else i:=3i+1
if 1 not in s then found:=true;
n:=n+1
ことを考えるとビジービーバー問題は5-状態-2シンボルチューリングマシンのために解決されていない、唯一の5つの州と2つだけのシンボルとチューリングマシンがなければならない停止に示されていないか、していない空のテープのために始めたとき。これは非常に短く、簡潔で、閉じられたプログラムです。
決定可能性(CSと同等の形式化/停止問題の一般化)が言語に関連付けられているため、その形式で再キャストする必要があるため、質問は扱いにくいです。これはあまり指摘されていないようですが、数学/ CSの未解決の問題の多くは、決定性が不明な問題(言語)に容易に変換できます。これは、定理証明と(非)決定可能性分析との密接な対応のためです。たとえば、(2千年以上前の)ギリシア人にまで遡り、たとえばチャン/タオによる最近の主要な研究進歩の対象となる双子の素数予想を採用します。次のようにアルゴリズムの問題に変換します。
入力:N。出力:Y / N少なくともn個の双子素数が存在します。
アルゴリズムは双子素数を検索し、それらのn個を検出すると停止します。この言語が決定可能かどうかは不明です。双子素数問題(有限数または無限数があるかどうかを尋ねる)の解決も、この言語の決定可能性を解決します(有限である場合、いくつあるかが証明/発見されている場合)。
別の例として、リーマン仮説を取り上げ、この言語を考えてみましょう。
入力:N。出力:Y / N リーマンゼータ関数の非自明なゼロが少なくともn個存在します。
アルゴリズムは非自明なゼロを検索します(コードは特に複雑ではなく、ルート検出に似ています。また、基本的にxより小さいすべての素数の「パリティ」の合計を計算する比較的単純な他の同等の定式があります)それが見つかったn個それらのと、再び、そのこの言語は決定可能で、解像度がリーマン予想を解決するための「ほぼ」と同等であれば知られていません。
さて、さらに壮大な例はどうですか?(注意、おそらくより物議をかもします)
入力:c:出力:Y / N SATにはO(n c)アルゴリズムが存在します。
同様に、この言語の決定可能性の解決は、P vs NP問題とほぼ同等です。ただし、この場合の問題の「単純な」コードの場合はそれほど明白ではありません。
nごとに、 、nで始まるCollatzシーケンスは、10億回未満の反復で1に達します。答えがある場合、答えが「はい」であればプログラムを停止させ、答えが「いいえ」であれば永久にループさせます。
このプログラムが終了するかどうかはわかりません。(私たちは誰ですか?「私たち」とは、私の答えにコメントを追加できる人です)。しかし、信じられないほど強力なコンピューターを持っている人は言うかもしれません。一部の天才数学者が伝えることができるかもしれません。かなり小さいnがあるかもしれません。たとえば、n≈10億回の反復が必要な場合。それは、多くの決意、多くの時間、そして多くのお金を持っている誰かの手に届くでしょう。しかし、今はわかりません。