这个证明,停止问题是不可判定的,如何工作?

jfi*_*isk 18 halting-problem

我正在通过Sipser 对计算理论介绍中的停止问题进行证明,我主要关注的是下面的证据:

如果TM M不知道它何时循环(它不能接受或拒绝这就是为什么TM对所有字符串都是图灵可识别的),那么决策者H怎么能决定M是否可能在循环中?当TM D进行处理时,同样的问题将继续存在.

停止问题是不可判定的

Jua*_*uan 27

在阅读本文并尝试可视化证明之后,我想出了这段代码,这是对相关问题的答案中的代码的简化版本:

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

function deceiver() {
  if(halts(deceiver))
    while(true) { }
}
Run Code Online (Sandbox Code Playgroud)

如果halts(deceiver)返回true,deceiver将永远运行,如果它返回false,deceiver将停止,这与定义相矛盾halts.因此,这个功能halts是不可能的.

  • +1非常优雅,据我所知(作为程序员而不是计算机科学家),它正确说明了为什么停止问题是不可判定的,即使对于没有输入的程序也是如此. (7认同)
  • @FrankScience实际上,递归定理保证了具有这些语义的函数的存在. (2认同)

Cha*_*tin 19

这是一个"矛盾的证据",这是一种荒谬减少.(拉丁短语在理论课上总是很好......当然,只要它们有意义.)

该程序H只是一个带有两个输入的程序:表示某个机器的程序的字符串和输入.对于证据的目的,您只需承担程序H是正确的:它只是停止接受如果M与接受w ^.你不需要考虑它会如何做到这一点; 事实上,我们即将证明它不能,没有这样的程序H可以存在,......

因为

如果这样的程序存在,我们可以立即建立另一个程序H"^ h不能决定.但是,根据这个假设,没有这样的程序:H可以决定一切.因此,我们不得不得出结论,没有定义为我们定义H的程序是可能的.

顺便说一下,减少验证方法比你想象的更具争议性,考虑它的使用频率,特别是在计算机科学中.发现它有点奇怪,你不应该感到尴尬.这个神奇的术语是"非建设性的",如果你真的有野心,请向你的一位教授询问Errett Bishop对非建设性数学的批评.

  • @Jefromi,我说"比你想象的更有争议." 现在,我是各种各样的逻辑学家,对基础知识感兴趣,所以我比一些人更关注它,但重点是,如果_reductio_证明是非常合法的,实际上并不是不合理的.对于初学者来说,他们确实有点圆润. (3认同)
  • 我对你的断言感到有点困惑,即反证法是有争议的。它们在数学中很常见,而且逻辑上完全合理。这并不是真正的讨论论坛,但您的编写方式似乎很危险:它可能会导致没有经验的读者得出结论:通过矛盾证明的结果可能有问题。从快速阅读来看,听起来“争议”是关于反证证明是否优雅且有利于教学,而且毕肖普也可能批评其他事情。 (2认同)
  • @Jefromi不,争论不是关于教学,而是关于数学的基础.如果你很好奇,那么开始的地方将是[直觉主义](http://en.wikipedia.org/wiki/Intuitionism),尽管WP的文章很难说明.我说争议有点过时了; 无论如何,所有这些逻辑都可用于构建彼此.在某种意义上,直觉逻辑作为一种模拟计算机辅助证明的实用工具而卷土重来. (2认同)