なぜ、本当に、停止問題がそれほど重要なのでしょうか?


149

プログラムが停止するかどうかを判断する可能性を却下するために停止問題が頻繁に使用される理由がわかりません。ウィキペディア[記事] [1]は、有限のメモリを備えた決定論的なマシンが以前の状態を停止または繰り返すことを正しく説明しています。リンクされたリストがループしてO(1)のスペースの複雑さでホールティング関数を実装するかどうかを検出するアルゴリズムを使用できます。

Halting Problemの証明は、いわゆる「パラドックス」、つまり、嘘つきのパラドックスと同じように(少なくとも周期的な)自己参照の矛盾にすぎないように思えます。唯一の結論は、停止機能がそのような不正な質問の影響を受けやすいということです。

したがって、逆説的なプログラムを除き、停止機能は決定可能です。それでは、なぜそれを反対の証拠として保持するのでしょうか?

4年後:これを書いたとき、私はちょうどこのビデオをました。プログラマーはいくつかのプログラムを取得し、どのプログラムが終了するかを判断する必要があり、ビデオではそれが不可能な理由を説明しています。欲求不満だったのは、arbitrary意的なプログラムがあれば、主人公がそれらが終了したかどうかを証明できる可能性があることを知っていたからです。一般性の概念はどういうわけか失われました。「一部のプログラムは終了することが証明できない」と言うことと、「プログラムが終了することが証明できない」と言うことの違いです。そのための多くのアルゴリズムが正式に実証されています。私がオンラインで見つけたすべての参考文献によってこの区別をすることができなかったのは、この質問のタイトルにどのように来たかでした。このため、私はその答えに本当に感謝しています これにより、停止関数がブール値ではなく3項として再定義されます。


16
「有限メモリを備えた決定論的マシン」は、有限オートマトンにすぎないため「退屈」です。これらは、一般的な計算のモデリングには役立ちません。停止する問題に関しては、(チューリング)計算可能ではない関数の特定の例です。非構造的な証明に満足している場合、それを「必要としない」。ただし、まだ歴史的な関連性があります。
ラファエル

16
そうは言っても、あなたの質問は情報に乏しいと思います。計算可能性理論の基礎をブラッシュアップしたい場合があります(これ、そこで議論されているモデルではなく、現実によって通知される直感に挑戦します)。まずは参考質問をご覧ください。直感が致命的な欠陥であるという「証拠」がさらに必要な場合は、この質問を読んでください。
ラファエル

12
「リンクリストがループするかどうかを検出するアルゴリズムを使用して、O(1)のスペースの複雑さで停止機能を実装できます」-ただし、2 GBのストレージを備えたコンピューターの問題を解決する場合は、 2 ^ 2000000000ステップと大きなコンピューター。
user2357112 14年

11
ずいぶん前に、私は友人と停止問題についておしゃべりしていて、近くに座っている人が「停止問題とは何ですか、それは重要ですか?」と尋ねました。私の友人は彼に目を向け、「停止する問題を解決できれば、雲の上に都市を建設できる」と言いました。これは本当です。
フランシスデイビー14年

8
@emory主張は空虚に真実です:P => QそれPが偽であることを知っていれば(そして停止の問題が解決できないことを知っていれば)Qに対して真です。フランシスは「停止する問題を解決できれば、死そのものの治療法を見つけることができる」と言うこともできます。それが論理的含意の定義方法です。
アマロイ14

回答:


217

本当に実用的な問題の多くは、変装の停止問題だからです。それらの解決策は、停止する問題を解決します。

特定のプログラムで可能な限り高速のマシンコードを見つけるコンパイラが必要ですか?実際に停止する問題。

JavaScriptがあり、いくつかの変数は高いセキュリティレベルにあり、いくつかは低いセキュリティレベルにあります。攻撃者が高度なセキュリティ情報を取得できないようにする必要があります。これも停止する問題です。

プログラミング言語のパーサーがあります。変更しますが、以前のすべてのプログラムを引き続き解析するようにします。実際に停止する問題。

アンチウイルスプログラムがあり、悪意のある命令を実行するかどうかを確認したい。実際に停止する問題。

ウィキペディアの例については、はい、最新のコンピューターを有限状態マシンとしてモデル化できます。しかし、これには2つの問題があります。

  1. RAMの正確なビット数に応じて、すべてのコンピューターは異なるオートマトンになります。そのため、オートマトンは実行可能なマシンに依存しているため、これは特定のコードを調べるのに役立ちません。

  2. nビットのRAMがある場合は、状態が必要です。したがって、最新の8GBコンピューターの場合、2 32000000000です。これは非常に大きい数値であるため、Wolfram Alphaはそれを解釈する方法すら知りません。2 10 9を実行すると、300000000の 10進数が表示されます。これは、通常のコンピューターに格納するには明らかに明らかに大きすぎます。2n2320000000002109300000000

停止の問題により、アルゴリズムの相対的な難しさについて推論することができます。存在しないアルゴリズムがあること、時には問題を推測するだけで解決できるかどうかがわからないこともあります。

停止の問題がなければ、定理を入力し、それらが真であるかどうかを出力するヒルベルトの魔法のアルゴリズムを探し続けます。これで、私たちは見るのをやめることができ、これらの問題を解決するための発見的方法と二番目に良い方法を見つけることに努力を注ぐことができます。

更新:コメントで提起されたいくつかの問題に対処するためだけに。

@Tyler Fleming Cloutier:「無意味な」問題は、停止する問題が決定不能であることの証明で発生しますが、決定不能性の核となるのは、実際に無限の探索空間を持つことです。特定のプロパティを持つオブジェクトを検索していますが、プロパティが存在しない場合は、いつ完了したかを知る方法がありません。

問題の難しさは、それが持つ数量詞の数に関係している可能性があります。任意のプロパティを持つオブジェクトが存在することを証明しようとすると()、それが見つかるまで検索する必要があります。存在しない場合、これを知る方法はありません(一般的に)。すべてのオブジェクト()にプロパティがあることを証明することは困難ですが、プロパティを持たないオブジェクトを検索して反証することができます。forallとexistの間の交替が多いほど、問題は難しくなります。

詳細については、算術階層を参照してください。上記何レベル1が半決定可能であるが、決定不能です。Σ00=Π00

Halting問題やLiarsパラドックスのような無意味なパラドックスを使わずに、決定できない問題があることを示すこともできます。チューリングマシンは、ビットの文字列、つまり整数を使用してエンコードできます。しかし、問題は言語、つまり整数のサブセットとしてエンコードできます。整数のセットと整数のすべてのサブセットのセットの間に全単射がないことが知られています。したがって、チューリングマシン(アルゴリズム)が関連付けられていない問題(言語)がいくつかあるに違いありません。

@Brent:はい、これはこれが現代のコンピューターに決定可能であることを認めています。ただし、特定のマシンについては決定可能です。ディスク容量のあるUSBドライブ、またはネットワークに保存する機能などを追加すると、マシンが変更され、結果は保持されません。

また、アルゴリズムが「このコードは停止します」と言っている場合が多く、コードが失敗してメモリが不足するため、メモリを1ビット追加するとコードが成功し、別の結果を与えます。

実のところ、チューリングマシンには無限のメモリ容量はありません。無限の量のシンボルがテープに書き込まれることは決してありません。代わりに、チューリングマシンには「制限のない」メモリがあります。つまり、必要なときにより多くのメモリソースを取得し続けることができます。コンピューターはこんな感じです。RAM、USBスティック、ハードドライブ、またはネットワークストレージを追加できます。はい、宇宙の原子を使い果たすと、メモリを使い果たします。ただし、無制限のメモリを使用する方がはるかに便利なモデルです。


4
@Mehrdad「与えられたプログラムの可能な限り高速なマシンコード」の合理的な定義については、質問は理にかなっており、答えは「そのようなコンパイラは存在できません」です。
デビッドリチャービー14年

13
また、出力する最短のマシンコード、メモリアクセスが最も少ないマシンコードなどを見つけるためにも機能します。一般的なプログラムでは、最適な変換を見つけることは決定できません。これは基本的にライスの定理です。
jmite 14年

4
チューリングの等価性という密接に関連する概念がなくても、ヒルベルトの魔法のアルゴリズムを探し続けることへの帰結として、gotosまたは自己修正コードがより強力な計算を可能にするかどうかを議論し、ハードウェアのより強力な形式を探します、最高のプログラミング言語であるという議論は、現在よりもはるかに主観的です。
sdenham 14年

3
それはあなたが予期しない場所でさえ現れます。すべての有効なプログラムをコンパイルしながら、すべての無効なプログラムを拒否するC ++コンパイラを作成したいですか?最初に停止の問題を解決します-C ++テンプレートのメタプログラミングはチューリング完全であるため、一般的な場合にテンプレートが有効かどうかを判断するには、解決する必要があります。
マーク14年

7
@Merhrdad:「コンピュータープログラム全体のシミュレーション」の例は、停止の問題が非常に重要である理由の優れた例です。一部のプログラムでは、プログラムのシミュレーションは見かけほど簡単ではありません(たとえば、停止に関するウィキペディアのページをご覧ください)。問題は、このフォームで欺くことができた場合、あなたはそれが誰かに多くの隠された形(例えば、抗ウイルス問題など)を説明することがいかに難しい想像することができます
Cortのアモンを

49

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

停止する問題とさまざまなNP完全な問題(巡回セールスマンの問題など)は、「なぜXを実行するプログラムを作成できないのか」という形で多く出てくるので、説明する必要があります。宇宙の残りの寿命の中でそれが不可能または実行不可能である理由の。

チューリング完全ではない言語を設計できるため、無制限の再帰と反復を禁止することで分析できることに注意してください。




8
チューリング完全ではない言語を設計することは可能です:有用な非チューリング完全言語の例:SQL(実際には削除されたSQL)。チューリング完全性は、言語に自動的に非終了を追加します。これは、dbクエリを実行するときにおそらく必要ないものです。(私はすべての近代的なSQLの実装はとにかくチューリング完全性を提供して怖い、けれども)
Bakuriu

8
@FranciscoPresencia:彼らは研究チームを使用したので、一般的なポイントがまだあります。
RemcoGerlich

4
@MooingDuck:Flickrのことは、公園と鳥のどちらかを選択せず​​、どちらかまたは両方を確認(試行)します。または、XORではありません。
rickster

45

リンクされたリストがループしてO(1)のスペースの複雑さでホールティング関数を実装するかどうかを検出するアルゴリズムを使用できます。

そのためには、プログラムの部分的な状態のコピーを少なくとも2つメモリに保存し、さらにチェックプログラムのオーバーヘッドを保存する必要があります。そのため、特定のコンピューターでは、そのコンピューターで実行できるすべてのプログラムをテストすることはできません。メモリーが半分以下の小さなコンピューターで実行するプログラムのみをテストしてください。

特定の有限サイズのコンピューターの停止の問題は、その有限サイズのコンピューターでは解決できません。より大きなコンピューターでのみ解決できます。(これは、あなたが提案する方法だけでなく、あらゆる方法に当てはまります。正式な証明をするつもりはありませんが、ここに要点があります。コンピュータCが、少なくとも1つのPこれらのNプログラムが停止するかどうかをテストできるコンピューターVは、N個の異なる検証プログラムも実行できる必要があります。CとVが同じコンピューターの場合、PはVが実行するN個の異なるプログラムの1つではないため、コンピューターは少なくともN + 1個の異なるプログラムを実行する必要がありますが、これはCがN個の異なるプログラムを実行するという仮定と矛盾します。)

M2M256

そこにある数字は、コンピューターを有限状態マシンとして考えることが実際的ではないことを示しています。状態の数は有限かもしれませんが、それは気が遠く、非現実的に巨大です。おもちゃ以外のプログラムについて推論する唯一の方法は、状態を列挙するのではなく、論理的な推論を介して、抽象的です。

逆説的なプログラムを除いて、停止問題は決定可能です

パラドックスは問題からではなく、解決策の試みから来ています。どのプログラムでも、プログラムが終了する場合は「はい」、終了しない場合は「いいえ」と言うアルゴリズムがあります。それは些細です:どちらかprint "yes"またはprint "no"行います。問題は、どちらを呼び出すかを決定することです。停止する問題を解決できないことは、この決定を行うアルゴリズムがないことを意味します。証明は対角化引数を使用した理由は、それがあることを示す必要があるということであるなしソリューションが機能します。それを行うために、任意の目的のソリューションから開始し、見逃したプログラムを構築することによっていくつかのプログラムを見逃さなければならないことを示します。対角化(不適切に「パラドックス」と呼ぶもの)は、結果のプログラムではなく、構築にあります。結果のプログラムは自己参照型ではありません。

呼ばれる、より一般的な結果があるライスの定理と述べている任意の非自明なプロパティはプログラムの動作は決定できません。プログラムの動作にのみ依存し、記述された特定の方法に依存しないプロパティ(たとえば、「ソースコードは42文字未満で構成されていますか?」ソースコードが42文字未満で構成され、すべての入力に対して同じ結果を返すプログラム」は、「このプログラムは何も出力しませんか?」停止はほんの一例です。それは実際にしばしば出てくるため、重要なものです(通常、実行中のコンピューターの有限のリソースを考慮して、プログラムが妥当な時間内に結果を返すかどうかを知りたいのですが、実際にはほとんど答えられないので、十分な時間とメモリが与えられた場合にプログラムが最終的に終了するかどうかについての簡単な質問に喜んで解決します)。


2
「与えられた自己完結型プログラムと同じ出力(プログラム自体以外の入力なし)を生成するが、プログラムをロードする時間を含むより短い時間で生成するプログラムはあるか」という質問だと思います。候補プログラムの最大長は制限され、各プログラムをテストする時間も制限されるため、扱いにくいとはいえ、決定可能になります。
supercat 14年

@supercatはい、このプロパティは決定可能です。入力を受け取るプログラムの一般的なケースについては決定できません。
ジル14

1
停止問題は、通常、プログラムが実行中に受け取るすべての入力がプログラムにバンドルされていると想定しているという印象を受けました。特定の入力シーケンスを与えられたプログラムの停止問題を魔法のように解決できるマシンがあれば、そのようなマシンはプログラムがすべての制限された長さの入力に対して停止するかどうかを判断できますか?
supercat 14

3
@supercatいいえ、すべての入力を停止するオラクルは、与えられた入力を停止するオラクルよりも一歩先になります。それはこのサイトに良い質問をするだろう…実際、我々はそれを持っている ところで、私のデフォルトのメンタルモデルは再帰関数です。ここで、「入力」は「引数」を意味し、プログラムの実行はそれを引数に適用することを意味します。チューリングマシンに関するコンテキストでの私の記述が偽であることは正しいので、更新します。
ジル14

28

ホールティング問題は、いわゆる「パラドックス」、つまり嘘つきのパラドックスと同じように(少なくとも周期的な)自己参照の矛盾に過ぎないように思えます。それが行う唯一の結論は、停止機能がそのような不正な質問の影響を受けやすいということです

いいえ、それはだない停止問題とは何か。嘘つきのパラドックスのようなパラドックスは真実でも偽でもありません。単に意味をなさないだけです。一方、決定論的アルゴリズムは、指定された入力に対して停止するか、永久に実行されます。この関数にhalts(program, input)は、すべてのプログラム、すべての入力に対して完全に明確に定義された決定論的な値があります。どのプログラムでもそれを決定することはできません。または、より正確に言うと、すべてのプログラム/入力のペアに対して決定できるプログラムを書くことはできません。

Σn:=nnnnΣn


2
Liar's Paradoxは一般的な形式ではそれ自体を明示的に参照しますが、そうしなくても同じ問題が発生する可能性があることに注意してください。「文に対する答えは、テキストを取り、最初のカンマの後に引用符で囲まれたコピーを挿入することによって形成されますか?」そして、最初のカンマの後に一重引用符で囲まれたコピーを挿入しますか?このようなステートメントは、明示的に自己参照するものではなく、文字ごとに同一であるステートメントの真実性を指します。
supercat

2
@supercat:ハァッ、私は私が前に英語でQUINEを見てきたとは思いません...
SAMB

@SamB:いくつか見たことがありますが、オリジナルよりも冗長ですが、(おそらく)より自然に読めるオリジナルの定式化を試してみることにしました。
supercat

24

プログラムが停止するかどうかを判断する可能性を却下するために停止問題が頻繁に使用される理由がわかりません。ウィキペディアの記事は、有限のメモリを備えた決定論的なマシンが停止するか、以前の状態を繰り返すことを正しく説明しています。リンクされたリストがループしてO(1)のスペースの複雑さでホールティング関数を実装するかどうかを検出するアルゴリズムを使用できます。

まず、はい、理論的には、有限のメモリを備えた実際のコンピューターを有限状態マシンとして見るのが理にかなっています。しかし実際には、実際のコンピューターの状態の数は非常に大きいため、実際のコンピューターはチューリングマシンまたはその他の計算の無限状態モデルによってはるかによくモデル化されます。

そして第二に、理論的にさえ、現代のコンピューターを無限の状態機械と見なすことは理にかなっています。チューリングマシンには無限のテープはなく、マシンのメモリが不足したときにいつでも拡張できるテープがあります。それが実際のコンピューターでできることではありませんか?(そして、CPUのアドレススペースがなくなった場合、クラウドなどを使用できます。)

停止問題は、いわゆる「パラドックス」、つまり嘘つきのパラドックスと同じように(少なくとも循環的な)自己参照の矛盾に過ぎないように思えます。唯一の結論は、停止機能がそのような不正な質問の影響を受けやすいということです。逆説的なプログラムを除いて、停止問題は決定可能です。それでは、なぜそれを反対の証拠として保持するのでしょうか?

HPバツHPバツ

停止問題の決定不能性のチューリングの証明は、うそつきのパラドックスに似たトリックを使用しています。パラドックスはしばしば明白な矛盾と定義され、一部の人々は、パラドックスはしたがって本当の矛盾ではないと推論します。しかし、ラッセルのパラドックス(嘘つきのパラドックスの正式な集合理論的対応)は数学の本当の矛盾を示し、停止問題の決定不能性の証明は実際の証明は矛盾による証明に矛盾をます。


1
質問へのセットアップの重要な部分である、実際のコンピューター、有限状態マシン、およびチューリングマシン間の関係を説明するための+1。
デビッドリチャービー14年

1
あなたは私の興味をそそりました。明らかな矛盾と実際の矛盾の違いは何ですか?
ブレント14年

別の言い方をすれば、一般的に言えば、プログラミングは限られたリソースを想定していません。設計するアルゴリズムや記述するプログラムのほとんどは、特別に設計しない限り、限られた、または固定された量のコンピューティングリソースを使用するように書かれていません方法(例えば、これは組み込みシステム用のプログラミングの場合にしばしば必要です)。
reinierpost 14

3
@ブレント。多くのパラドックスはまったく矛盾していませんが、一見しただけです。よく見ると、推論に誤りがあるか、別のコンテキストで使用することで意味がわずかに変化した単語、または類似のものがあります。しかし、時には、矛盾が真の矛盾を明らかにすることがあります。
Hoopje

私はOP以来、この問題のオンとオフを研究しています。ゲーデルの不完全性定理は、使用されているロジックのシステムに関係なく、常に何らかのパラドックスを思いつくことが可能であることを意味していますか?
ブレント

17

jmiteは質問に本当にうまく答えました。自己参照メカニズムの使用が原因であると思う「嘘つきのパラドックス」との認識されている類似性に関する小さな補足説明を追加しましょう。

自己参照は逆説的ではありません!

自己参照は、計算(アルゴリズムがそのコード、リフレクションを参照できる)および人間の言語(自分自身、自己意識を参照できる)で非常に便利なツールです

嘘つきのパラドックスを引き起こす問題は自己参照ではなく、言語内の(正式な)言語の真の述語を使用しようとしています。自己参照がなくても問題が発生します。逆説を得るために自己参照を使用する機能は必要ありません。自己参照を排除できます!。それは文をより簡潔で簡潔にするだけですが、それは難しくありません。本質的には、Kleeneの固定小数点定理が証明される方法です。嘘つきのパラドックスが示唆しているのは、(正式な)言語の声明の真実はその言語に対して超越的であり、自己参照が問題ではないということです。


あなたの不快感は、(チューリングマシンの)停止の問題を決定できないためではなく、チューリングマシンをコンピュータの理論モデルとして受け入れているためだと思われます。通常(常にではありませんが)チューリングマシン(およびランダムアクセスマシンのような同等の計算モデル)は、有限オートマトンよりも実際のコンピューターでの計算の議論に非常に有用であり、それには十分な理由があります(チューリングマシンにはないことを念頭に置いてください)無限の量のメモリ、無限の量のメモリがあり、これらは異なるものです:無限の量は、マシンが無限の量のメモリを使用することではなく、必要に応じてより多くのメモリをマシンに提供できることを意味します)。

確かに、コンピューターを有限オートマトンと考えたい場合、それが目的にとって理にかなっている場合、有限オートマトンの停止問題は決定可能です(そして決定可能とは、有限オートマトンではなくチューリングマシンによって決定可能という意味です)。しかし、それは人々が停止問題を使用するときに通常意味するものではなく、チューリングマシンの停止問題を意味します。

s2s


14

停止問題は、以前は数学に存在していなかった「決定不能性」の新しい数学的概念を導入しました。これは、一部の問題に「証明」がないという(「一見逆説的な」)証拠でした。ゲーデリアの不確かさの概念に関連しています。ゲーデルの定理は、チューリングによる問題の定式化に数年先行していました。ゲーデルスの結果は、その時点ではかなり抽象的であると考えられており、研究者と専門家のみに知られていました。チューリングの定式化により、決定不能の原理は、任意のプログラムが停止するかどうかを決定するなど、コンピューターサイエンスにおける非常に実用的/実用的/ 応用的な質問に関連し、それははるかに少ない理論的概念と見なされ、 (コンピューターが定理を発見できるかどうかの課題)およびプログラムの終了を証明します。

別の興味深い角度は、千年紀で証明されていないギリシャ人に由来する(ディオファントス)数論にいくつかの非常に古い問題があることです。ディオファントス方程式に関する一般的な質問が決定不能であるという関連する結果があります。これは、ヒルベルト第10問題/定理と呼ばれます。ヒルベルトは20世紀の変わり目に住んでおり、数学が数学の問題に対する体系的なアプローチを見つけることができる研究プログラムとして提案しました。この課題/計画は、数十年後の決定不能性の発見によって深刻な打撃を受けました。決定不能性は引き続き非常に高度な研究分野であり、決定不可能な問題と決定可能な問題の境界は、おそらく今後の研究と分析の対象となるでしょう。


14

ホールティング問題は、ホールティング問題(別名Halt)自体では解決できないという古典的な「自己参照」ベースの証明を混同しているようです。

その自己参照プログラム(停止しない場合にのみ停止するプログラム)は、停止を解決できないことを証明しやすくするために構築されています。XがテクニックYを介して不可能であることを証明するという事実は、YがXを解けない唯一の理由であることを意味しませ

別の言い方をすれば、Haltを解決できないだけでなく、Haltかどうかを判断できないプログラムの種類を検出することはできません。「実行に1分以上かかる場合、止まらない」。

停止の問題から始めて、他の問題を減らすと、最終的には、プログラムに関するほとんどすべての質問を減らすことができます。ライスの定理になります。

Sをチューリングマシンが受け入れる1の非自明なプロパティとします。つまり、プロパティSの入力を受け入れるチューリングマシンと受け入れないチューリングマシンが少なくとも1つ存在します。

次に、与えられたチューリングマシンTがプロパティSの入力を受け入れるかどうかは決定できません。

チューリングマシンが偶数の整数を受け入れるかどうかを知りたいですか?決定できません。

チューリングマシンが算術シーケンスを受け入れるかどうかを知りたいですか?決定できません。

一般的に、Turing Machineの内臓について考えることができます。特定のチューリングマシンについて推論し、それが何らかのシーケンスなどを停止/受け入れるかどうかを証明できます。しかし、次のチューリングマシンでそのテクニックが機能するかどうかはわかりません。


1それproperty ofは、それがどのように受け入れられるかというメカニズムを含まない- 受け入れられるものだけ。「100以下のステップで受け入れる」は、受け入れる方法ではなく、受け入れる方法のプロパティです。


「プロパティ」とは何かを説明したいと思うかもしれません。なぜなら、人が行うかもしれない素朴な解釈はおそらく間違っているからです。
リックデッカー

@rick脚注が今それをカバーしていると思いますか?
ヤック

7

一般的に紹介され、述べられている停止の問題は単なる落とし穴であるというのは正しいことです。実際には常に「halts」または「loops」を返し、「don」のみを返す3値(「halts」、「loops」、「do n't know」)の停止関数が存在できないことを証明しませんたとえば、特別に構築されたコーナーケースについては「知っています」。

停止の問題が重大である2つの理由:

1)これは、最初に証明不可能な問題の1つです。仮に「わからない」が1つだけだったとしても、それは数学的に非常に興味深いものです。

2)いくつかの問題は、悪意のある攻撃者が分析対象のケースを提供できる停止問題に帰着します。これにより、拒否しなければならない有効なケースが存在する可能性があることを受け入れざるを得ません。

2番目のポイントへの後付けとして、ソフトウェア分析は難しい問題ですが、分析を容易にするために分析と言語設計の両方で多くの進歩がなされました。特定のタスクがソフトウェア分析に似ていることを示すことができれば、はい、大文字のHでハードです。この観察の略記。


5

ホールティング問題の解決不可能性は一般的に誤解されていると主張する一連の論文の中で、エリック・ヘナーによる逆説的な議論があります。論文、「エピメニデス、ゲーデル、チューリング:永遠の黄金のもつれ」、「停止問題の問題」、「停止問題の再構築」、および「停止問題」がここにあります。この答えが「リンクのみ」ではないように、私は彼の結論の1つを要約しようとしますが、議論は要約しません。

結論は次のとおりです。停止する問題が解決できない理由は、それを解決することを意図したプログラムが矛盾を作成するために使用できるためではなく、むしろ問題自体が実装できないためです。同時に1と2の両方を返さなければならない場合は実装できません。仕様を満たすプログラムがないことは注目に値しませんf0=1f0=2hhMMHhh


3
従わない 停止関数は、完全に明確に定義された有効な述語です。特定のチューリングマシンおよび入力に対して、マシンは停止またはループします。(適切な参照が不足しています。どの用紙を要約しますか?)
ラファエル

@Raphael関数が明確に定義されていることは、事実として一般に受け入れられています。ヘーナーの視点は異なり、彼の論文で説明されています。回答を編集して、論文の名前を提供します。
セオドアノーベル

':彼らは論争の少なくとも彼らの最初の読み取り/近似で判明[私は論文を読んでいない]ちょうどHehnerの引数はどんなことを言ってみましょうcs.toronto.edu/~hehner/Shallitaffair.pdfrecursed.blogspot.com/ 2013/10 / eric-hehner-replies.html
フィズ

そして、Hehnerの論文(これに関する)が(これに関する彼の作品の)追加の読みが面倒に値することを持っているという引用の性質と数を考えると、明確ではありません。
フィズ

彼の証拠は非常に堅実であり、次の自己参照ステートメントをその真実性について分析しようとするような哲学でできる愚かなことの再ハッシュであると指摘しています。もし真ならそれが偽であることを意味し、それは実際に真であったことを意味します。en.wikipedia.org/wiki/Liar_paradox停止するパラドックスは、科学者が哲学者と話をしていない場合があります。
ジェームズウェイクフィールド

3

私は、機械ではなく人が関わる停止問題の重要性について、別の説明をしたいと思います。

これは、MIT 1986構造および解釈コースの最後の講義です。教授は「何か質問はありますか?」と尋ねます。学生の一人が「これが最後の質問ですか?」と尋ねると、講義を終了する準備をします。

少し考えてみてください。教師はこれにどのように答えることができますか?生徒が教師と矛盾することを決定した場合、教師が与えることのできる有効な答えはありません-これは停止する問題のようなものです。

私たちは、機能とマシンを使用して、停止問題を抽象的に考えるのに慣れていますが、それよりもはるかに深いです。基本的に、答えられない完全に有効な質問があることを意味します。

PS:私が話しているコースがわからない場合は、見に行きましょう、すごいです。


しかし、私が実行するdoesHalt(programCode, input);と、プログラムはdoesHalt関数が返すものを知ることができません。doesHalt関数が評価した後、プログラムが停止を解除することは不可能です。
Tvde1

0

入力nが与えられ、p + 2も素数になるような最小の素数p> nを出力するプログラム、またはそのようなpが存在しない場合は永遠に実行するプログラムを簡単に書くことができます。プログラムをすべての入力で停止するかどうかを予測するために問題を解決できる場合は、Twin Prime Conjectureを解決しただけです。

この推測が決定不能であると証明される可能性は十分にあります。その場合、停止プログラムが失敗する単純なプログラムがあります。


「チューリング不可」と非常に異なる概念を混ぜていると思います。実際、偶然「同じ古い」誤fallにつまずいたかもしれません。こちらこちらご覧ください
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.