停止問題に対するチューリングのソリューションは、単に「設計上の失敗」ではないのですか?


7

チューリングのホールティング問題の解決策を、エンジニアとしてではなく論理学者として見るのに苦労しています。

ここに停止問題の私の理解があります:

してみましょうすべてチューリング機械の集合とします。 M

してみましょう内のすべてのチューリングマシンのすべての入力の集合とする。 iM

内のすべての要素ましょう内要素である。 Mi

ブール値およびを要素とし。 truefalsei

してみましょう戻っている関数であります: h(M,i)

  • true停止した 場合にのみM(i)
  • falseが停止しない 場合にのみM(i)

ましょう中チューリングマシンでもという。p(M)M

  • 呼び出しますh(M,M)
  • が返した場合にのみ停止しh(M,M)false
  • が返した場合にのみ停止しませんh(M,M)true

私たちが呼ぶとき、何が起こる渡すことで、、それ自体に?ppp(p)

私が問題とする部分は、が場合に停止しないように実装すること。私の直感は、このアプローチを次のように理解しています。p(M)h(M,M)true

機能するメソッドと、を壊すように設計されたメソッド与えられた場合、これらのメソッドを組み合わせてマシンを構築すると、そのマシンは壊されます。h()p()h()

矛盾による証明は形式論理で問題を解決するための有効なアプローチであると理解していますが、矛盾による証明のこの特定の適用には何らかの欠陥があるようです。

何が欠けていますか?


2
「この特定のアプリケーションに欠陥があるように思われる」理由を正確に明らかにできれば、この議論に役立ちます。回答に対するあなたのコメントは少し役立ちますが、私はまだあなたを困らせているものを正確には見ていません。
リック・デッカー

回答:


10

以下では、私は機械の区別ますの説明を示す、その記述からのことで。MMM

停止テスタープログラム仕様H

Hはペアを入力として受け取ります。ここで、はマシンの説明であり、は必要とする入力です。(M,i)MMiM

H任意の入力ペアで停止し、正しい答えを返します。(M,i)

H(M,i)は、が入力停止した場合にのみtrueを返しますMi

ここで、そのようなマシンがあると仮定すると、次のようにプログラムを構築するためのサブルーチンとしてを使用できます。HHP

「ひねくれた」プログラム仕様P

Pは、入力としてマシン説明取ります。MM

Pは、任意の入力で正しく機能します。M

P(M)は、入力指定されたときにが停止しない場合にのみ停止します。MM

この引数の鍵は、ということであるならば、我々はマシン定義可能な satiffies上記仕様は、ことその後、我々は機械構築できる満たす第2の仕様こと。HP

ただし、、与えられたとき、不可能な挙動を示し、PP

P(P)停止の場合に限りしない停止。P(P)

したがって、は少なくとも1つの入力で 2番目の要件満たすことができません。したがって、がその要件を満たすことができない場合は、そのためでなければなりません。そのため、指定されたを作成できません。PHH

これで、は多くの入力で指定されたとおりに正常に動作する可能性がありますが、重要な点は、すべての可能な入力で機能する停止テスターを構築できないことです。H(M,i)


4

以下は、論理学者が問題にどのように取り組むかです。

h(M,i)は、定義による停止問題の一般的なケースのソリューションです。

(1) h(M,i) すべてのに対して停止するかどうかを決定できる必要あります(つまり、制限のないセット)。 M MM

p(M)の要素である。 M

(2)以下のステートメントは同等です。

  • p(M)は、が返した場合にのみ停止しh(M,M)false
  • p(M)停止しない場合に限り、は停止しますp(M)

(3)さらに、以下のステートメントは同等です。

  • p(M)は、が返した場合にのみ停止しませんh(M,M)true
  • p(M)停止しない場合にのみ、停止p(M)

とはどちらも矛盾です。 (2)(3)

h(M,i) - 停止問題の一般的なケースの解決策 - は、停止するかどうかを適切に決定できず、と矛盾します。したがって、停止問題の一般的なケースのソリューションは存在しません。p(M)(1)


4

あなたは言う:

私が問題とする部分は、が場合に停止しないように実装すること。私の直感は、このアプローチを次のように理解しています。p(M)h(M,M)true

機能するメソッドと、を壊すように設計されたメソッド与えられた場合、これらのメソッドを組み合わせてマシンを構築すると、そのマシンは壊されます。h()p()h()

問題は、ということである壊れるように設計されていない、それが設計された使用 -と使用方法は有効で作品です!ただし、入力が場合は機能せず、すべての入力で機能しないことがわかります。p()h() h()p()

つまり、は存在せず、せいぜいが存在します。それは重要ではありません壊れている、重要なのはそれであるは存在しません。h()hminus()p()h()

誰かが、彼らが書かれていると言う場合は、彼らが作成の仕事をしたい場合は、彼らは間違ってたり横たわっていることを知っている、彼らはあなたのお金を浪費し、などされています。h()h()

決定できるものとできないもの、およびそれを行うために必要なリソースの境界を確立します。

誰かが質問した場合:この入力を与えられた停止するかどうかを判断できますか?これに対する考えられる答えは次のとおりです:(a)はい—そうです(b)はい—それはしません(c)はい-しかし現在私たちはそれがするかしないかを知りません、そして最後に(d)いいえ-何らかの方法で証明することは不可能です。 p()

答えが(c)か(d)かをすばやく判断できると、非常に役立ちます。Haltingは、特定の停止を証明できないとは言わないことを思い出してください。Haltingは、どの入力に対しても機能する一般的な解決策がないと言います。または入力のいずれかを制限すると、答えはかなり頻繁に「はい」になります。これは簡単なことです。p()p()


3

永久に実行するように設計された完全に正当なプログラムが多数あるため、「破損」という用語でそれを考える必要はありません。したがって、永久に実行することは必ずしも「破損」する動作ではありません。

p我々はすでに機能を持っていると仮定して、以下の単純なアルゴリズムであるh(X,Y)ことを返すtrueマシンであればX入力して停止Yし、収益をfalse、それがない場合。

function p(M)
    if (h(M,M)) then
        while (true) do
        endwhile;
    return;

永久に実行するように設計された完全に正当なプログラムはたくさんありますが、このプロジェクトには、以前と同様に要件が課せられています。つまり、それは停止問題を解決する必要があるということです。p()は、h()と組み合わせると、結果のマシンがプロジェクトの要件を満たさなくなるように設計されています。これは単なる設計上の欠陥ではありませんか?
StudentsTea

3
No. h()は「プロジェクト要件を満たす」ように設計されています(つまり、停止問題を決定します)。このプログラムが存在し、機能していることを前提としています。p()プログラマーの1人が昼休みにいじっていたときに書いたものです。「プロジェクトの要件を満たしていない」ということではなく、それが不可能なプログラムであるということです。停止しないと停止します。停止しても停止しません。h()存在し、機能するという仮定は不可能な状況をもたらしたので、それは存在h() しないと結論付けざるを得ません
David Richerby 2014

私たちは、p()は不可能なプログラムであると言っていますか、それとも、p()をh()と組み合わせて(全体として)、不可能なプログラムであると言っていますか?
StudentsTea

ウサギの穴が下がっているのが見えると思います。p()がpを評価するには、pに入力が必要です。なぜpですか?ただし、p()がpを評価するには、pがフィード入力でなければなりません。どうして...など。
StudentsTea

1
「永遠に実行するように設計された完全に正当なプログラムはたくさんあります」-あなたは考えているのか、それとも半決定的なのか、またはオペレーティングシステムのようなものですか?後者の場合、これはTMのフレームワークを超えているため、このような(初心者)などの初心者の質問から除外する必要があります。
ラファエル

3

ベリーのパラドックスをモデルにした、あなたがより好むかもしれない矛盾による別の証拠があります。チューリングマシンの、聞かせて数として解釈、空のテープで実行チューリングマシンの出力です。マシンが停止しない場合、は定義されていない可能性があります。ましょうせいぜい有するチューリングマシンによって製造することができない最小の数である状態(有限多くのこのようなチューリングマシンがあるので、そのような数が存在します)。停止の問題が解決できたとしましょう。次に、次のアルゴリズムを実装するTuringマシンを構築できます。TN(T)N(T)Xnn

  1. のバイナリエンコーディングをテープに書き込みます。n
  2. 最大で状態を持つすべてのチューリングマシンを調べ、停止するそれぞれについて、計算する数を計算します。n
  3. 手順2で表示されない最小の数値ます。Xn

後の2つの段階は、状態の固定チューリングマシンを使用して実装でき、最初の段階は追加の状態を使用して実装できます。合計すると、を計算する状態のチューリングマシンが得られます。が十分に大きい場合、ため、矛盾が一方で、は、状態を持つチューリングマシンを使用して計算できません。一方、上記のマシンは状態のみを使用してそれを計算します。Clog2nlog2n+CXnnlog2n+CnXnnlog2n+Cn

この証拠はランラズから聞いた。


0

停止問題のポイントは、特定のアルゴリズムが停止するかどうかをアルゴリズムで決定することが不可能であることです。もちろん、常に停止するアルゴリズムを指定できます(指定されたすべての入力に対して)。ただし、これを1つのアルゴリズムですべてのアルゴリズム(たとえば)に決定することはできないため、アルゴリズムは存在できません。ph

与えられたアルゴリズムに対して、が与えられます。場合はあなたに告げる停止し、その後、内側の と外側のではないでしょう falseを返します。 が停止しない場合、内側の は停止しませんが、外側の はfalseを返します。したがって、hはpが停止するかどうかを決定できません。p(p(A)))AhAppMpp


1
あなたの言い回しがあいまいです。「伝える」が「アルゴリズムで決定する」ことを意味し、数量詞が出現する順序を明確にする必要があります(「すべてのプログラムには...あるアルゴリズムが存在する」と「すべてのプログラムには...あるアルゴリズムがある」 ")。
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.