是否有永不停止且没有终止证明的程序?


23

就像计算机科学中的黑洞一样。我们只能知道它们的存在,但是当我们拥有它们之一时,我们永远不会知道它是其中之一。


1
确定停止问题至少与证明定理一样困难(给定定理您可以简单地编写一个类似的程序,当且仅当该定理为真时,程序才会终止)。如果没有这样的程序,那就意味着您可以证明所有定理,而众所周知,这是错误的。Tif T is true then halt else loop forever
Bakuriu 2014年

@Bakuriu:你会怎么写if T is true
ruakh 2014年

@ruakh:传统方法是For each string S in the (countable) universe of possible strings: If S is a syntactically valid proof of T, halt.
Quuxplusone 2014年

@Quuxplusone:是的,但是这似乎不适合Bakuriu的构造。。。
ruakh 2014年

这很有趣,但是我不知道。您能详细说明一下吗?
Evorlor

Answers:


23

确实有这样的程序。为了证明这一点,我们假设相反的是,对于每一个不停止的机器,都有一个证明它不停止的证据。

这些证明是有限长度的字符串,因此对于某些整数,我们可以列举所有长度小于证明。小号ss

然后,我们可以使用它来解决暂停问题,如下所示:给定Turing Machine和输入,我们使用以下算法:XMx

s := 0
while (True)
    test if machine M halts on input x in s steps
    look at all proofs of length s and see if they prove M doesn't halt on input x
    set s := s + 1

如果在输入暂停,则它会在有限数量内暂停,因此我们的算法终止。X 小号Mxs

如果在输入上没有停止,那么根据我们的假设,存在一个证明长度,其中有一个证明不会停止的证明。因此,在这种情况下,我们的算法始终会终止。X 小号中号MxsM

因此,我们有一个算法来决定总是终止的停止问题。但是我们知道这是不存在的,因此我们始终存在不停止证据的假设必须是错误的。


2
我认为,godel不完全性定理的较弱形式也由此产生。基本上,有些事情是正确的,但无法证明。这是我最喜欢的思想实验之一。
2014年

您是否认为尝试证明P = NP或寻找奇数完美的数可能是这些程序之一?
OtakarMolnárLópez2014年

1
这不是很有意义,因为非终止程序既不是证明,也不是数字,而是提出了您的想法。有人说PvsNP无法证明
Jake

1
@杰克我相信图灵机的部分动机是对哥德尔定理背后思想的更清晰表达。
cpast 2014年

6

举一个更具体的例子,让我们假设我们用于证明的理论具有以下(相当合理的,IMO)特征:

  1. 这是一致的 ; 也就是说,它不能证明矛盾。
  2. 它的公理集可以递归枚举。
  3. 它的证明可以记为有限的位串。
  4. 给定字符串是否在其中编码格式正确且正确的证明的问题在算法上可在有限时间内确定。
  5. 它足以表达Gödel第二不完全性定理的证明,该定理说它不能证明自己的一致性。

基于这些假设,以下程序将永远不会停止,但无法证明(在我们使用的理论范围内)不会停止:

let k := 0;
repeat:
    let k := k + 1;
    let s := binary expansion of k, excluding leading 1 bit;
while s does not encode a proof of a contradiction;
halt.

这里的关键细节是上面的第一个假设,即我们用于证明的理论是一致的。显然,我们需要假设这一点,以使我们的证明有价值,但哥德尔的第二个不完全性定理说,对于任何合理表达和有效公理化的理论,我们实际上无法证明这一点(除非在其他某些理论中,否则我们将保持其一致性)需要假设等)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.