web-dev-qa-db-ja.com

停止問題が決定不可能であるというこの証明はどのように機能しますか?

シプサによる計算理論の紹介で停止性問題の証明を検討しています。私の主な関心事は以下の証明についてです。

TM Mがいつループしているのかわからない場合(受け入れまたは拒否できないため、TMはすべての文字列でチューリング認識可能です)、決定者HはMがループ内にある可能性があるかどうかをどのように判断できますか? TMDが処理を行うときにも同じ問題が発生します。

the halting problem is undecideable

18
jfisk

これは「矛盾による証明」、reductio ad absurdumです。 (ラテン語のフレーズは、理論のクラスでは常に優れています...もちろん、意味がある限りです。)

このプログラム[〜#〜] h [〜#〜]は、あるマシンのプログラムを表す文字列と入力の2つの入力を持つ単なるプログラムです。証明の目的で、あなたは単純に仮定プログラムHが正しい:それは単に意志停止し、Mがwで受け入れる場合は受け入れる。あなたは考える必要はありませんどのようにそれはそれをするでしょう;実際、そのようなプログラムが存在しないことを証明しようとしています[〜#〜] h [〜#〜]存在することはできません、.。

[〜#〜]なぜなら[〜#〜]

そのようなプログラムが存在する場合、私たちはすぐに別のプログラムを構築することができますH 'それ[〜#〜] h [〜#〜]は決定できませんでした。しかし、仮定により、そのようなプログラムはありません:[〜#〜] h [〜#〜]すべてを決定できます。したがって、定義したとおりに定義されたプログラムはないと結論する必要があります[〜#〜] h [〜#〜]は不可能です。

ちなみに、reductio証明の方法は、特にコンピュータサイエンスで使用される頻度を考えると、予想以上に物議を醸しています。少し変だと思っても恥ずかしくないはずです。魔法の用語は「非構成的」であり、本当に野心的だと感じたら、教授の1人にエレットビショップの非構成的数学に対する批判について尋ねてください。

19
Charlie Martin

これを読んで証明を視覚化しようとした後、私はこのコードを思いつきました。これは、関連する質問に対する この回答 のコードの簡略版です。

_function halts(func) {
  // Insert code here that returns "true" if "func" halts and "false" otherwise.
}

function deceiver() {
  if(halts(deceiver))
    while(true) { }
}
_

halts(deceiver)trueを返す場合、deceiverは永久に実行され、falseを返す場合、deceiverは停止します。これは、定義と矛盾します。 haltsの。したがって、関数haltsは不可能です。

27
Juan