“停止问题”的矛盾证明

时间:2016-12-06 18:43:58

标签: computation-theory halting-problem

我最近遇到了停止问题的矛盾证据。 在证明中,我们必须向图灵机提供程序的副本和输入的副本,以确定该程序是否在输入上停止。在矛盾中,为什么它必须是程序作为程序和输入?对不起,如果这听起来很混乱。我可以简单地用一个程序和一个随机输入来给机器喂食并得出相同的结论。

谁能告诉我为什么?我有没有想到的具体原因?

1 个答案:

答案 0 :(得分:0)

首先让我回到证明本身。

HALT_TM不可判断

假设任何机器都有一个采用字符串形式的描述。设HALT_TM = {<M, w>| M is a TM and M halts on input w}A_TM = {<M,w>| M is a TM and accepts w}。在这里,我假设我们知道A_TM是不可判定的(证明可以通过对角化来实现,并且认识到因为有比图灵机更多的语言,并且由于给定的TM只决定一种语言,因此某些语言不会被确定)。

通过矛盾假设HALT_TM是可判定的,这意味着我们为这种语言处理了一个决策者D。然后我们就可以构建一个决定M的机器A_TM。在输入<M', w>上,M执行以下操作:

  • 在输入D
  • 上运行<M',w>
  • 如果D拒绝,请拒绝,否则在M'上运行w(直到停止,我们知道因为D没有拒绝!)
  • 如果M'接受,则接受,如果拒绝,则拒绝。

我们看到与我们的假设相矛盾

通用图灵机

现在问题的核心:您实际上提供了M任何有效的机器描述M',而不一定是<M>本身。请记住,TM和“程序”实际上是等价的:有关更多详细信息,请参阅此answer。引用同样的答案:“图灵机是算法的正式模拟”。 图灵机的一个强大之处在于它们可以编码为字符串,允许另一个图灵机(称为“Universal Turing Machine”)执行它们。因为给定的计算机是一种算法,所以您可以看到实际上正在为您的“顶级”TM程序提供一个程序,以及您选择的输入。