萌萌的忙忙的小河狸

萌萌的忙忙的小河狸

题图出处:都怪冬天太长:加拿大“国宝”河狸被卡在栏杆

为什么河狸这么萌

我们不知道为什么河狸这么萌,但是我们更加不知道为什么河狸这么……忙。它太忙了,所以它可能是世界上最忙、最Busiest的……的什么来着?图灵机。函数。Whatever。

Busy Beaver Function,记作BB(n),是这样子的一个Function。给定输入n,它输出的值是具有n个状态的图灵机,在停机之前所能够在纸带上写下的“1”的最大的个数,并且这些1之间没有任何空隙。还有另外一种定义则直接定义它输出的值代表n个状态的图灵机停机之前所走出的最大步数。我们先采用采用后者吧。

只有一个状态的图灵机,只会在1步以后停机——或者不停机;于是我们说,BB(1) = 1。两个状态的图灵机呢?6。(感谢 @刘天任 指正)BB(3) = 21。BB(4) = 107。但是BB(5) >= 47176870……

累瘫了的小河狸

具有n个状态的、满足BB(n)的计算条件的图灵机被我在这里叫做河狸机。这只河狸忙到什么程度呢……你可以利用它去判断停机问题。因为它是所有的图灵机伙伴里面最忙的小河狸,所以不可能有什么图灵机比它还要忙。所以,在一只图灵机旁边放一只有相同状态个数的小河狸机。在小河狸累瘫(停机)以后,如果旁边的图灵机还没有停机的话,那么就表明那只图灵机一定不会停机——因为我们已经知道了n个状态的图灵机如果能够停机的话,那么它最多会走多少步。

再从头到尾看一次。如果我们能够计算BB函数,那么我们就能够判断停机问题。反过来说,计算小河狸的函数是,

不存在的。

火星人和小河狸

为什么我们要讨论火星人这种东西……

好吧,我想要说的是这样子的一个问题。我们有这样子的一个函数Mars,如果它知道火星上有火星人的话,那么它就会输出1;但是如果它知道火星上没有火星人的话,那么它就会输出0。问这个问题是不是可以计算的?答案是……可以,但是我们压根就不需要知道火星上有没有火星人。我们知道这个函数Mars只会输出0和1中的其中一个,所以它的语言是有限的,有限的语言都是可计算的。或者说,一个函数输出的所有可能是有限的,那么它就一定是可计算的(枚举所有的答案即可);但是一个函数的输出的所有可能如果是一个无限的集合,那么它未必可计算。

以及,Mars(x) or NOT(Mars(x))的值一定是1。如果存在一个判断停机问题的函数HALT的话,HALT(x, a) or NOT(HALT(x, a))的值也一定是1。(为什么我要写成HALT(x, a)而不是HALT(x)?)

那么下面这个呢?

M_{ar-ver} = \frac{1}{BB(1)} + \frac{1}{BB(2)} + \frac{1}{BB(3)}...

为了让“可计算”在这里的定义更明确一点,也因为S是一个实数的缘故。是否存在一个算法,对于输入k,输出一个有理数M',使得|M - M'| <= 1/k?

忙忙的小河狸

在给出这个答案之前,我们先留意一下另外一只小河狸:啃纸带的小河狸。它想要在纸带上留下最多的、连续的1,把纸带给啃得干干净净。这只小河狸太忙了,以至于我们可能还是会惊讶于为什么BB(5)看起来这么大……以及对于更大的n,总觉的那都是那堆数学家无聊蛋疼的产物。。。小河狸是如此地忙,以至于它比任何图灵机都要忙……比任何可计算的函数都要忙……因此不可计算

好吧,为什么这样子说?虽然知道了它不可计算,但是为什么它比任何可计算的函数都要忙?

好,那么我们有一个任意的可计算函数f。注意是任意的可计算函数f 哦。现在我们要构造另外一个可计算函数:

g(x) = \sum_{i=1}^{x}[f(i) + i^2]

这个函数显然可计算。

从g(x)的定义,我们立刻有:

  • g(x) >= f(x);
  • g(x) >= x^2;
  • g(x+1) >= g(x)。

假设有一台计算函数g的图灵机G,它具有q个状态,并且会让一个写了x+1那么多个1的纸带,变成g(x)+1那么多的纸带。从这个图灵机,我们要构造另外一个图灵机——

T = P^{x+1}.G.G

虽然说定义看起来很奇怪,但是那只是因为我们不知道P^x+1是什么。P^x+1是一个打印机,它可以没有小河狸那么忙,但是它一定要啃够x+1那么多的1(在纸带上留下这么多的一串1,然后停机)。所以上面的T的意思是,

  • 先用打印机在纸带上留下x+1那么多的1;
  • 然后用一次G,将x+1那么多的1改成g(x)+1那么多的1;
  • 然后再用一次G,将g(x)+1那么多的1改成最后的g(g(x))+1那么多……的1。

哇,真是多死了。

一个打印机打印x+2个1的话,可以被一个具有x个状态的图灵机构造出来。(为什么?)所以,T的内部状态个数是x+q+q(为什么?)。所以,

BB(x + 2q) \ge g(g(x)) + 1

因为我们构造出来的这个T在纸带上啃了那么多1,所以小河狸一定要比它……不对,至少要比它忙。

但是这有什么问题呢?

  • g(x) > x + 2q,因为g(x) >= x^2。
  • g(x + 2q) >= f(x + 2q),因为g(x) >= f(x)。
  • BB(x + 2q) > g(x + 2q),因为BB(x + 2q) >= g(g(x)) + 1(再具体点?)。

或者说,BB(x + 2q) > f(x + 2q)……或者说BB(x) > f(x)。

所以小河狸比任何图灵机都忙。你们有没有在现实中看到过这么忙的一个小河狸?

不忙,但是依然萌

虽然说小河狸是因为忙所以萌,但是卖萌并不需要忙。

花栗鼠(Chipmuck)机是这样子的一只函数:CM(n) = “n个状态的图灵机中可以构成打印机的图灵机数目”,那么虽然说这个函数并不忙,但是依然不可计算。

令BD(n, m)表示“n个状态的、m步内停机的图灵机中可以构成打印机的图灵机数目”(Busy Down),又令

S_{uper}BB(n) = min_n(CM(n) - BD(n, m) = 0) ,或者说,让CM(n) - BD(n, m) = 0的最小的n。首先,BD显然是可计算的(为什么?);所以如果CM也是可计算的,则SBB也是可计算的。但是SBB不可计算,因为SBB(n) >= BB(n)……等等,这个SBB的定义就是那一只“n个状态内最大的行动步数”的小河狸!真是萌死啦。

萌性我们证完了,但是花栗鼠并不忙。因为一个具有n个状态的图灵机的数目是有限的,具体地,它的数目是 (6n)^{2n} 。所以我们永远地有, CM(n) \le (6n)^{2n}

虽然花栗鼠懒是懒了点,但是它也一样萌。

Super (Super Busy Mars (Marvelous)) Beaver

如果我们已经计算出了BB(1), BB(2), ……BB(n-1),并且之前提到的M是可计算的,那么下面的这个一定是可计算的:

M_n = \frac{1}{BB(n)} + \frac{1}{BB(n+1)} + ...

因为每一个BB(n)都比BB(n-1)要大,易知M_n是收敛的,也就是说,有界(什么?没学过高数?)。于是我们就也可以计算出1/(M_n)的上界。但是M_n的第一项就是1/BB(n),并且后面每一项都比前面的一项要小很多,所以如果我们能计算出1/(M_n)的上界,我们就可以计算出1/BB(n)和BB(n)的界……意味着能计算BB(n)。

但是小河狸是不可计算的。

所以BB(n)是不可计算的,所以BB(n-1)是不可计算的,所以……所以我们的前提即便成立,即便我们知道BB(1) = 1,我们也知道,M_n是不可计算的,也知道……M是不可计算的。

所以M也和小河狸一样萌。

于是我们发现了一个很萌的有理数,很多有理数都没有这么萌。

你有见过这么萌的有理数吗?


参考:

(习题)Scott Aaronson. 《Quantum Computing Since Democritus》

(习题)Michael Sipser. 《计算理论导引》

张鸣华. 《可计算性理论》


--------

注:Beaver是Beaver,但是Chipmuck只在这里是Chipmuck。

最后的最后,有人知道为什么我会说g(x)显然可计算嘛?

文章被以下专栏收录