停机概率,又称蔡廷常数(Chaitin's constant)是将充分长的0-1随机串输入一台无前缀(prefix-free)通用图灵机后,该通用机最终停止运行的概率。在这里,无前缀性是为了排除下面的情况:虽然随机串前面已经是一个合法的程序,但图灵机不得不继续无限制地读后面的内容——因为这个程序本身可能只不过是另外一个功能迥异的程序的前缀而已。要求合法程序末尾必须有结束标志代码的编程语言都相当于这种图灵机,也有相应的停机概率。
停机概率的二进位表示有着十分有趣的性质,其中较为有名的是:
(1)它的前n位足以确定所有长度不大于n的程序是否停机。透过这点可以判断大量著名数学命题(如黎曼猜想)的正误,只要你能证明这些命题的正误等价于某些程序是否停机,甚至标准的数学无法证明的命题也不在话下,例如含选择公理策梅洛-弗兰克尔集合论(ZFC)的自洽性。
(2)该表示是无限不循环的,但只能计算出其中有限位数字。可知的位数N是固定的,不管用多少计算资源都无法求知更多的数位。特别地,用基于ZFC的数学无法求到足以判定ZFC的自洽性(参见1)的数位,否则违背第二不完备性定理。
(3)该表示是不可压缩的,其前n位数字无法用长度少于n-c的程序生成,其中c是一个与n无关的常数,对充分大的n完全可忽略。
第一个将该数的性质向公众介绍的,应该是马丁·加德纳为《科学美国人》撰写的专栏。这里,将记录这些性质“不那么出名的一面”。
1,用蔡廷常数判定某一程序是否停机的办法,是将所有长度不长于它的程序一并运行,直至已经停机的程序所贡献的比例达到与蔡廷常数的前n位数字相等为止。显然,之后不可能再有其他长度不大于n的程序停机,否则停机概率就会大到与已知数位不相符。因此,蔡廷常数的实际作用是为停机时间设置了一个上界,让不停机的程序总可以和运行时间很长的程序区分开来。
看到这里,读者应该感觉到这个时间恐怕会是非常漫长的——在待测程序不停机的情况下,必须等所有停机的程序停下来才能确认。而就算待测程序停机,也必须等待此事发生,不节约任何时间。由于长度不大于n的程序的数目随n指数增长,这个等待时间本身就是一个无比巨大的耗费,你或许会觉得:这还不如干脆就直接光运行待测程序,等一段可接受的时间后就放弃吧。
但你也可能会觉得:既然停机概率确实包含了无数程序是否停机的信息,也许可以找到花费时间更少,效率更高的办法将它们提取出来。很遗憾的是,不存在这种有效算法。
2,有无穷多台无前缀通用机,相应地就有无穷多个停机概率。能够知道多少位蔡廷常数取决于它属于哪台通用机,和我们所用的数学能被约化为什么样的公理系统。该公理系统在对应通用机上表达起来越容易,能透过它得知的位数就越少。
存在Solovay机这类极端的图灵机,在ZFC中能求得停机概率的位数为0.这意味着以现有的数学虽然可以定义这种数,但对计算它的进位表示完全无能为力。
3,不可压缩完全来自停机问题的不可解性。假如某种机器能够在一步内判断任意图灵机是否停机,则可以在上面用长度O(log n)的程序输出蔡廷常数的前n位表示——形如“提取前2^n个图灵机程序,逐个判断其是否停机,将相应的概率求和”的程序,该程序长度中唯一与n有关的地方是用约log n比特表示参数n。换言之,停机概率可以是可压缩的,取决于相对什么模型而定。
蔡廷常数的这种性质,称作算法随机性,是[0,1]区间上几乎所有实数都有的。因此决不能看做是一种独有的奇异性质。实际上,只要将定义中的“任意图灵机”替换为“任意有限状态机”,算法随机数就退化为大家所熟知的正规数。或者说,算法随机数是正规数中的正规数。
算法随机数一定具有性质(2),却不一定具有性质(1),也即是说蔡廷常数们相对于全体随机数而言也是特殊的。但是,只要加上“小于该算法随机数的全体有理数是算法可枚举的”这一条件就行,神奇的是:[0,1]区间上同时满足该条件和算法随机的实数一定是某台通用机的停机概率,反之亦然。于是,我们可以说:只要我们能生成满足这两种条件的随便一个数,就等于拿到了一把万能钥匙(虽然用起来代价昂贵)。这种随机性并不神秘。
网友评论