这个证据真的证明了停止不可判断吗?

时间:2012-12-10 02:30:54

标签: theory turing-machines

我想问几个关于以下证据的问题。证据最初来自教科书,然后是关于stackoverflow的问题。

How does this proof, that the halting problem‍​ is undecidable, work?

问题1:

下面的证明是否基本上使H成为其输入机器的模拟器?

换句话说,在说明H = M和以下来自证明的描述之间是否存在重要差异?

H([M,w]) = {accept if M accepts w}
         = {reject if M does not accept w.}

问题2:

我的以下评论如何正确或不正确?

我认为暂停问题是决定给定机器是否会停止而不管其输出(接受/拒绝)的问题。如果存在停顿问题的解决方案,则必须分析源代码,如编译器/反编译器/反汇编程序,而不是实际运行它。如果它需要运行它,显然它永远不会确定“否”答案。

注意到证据中的明显问题,整个证据似乎没有表明停止问题的不可判断性。

相反,证据似乎表明了这一点:     以下算法不会停止:

    boolean D()
    {
        return not D();
    }

以下是Sipser的Intro to Computation of Intro重新输入的证据。

阻碍问题难以理解

现在我们准备证明定理4.11,语言的不可判断性

ATM = {[M,w] | M是TM,M接受w}。

PROOF: 我们假设ATM是可判定的,并且会产生矛盾。假设H是ATM的决策者。在输入上,其中M是TM而w是字符串,如果M接受w,则H停止并接受。此外,如果M不接受w,则H停止并拒绝。换句话说,我们假设H是TM,其中

H([M,w]) = {accept if M accepts w}
         = {reject if M does not accept w.}

现在我们构建一个新的图灵机D,其中H作为子程序。这个新的TM调用H来确定当M的输入是它自己的描述时M做了什么。一旦D确定了这些信息,它就会相反。也就是说,如果M接受并接受,如果M不接受,则拒绝。以下是D。

的说明
D = "On input [M], where M is a TM:
1. Run H on input [M, [M]].
2. Output the opposite of what H outputs; that is, if H accepts, reject and if H rejects, accept."

不要对根据自己的描述运行机器的想法感到困惑!这类似于运行一个自身作为输入的程序,这在实践中偶尔会出现问题。例如,编译器是翻译其他程序的程序。 Pascal语言的编译器本身可以用Pascal编写,因此运行该程序本身就有意义。总之,

D([M]) = { accept if M does not accept [M]
       = { reject if M accepts [M]

当我们用自己的描述作为输入运行D时会发生什么>在这种情况下,我们得到:

D([D]) = {accept if D does not accept [D]
       = {reject if D accepts [D]

无论D做什么,都是相反的力量,这显然是一个矛盾。因此TM D和TM H都不存在。

1 个答案:

答案 0 :(得分:0)

  

换句话说,在说明H = M和以下来自证明的描述之间是否存在重要差异?

H机器被称为通用图灵机(UTM),能够模拟任何其他图灵机,包括它自己。

如果M是像H这样的通用图灵机,可以说H = M,否则这很奇怪。

  

我认为暂停问题是决定给定机器是否会停止而不管其输出(接受/拒绝)的问题。如果存在停顿问题的解决方案,则必须分析源代码,如编译器/反编译器/反汇编程序,而不是实际运行它。如果它需要运行它,显然它永远不会确定“否”答案。

这就是为什么证据基于矛盾而起作用并且很难理解。 基本上它首先假定存在这样一台机器,对任何给定的输入回答“是”或“否”。 [假设]

我们叫这台机器Q. 假设Q有效并且它是UTM,它可以模拟按照以下步骤工作的另一台机器S:

  1. S读取输入(程序及其输入)
  2. S重复刚刚阅读的输入
  3. S调用Q传递复制的输入
  4. S等待Q回答(基于我们的假设,它总是会)
  5. 现在让我们想象输入Q(S,S)。 Q将接收程序S,S的参数是S本身。此输入将使S无限期地调用Q并且永远不会停止。

    由于Q和S是合法程序,但有一种输入使Q永不停止,Q是一台不可能建立的机器,因此无法确定程序S是否停止。 因此,我们有证据表明暂停问题是不可判定的。

    Sipser解释得很好。现在再读一遍,看看你是否理解了这个想法:)

    现在,再次回答你的问题。图灵机是我们用来表示问题的最强大的机器。作为识别机器,它必须通过输入并运行算法以确定它是否有效。如果不运行算法,就不可能知道算法的输出。

    编译器只是语法和语义的翻译器。它无法预见人们将如何使用该程序以及输出将是什么。