暂停计划解释

时间:2015-04-19 09:14:56

标签: algorithm computation-theory halting-problem

我试图理解为什么写一个程序H是不可能的,它可以检查特定输入上的另一个程序P是否会停止(暂停问题),但我无法清楚地了解它。

虽然直觉说如果这个程序H试图运行一个不会停止的程序P,那么H本身就会进入一个循环。但我不认为这是证明背后的想法。

有人可以用简单的外行术语解释证据吗?

2 个答案:

答案 0 :(得分:4)

证明背后的想法是矛盾的。

假设有一个停机问题机器M解决了停机问题,如果某个输入程序没有完成则会产生0,如果它会完成1M保证完成。

创建新计算机H
H使用M(本身)的输入运行H,如果M回答1,则进入无限循环,否则 - 停止。

现在,如果您在输入M上运行H会怎样?
如果答案是1 - 而不是错误,那么H会运行M,并且会进入无限循环。
如果答案是0 - 那也是错误的,因为H会停止。

因此,它与M正确的假设相矛盾 - 因此没有M


直观 - 就像说没有神谕这样的东西,因为如果"你"告诉我你是一个神谕,我问你 - 我要举起哪条胳膊?
然后,我会等你的回答 - 而反之亦然 - 这与甲骨文确实是神谕的说法相矛盾。

答案 1 :(得分:2)

图灵对此使用了proof by contradiction(又称为荒谬减少):

我们的想法是假设 实际上是这样一台机器H给出任何程序p而输入i会告诉我们天气{{1}停止。

鉴于此p,我们可以修改它并创建一台新机器 我们会在H的输出后添加另一部分,这样如果H输出是,我们的机器将无限循环,
如果H输出否,我们的新机器将停止运行 我们会拨打新计算机H

现在,当我们向自己提供H+时(例如,程序H+和输入p),就会发生悖论。

那是因为如果i 停止了,我们会得到一个肯定答案(来自H+部分),但是永远循环< / em>的。
但是,如果H 没有停止,我们会得到一个无答案(来自H+部分),但是停止


这在computerphile episode中非常清楚地解释了。