終了するかどうかわからないプログラムの最も簡単な例は何ですか?


27

停止の問題は、特定のプログラムが停止するかどうかを判断するアルゴリズムがないことを示しています。結果として、終了するかどうかわからないプログラムがあるはずです。そのようなプログラムの最も単純な(最小の)既知の例は何ですか?


回答に矛盾があります。....ありがとう!ただし、停止プログラムはソースの知識を前提としています。...これが当てはまる場合は、質問に回答しています。停止プログラムはすでに知っているでしょう。標識を制御するシステムを想像してください。常に点灯し、点滅します。いつ停止するのでしょうか?電源障害、電源スイッチ、またはフラッシュシーケンス中。または、バッテリーのバックアップと発電機があれば、決して。
htm11h


停止の問題は、タイミングの上限を設定しない場合にのみ問題になると付け加えます。答えを得るのが遅すぎて役に立たないことと、まったく得られないこととの間に実際には違いはありません。正確性のリアルタイム定義のように、プログラムがいくつかのステップ内で答えを返すかどうかを尋ねることができます。タイムリーな回答を保証できない場合は、正確性の保証が不足しているプログラムが存在します。
ロブ

1
@Rob実際にはそうではありません。マシンが停止するかどうかわからない場合は、無期限に待機してマシンが停止するかどうかを確認できます。何千年も経った今でも、たとえば翌日に止まるかどうかはわかりません。
カイルストランド

@KyleStrand私はあなたに同意しています。しかし、現実的な計算はすべて期限(ミリ秒から数か月)の影響を受けるため、実際には完全に誇張された問題だと言っています。5秒で答えが必要な場合、重要なことは、5秒で答えを保証できるかどうかだけです。計算する時間が不定であれば、答えを保証できると仮定します。それは無駄な保証になります。
ロブ

回答:


41

非常に簡単な例は、Collat​​z予想をテストするプログラムです。

f(n)={HALT,if n is 1f(n/2),if n is evenf(3n+1),if n is odd

それはだ知られているため停止にn、少なくともまで5×2605.764×1018、一般的にはそれが開いて問題です。


9
質問の下にあるコメントから私のポイントを強調するために、問題は「すべてのn 停止しますか?」計算可能です。f(n)n
ラファエル

6
@KyleStrandこちらをご覧ください
ラファエル

10
@KyleStrand、ラファエルは100%正しいです。これはよくある誤解です。定義が非常に慎重に言っていることをたどる必要があります、そして、あなたはあなたの直観が定義と完全に一致しないことを発見するかもしれません。計算可能性の定義によれば、それを計算するチューリングマシンあれば十分です。チューリングマシンが何であるかを知っているかどうかは関係ありません。これを最初に見ると、多くの学生はそれが不正行為だと思うが、そうではない-それは定義の結果に過ぎない。
DW

2
@KyleStrandあなたはプログラムが問題を解決しなければならないという考えを取り除く必要があります。ありません。答えを出力するだけで、簡単な作業です。アルゴリズム的に、インスタンスの有限セットに関する問題は、答えをハードコーディングできるため、すべて退屈です。(そして場合でも、我々は答えを知っていない、我々はまだ正しいアルゴリズムがあることを知っている。)何かのためのアルゴリズムが存在しないことを示すとき、一般的に、あなたが作るために得ることはありません任意のそれが起こっているのかについての仮定を作業。私たちの想像力の欠如は証拠を提供しません。
ラファエル

2
@KyleStrand Afaik、今日教えられている計算可能性の標準的な定義を使用します(そして、afaikは何十年もの間)。答えとリンクされた資料を吸収し、どこが間違っているかを解決することをお勧めします。私と他の人が同じことを何度も繰り返すのは意味がありません。もう1つ試してください。計算可能性の定義は本質的に存在するものであり、建設的なものではありません。古典的な論理の領域内で考える限り、「解決」アルゴリズムを渡すことができる必要はまったくありません。正しい答えを与えるアルゴリズムがあることを示す必要があります。
ラファエル

31

停止の問題は、特定のプログラムが停止するかどうかを判断するアルゴリズムがないことを示しています。結果として、終了するかどうかわからないプログラムがあるはずです。

「私たち」はアルゴリズムではありません=)特定のプログラムがすべてのプログラムで停止するかどうかを判断できる一般的なアルゴリズムはありません。

そのようなプログラムの最も単純な(最小の)既知の例は何ですか?

次のプログラムを検討してください。

n = 3
while true:
    if is_perfect(n):
            halt()
    n = n + 2

関数is_perfectは、nが完全な数であるかどうかをチェックします。奇数の完全な数があるかどうかは不明であるため、このプログラムが停止するかどうかはわかりません。


7
私たちはアルゴリズムです。
PyRulez

3
@PyRulezは、人間の心の計算能力がチューリングマシンと同等であるという証拠はありません。証明は機能しません。たとえば、ある心を別の心でシミュレートする方法は不明です。
-avsmal

1
オーケー@avsmalが、ある非常に我々はハイパーコンピュータの能力があるとは考えにくいです。
PyRulez

2
@PyRulezジョンルーカスとロジャーペンローズは、人間の心はある種の量子力学的に強化された「非アルゴリズム」計算の結果かもしれないと示唆しています。それはいくつかの強い仮定です。しかし、少なくとも私たちの心には不確実性の原因があるかもしれません。そして、それは証拠を破るのに十分です:停止するかどうかが不明な場合、「ランダム化」(ランダム化の意味の適切な定義のために)チューリングマシンを無効にすることは不可能です。
-avsmal

5
量子コンピューティングはハイパーコンピューティングと見なされますか?量子コンピューターはチューリングマシンで完全にシミュレートできると仮定しましたが、少し遅くなります。
MaiaVictor

10

あなたが書く:

停止の問題は、特定のプログラムが停止するかどうかを判断するアルゴリズムがないことを示しています。結果として、終了するかどうかわからないプログラムがあるはずです。

これは、両方向の非セキトゥアです。あなたは対処する価値のある一般的な誤 toに屈します。

固定プログラム与えられた場合、その答えは「はい」または「いいえ」であるため、その停止問題(「Pは常に停止しますか?」)は常に決定可能です。どちらかがわからなくても、常に「はい」と答える2つの些細なアルゴリズムのいずれかがわかります。「no」はP停止問題を解決します。PPP

アルゴリズムですべてのプログラムの停止問題を解決する必要がある場合にのみ、そのようなアルゴリズムが存在しないことを示すことができます。

さて、停止問題が決定不能であることを知っていても、誰も終了またはループを証明できないプログラムがあることを意味するわけではありません。チューリングマシンよりも強力ではない場合でも(これは仮説にすぎず、証明された事実ではありません)、私たちが知っているのは、すべてのプログラムにそのような証明を提供できる単一のアルゴリズム/人はいないということです。プログラムごとに異なる人が決定する場合があります。

関連する読み物:


したがって、実際の質問(以下で繰り返します)は、停止する問題が計算可能かどうかとは関係がないことがわかります。まったく。

[停止またはループすることを知らないプログラム]の最も単純な(最小の)既知の例は何ですか?

S

g(n)={1,S true,g(n+1),else.

確かに、これらはあまり「自然」ではありません。


  1. 必ずしもすべてではありませんが、何らかの意味で「多く」です。少なくとも無数にあります。

コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
ラファエル

私自身の理解のためにこれを言い換えようとすると、任意のプログラムが停止するかどうかを決定できるユニークなアルゴリズムはありませんが、可能なプログラムの停止問題を解決するためのプログラム固有のアルゴリズムがあるかもしれませんと言うのは正しいですか?
アサドSaeeduddin

@AsadSaeeduddinこれは「さらに悪い」ことです。与えられたプログラムのすべての有限セットに対して、停止の問題は些細なことです。すべての有限集合は決定可能です。
ラファエル

7

特定のプロパティを持つ数値の存在に関する未解決の問題があると、そのようなプログラム(そのような数値を検索するプログラム)が発生します。たとえば、Collat​​zの推測を考えます。本当かどうかわからないので、次のプログラムが終了するかどうかもわかりません。

    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  


0

決定可能性(CSと同等の形式化/停止問題の一般化)が言語に関連付けられているため、その形式で再キャストする必要があるため、質問は扱いにくいです。これはあまり指摘されていないようですが、数学/ CSの未解決の問題の多くは、決定性が不明な問題(言語)に容易に変換できます。これは、定理証明と(非)決定可能性分析との密接な対応のためです。たとえば、(2千年以上前の)ギリシア人にまで遡り、たとえばチャン/タオによる最近の主要な研究進歩の対象となる双子の素数予想を採用します。次のようにアルゴリズムの問​​題に変換します。

入力:N。出力:Y / N少なくともn個の双子素数が存在します。

アルゴリズムは双子素数を検索し、それらのn個を検出すると停止します。この言語が決定可能かどうかは不明です。双子素数問題(有限数または無限数があるかどうかを尋ねる)の解決も、この言語の決定可能性を解決します(有限である場合、いくつあるかが証明/発見されている場合)。

別の例として、リーマン仮説を取り上げ、この言語を考えてみましょう。

入力:N。出力:Y / N リーマンゼータ関数の非自明なゼロが少なくともn個存在します。

アルゴリズムは非自明なゼロを検索します(コードは特に複雑ではなく、ルート検出に似ています。また、基本的にxより小さいすべての素数の「パリティ」の合計を計算する比較的単純な他の同等の定式があります)それが見つかったn個それらのと、再び、そのこの言語は決定可能で、解像度がリーマン予想を解決するための「ほぼ」と同等であれば知られていません。

さて、さらに壮大な例はどうですか?(注意、おそらくより物議をかもします)

入力:c:出力:Y / N SATにはO(n c)アルゴリズムが存在します。

同様に、この言語の決定可能性の解決は、P vs NP問題とほぼ同等です。ただし、この場合の問題の「単純な」コードの場合はそれほど明白ではありません。


1
ダウンボッターは、この答えの何が悪いのか説明しますか?
MaiaVictor

2
「ツインプライム」言語は決定可能です。有限数しかない場合N そのうち、答えは「はい」です nNそれ以外の場合は「いいえ」、そうでない場合は常に「はい」。確かに、たちは知りませんN、それは無関係です、(非常に単純な)チューリングマシンが答えます。「フェルマーの最後の定理」言語のように、「整数はありますかabc そのような an+bn=cn ために n?」、最近「私たち」はこれを見つけました N=2、ウィルズの証明は言語を変えなかった。
フォンブランド

3
私は支持者ではありませんが、この答えの主張はすべて間違っています。これらの3つの問題はすべて、証明可能に決定可能です(証明されていない仮定をする必要はありません)。理由については、ラファエルの答えをよく調べてください。
DW

おそらく、入力にTMを指定する必要があり、アルゴリズムがTMが問題を計算するかどうかを決定します。もっと考える必要があります...これらのタイプの問題には、基本的に未解決の問題を未決定の言語に結びつける簡単なレシピがあると思います...しかし、これはCS refsではほとんど文書化/定式化されていないことに同意しましたrefs ...または入力は証明であり、言語は証明が正しいかどうかを検証します...他の高い投票された答えは、奇数の完全な数、collat​​z問題などに言及しています...プログラムは特定の定数について停止するかどうか不明です。
vzn

混乱させて申し訳ありません!いくつかのさらなる考察では、アサーションは終了することが知られていない単純なプログラムを記述する形で正しい(すべての入力について)(つまり元の質問)、DWによってスケッチ/指摘された全体的なアイデアの失敗はそれぞれに変換しようとしています決定できない言語。成功するものを探している後者の建設の考えを熟考し続けます。別の見方をすれば、問題は停止している問題ソルバーの個々のインスタンス/ 入力として見ることができますが、実際には停止している問題自体とは(既知ではありません)。
vzn

0

nごとに、 1n1050、nで始まるCollat​​zシーケンスは、10億回未満の反復で1に達します。答えがある場合、答えが「はい」であればプログラムを停止させ、答えが「いいえ」であれば永久にループさせます。

このプログラムが終了するかどうかはわかりません。(私たちは誰ですか?「私たち」とは、私の答えにコメントを追加できる人です)。しかし、信じられないほど強力なコンピューターを持っている人は言うかもしれません。一部の天才数学者が伝えることができるかもしれません。かなり小さいnがあるかもしれません。たとえば、n≈102010億回の反復が必要な場合。それは、多くの決意、多くの時間、そして多くのお金を持っている誰かの手に届くでしょう。しかし、今はわかりません。

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