我正在寻找图灵机暂停问题的简单解释。我知道TM的工作原理,它们如何枚举,机器配置等,但我不能很好地处理暂停问题。
有人可以提供这个主题的好解释吗?
答案 0 :(得分:5)
有一分钟,让我们忽略图灵机的世界,只考虑计算机程序。这将使我们的推理不那么严谨,但可能更容易理解。
考虑以下任务:编写一个程序,给定程序P和该程序的输入,确定程序在给定输入时是否终止。 (为简单起见,我们假设程序不要求用户输入并且不涉及随机性,因此在同一输入上运行相同的程序总是做同样的事情)。是否可以编写符合此描述的程序?答案是不。为了表明这一点,我们将使用矛盾证明。我们假设有人设法编写程序,然后表明如果出现这种情况会发生可怕的事情。
想象一下有人写了一个看起来像这样的函数:
function willHalt(program, input)
此功能具有以下属性:
此时我们可以开始对编写此功能的人持怀疑态度。
他们:“嘿!我刚写了一个程序,可以接受任何程序和输入,它会告诉你程序是否停止输入!”
我们:“哦,真的吗?它可以接受任何程序吗?任何程序都可以吗?”
他们:“是的!这就是我所说的。”我们:“那么,这个程序在这里怎么样?”
然后我们给他们这个程序:
function trickyTricky(input) {
/* Ask whether this program (named trickyTricky) is going to halt
* on its input.
*/
if (willHalt(trickyTricky, input)) {
/* If so, loop infinitely! */
while (true) { }
} else {
/* If not, do nothing and stop running! */
}
}
让我们考虑一下这个程序的作用。
首先,假设当给定特定输入时,该程序最终在该输入上运行时终止。仔细追踪程序,看看会发生什么。首先,它询问willHalt
它是否会终止,答案是“是的,是的,它会。”这意味着if
语句的计算结果为true ...因此程序进入无限循环!哎呀 - 程序本来应该停止,而是无限循环!
其次,想象一下,当给定特定输入时,该程序进入无限循环。仔细追踪程序,看看会发生什么。首先,它询问willHalt
它是否会终止。答案是否定的,所以它不进入if
语句,而是立即完成运行。但这并不好 - 该程序应该无限循环,但它终止了!
所以现在我们遇到了问题。如果你真的真的可以编写一个函数来告诉你一个程序是否会停止某些输入,那么你可以使用该程序来构建一个与它应该做的相反的程序 - 这是不可能的!
暂停问题只是一种数学上严格的形式化上述想法的方式。我们谈论的是图灵机和TM编码,而不是谈论程序。但实际上,数学背后的核心思想就是上面所示的内容。
如果你感兴趣的是,对于我去年教过的一门课,我把a guide to self-reference and undecidability放在一起,这可能会让你对这种论证的运作方式有更多的了解。
答案 1 :(得分:1)
暂停问题要求我们确定一个输入的程序是否会停止(达到某个最终状态)。图灵证明,没有任何算法可以为任何给定的程序和输入确定这一点。
算法可能会花费任意长的时间处理程序及其输入,但对于所有程序和所有输入,算法永远无法准确地确定程序是否最终会停止。随着状态的每次变化,下一次可能是最后一次。
暂停问题是decision problem的早期例子。
因为没有能够准确回答'是的,它会停止'或'不会,它不会停止'停止问题的算法,它是不可判定的。