证明图灵机是否接受字符串是不可判定的

时间:2013-02-10 01:32:38

标签: turing-machines

我见过

的证明
ATM = {〈M,w〉 | M is a TM and M accepts w} is undecidable.

最初我们建造了另一台图灵机

输入H

<M,w>如果M accept w otherwise reject则接受 然后我们制作另一台图灵机

D which on input <M>
1.run H on <M,<M>>
2.output the opposite of what H outputs. 

That is if H accepts reject and if H reject accept

我不明白作为输入的图灵机如何获得自己的描述然后拒绝它!你能解释一下吗?

2 个答案:

答案 0 :(得分:1)

机器的输入没有特殊状态,也没有任何要求。机器可以自由拒绝。 :)

因为我不想构建图灵机,这是Java中一个过于简单的例子(它足够接近图灵完整性,它可以说明):

class SelfReject {
    public boolean equals(Object other) {
        ...
    }

    public boolean accepts(Object input) {
        return (!this.equals(input));
    }
}

此类型的对象将接受任何输入对象等于自身。

答案 1 :(得分:1)

我不确定你被困在哪里,所以我会或多或少地尝试重申你的问题,希望填补任何空白。

我们的想法是,我们想要证明ATM是不可判定的,即没有TM H,当给予任何另一个TM M和任何其他输入w作为输入时,TM可以决定TM M是否会接受输入w。

为了证明这样的TM H不存在,我们假设这样的机器H存在。 至少有足够的幻想似乎并不是一个太不合理的猜测。

下一个想法是通过推断这种TM H的存在会导致我们的论证成为矛盾的后果。因此证明我们最初假设这样的TM H可能存在必定是错误的。这意味着在我们的上述规范之后不存在任何TM H.

所以现在谈到棘手的部分:正如我们假设存在一个TM H,当给予任何TM M和任何输入w作为输入时,可以决定M将接受w没有人可以禁止我们只是喂一个机器M本身的描述也输入到M本身。 我们甚至假设我们可能会使用任何输入。

如上所述,将任何机器作为输入馈入另一台机器的想法似乎并不容易实现,我们宁愿尝试在第一张TM磁带上编码第二台TM的描述。

乍一看似乎无法确定是否真的可以对磁带上的任何TM进行编码,但事实上它是可能的。实现这一目标的可能方案之一是以数学家KurtGödel命名的Gödelisierung名称。

编码本身也经常被称为Gödelnumber。

鉴于我们的TM H,当给出对任何TM M和任何输入w的描述作为输入时,决定了M将接受w,使用我们上面已经提到的自由,我们将简单地使用TM M的描述作为其自身的输入。 / p>

因此构建TM H',当给出TM M作为输入的任何描述时,将决定TM M在其自己的描述上作为输入是否接受。

正如您希望从我们的假设开始看到上面指定的TM H我们没有做过任何“禁止”的行动,如果我们使用新构建的TM H'构建TM D,我们肯定不会这样做当给出任何TM M作为输入时,只返回与我们的机器H'相反的输出。

当给出任何TM M的描述作为输入时,该新TM D将接受&gt;如果M不接受其自己的描述作为输入并拒绝&gt;如果TM M接受自己的描述作为输入。

正如你所看到的,我们仍然可以自由地将任何(描述一个)TM M作为输入提供给D,所以很高兴再次使用我们的自由,没有人能够禁止使用TM D本身的描述作为输入。

根据我们的构造,D在任何TM M上作为输入,因此它必须能够自行工作。

但确切地说,这就是扭曲。事实上,为了确定我们在自己的描述中输入D作为输入的结果,我们只需要有可能:D将接受或拒绝。

现在让我们检查两种情况:

如果D接受它自己的描述作为我们构造的输入,这将意味着D必须拒绝,反之亦然。请记住,TM H'接受任何TM接受它自己的描述作为输入,我们只是将它倒置在我们的构造中。

因此引导我们得出一个奇怪的事实,当D并且只有接受它时,D才必须拒绝它自己的描述作为输入。

由于这显然不可能,你必须找到我们在构造中所犯错误的根源。按照我们再次组成的整个路径,这导致我们初步推断,如果M接受w,则TM H能够决定任何TM M和任何输入w,这是由我们假设ATM是可判定的暗示。