第四章)。我希望在此刻指出,图灵的论证比我迄今仿佛所暗示的更具
建设性而更少负面性。我们肯定还没有展示出一台特殊的图灵机,它在某种绝对的意义上不能决定其是否停止的问题。的确,如果我们仔细地考察该论证就会发现,我们步骤本身实际上已经隐含地告诉我们,对这利用图灵步骤建造的似乎“极端荒谬”的机器的答案!我们看看这是怎么来的。假定我们有某一个算法,它有时有效地告诉我们什么时候一台图灵机将不停止。正如在上面概述的,图灵步骤将明白地展现了一台图灵机计算,对这计算那个特殊算法不能决定其是否停止。
然而,在这样做的同时,它实际上使我们在这情况下看到了答案!我们展现的特殊的图灵机计算的确不会停止。为了仔细考查这怎么引起的,假定我们具有一个这样有时有效的算法。正如以前那样,我们用H来标志这个算法(图灵机),但是现在允许该算法有时不能告诉我们一台图灵机在实际上将不停止:
H(n m) =0 T (m) =1 T (m); 或□如果 □如果 停止。nnìí?这样,当 Tn(m)=□时H(n;m)=□是一种可能性。实际上存在许多这种算法H(n;m)。(例如,只要Tn(m)一停止,H(n;m)就能简单地产生1,尽管那个特殊的算法几乎没有什么实际的用处!)
除了不把所有的□用0来取代而留下一些以外,我们可以像上述那样仔细地顺着图灵的步骤。正如以前那样,对角线过程提供了对角线上的第n个元素1+Tn(n)×H(n;n)。(只要H(n;m)=□,我们就将得到一个□。注意□×□=□,1+□=□。)
这是一个完好的计算,所以它是由某一台,譬如讲第n台图灵机得到的,而且现在我们确实有1+Tn(n)×H(n;n)=Tk(n)。
我们看第k个对角元素,也就是n=k,就会得到1+Tk(k)×H(k;k)=Tk(k)。如果计算Tk(k)停止,我们就有了一个矛盾 (由于假定只要Tk(k)停止H(k;k)就为1,则方程导致不协调性:1+Tk(k)=Tk(k)。所以Tk(k)。不能停止,也就是Tk(k)=□。但是,算法不能“知道”这个。因为如果该算法给出H(k;k)=0,则我们应该又导致矛盾(我们得到了在符号上不成立的关系:1+0=□)。这样,如果我们能找到k,就将知道如何去建造击败我们知道其答案的算法的特别计算!我们怎么找到k呢?这是一项艰巨的工作。我们需要做的是仔细考察H(n;m)和Tn(m)的构造,然后仔细弄清1+Tn(n)×H(n;n)作为一台图灵机是如何动作的。我们发现这台图灵机的号码为k。要把这一切要弄透彻肯定是复杂的,但它是可以办得到的①。由于这种复杂性,若不是因为我们为了击败H而特地制造Tk(k)的这个事实, 我们对计算Tk(k)
毫无兴趣!重要的是,我们有了定义很好的步骤,不管我们的H是哪一个,该步骤都能找到合适的k,使得Tk(k)击败H,因此这样我们可以比该算法做得更好。如果我们认为自己仅仅比算法更好些,也许会给我们带来一些小安慰!事实上,该过程被定义得如此之好,以至于在给定的H下,我们可找到产生k的一个算法。这样,在我们过于得意之前必须意识到,由于这个算法事实上“知道”Tk(k)=□,所以它能改善9H,是不是?在上面提到一个算法时,用拟人化的术语“知道”是有助的。然而,该算法仅仅是跟随我们预先告诉它去跟随的法则,这难道不是我们在“知道”吗?或者我们自己,仅仅是在跟随我们的头脑的构造和我们的环境所预先编排我们去跟随的规则?这问题实在不只是简单的算法问题,而且是人们如何判断何为真何为伪的问题。这是我们必须重新讨论的中心问题。数学真理(以及其非算法性质)的问题将在