- 图灵机有两个主要参数,符号和状态。
- 判断数学命题的真伪问题可以转化成判断图灵机是否停机问题,但是不存在一个通用算法去判断图灵机是否会停机。
- 图灵也用图灵机证明了希尔伯特的“可判定问题中”提出那种算法是不存在的。
证明了“万物皆图灵机”之后就好办了,希尔伯特的“可判定性问题”就变为, 是否存在一个算法,在有限步骤内,去判断任何一个图灵机在给定输入的情况下,运行后是否能停机。图灵证明了,这样的算法是不存在的。证明方法是大家熟悉的罗素悖论模式:
假设有这种通用判别算法,叫它算法P。那么定义一种这样的图灵机,称为U,这个图灵机接受另一个图灵机T和某个输入作为它自身的输入。U的运行模式是: 调用P,把U接收到的图灵机T和输入传递给P。如果P判断T不会停机,则U停机。如果P判断T能停机,则U进入死循环。 现在问题来了, 既然U也是一台图灵机,则把U本身传递给U作为参数会如何?你自己稍微推想下,就会发现这里面的矛盾,U停与不停都不行,所以就不能有这样的算法P。以上这个问题就被称为“图灵机停机问题”。 总之,图灵用图灵机作为工具,证明了希尔伯特所希望的通用命题真伪判断算法是不存在的。但要注意一点的是,虽然一般的图灵机的停机问题是不可判定的,但不表示所有的图灵机的停机是不可判定。 现在已经证明,对四个状态以内的图灵机,都是可判定的。四个状态时的情况还不知道。从5状态开始,猜想都是不可判定的了。再比如,如果你将一个已经证明的数学命题正确编码成图灵机,则不管这个图灵机有多少状态,那么它必然可以停机。
数学里,用了七个属性描述图灵机,就是这七个属性,唯一决定了一台图灵机。七个属性看上去有点多,但最主要其实是两个属性:
第一个属性叫:符号(Symbol)集合,即这台图灵机可以在纸带上读取和写入的符号种类,必须是有限的。所有的符号种类数量称为这台图灵机的“符号数”,或者“颜色数”,简称“色数”。这里,符号具体的样子是无所谓的,我们只关心有多少种符号。其中我们还默认有一种称为“空白”的符号,就是纸带上是空的,这种“空白”也算一种符号,也计算在符号集合里。所以,一般符号集合至少有2个元素,其中一个是空白符。
第二个属性叫:状态(State)集合,即这台图灵机内部可以处于哪种状态,也必须是有限的。所有的状态种类数量称为这台图灵机的“状态数”。同样,这里,具体状态表示什么含义是无所谓的,我们只关心有多少种状态,最少是1种状态都行。同样,我们还默认有一种称为“停机”的状态,就是图灵机运算结束,机器停下来的状态。但这种状态一般不计算在状态集合里。
以上就是图灵机最主要的两种属性,其他五种属性是这样的:
第一个就是前面提到的空白符。这个空白符存在是有必要性的,它其实是可以帮我们区分纸带上每一部分信息的边界在哪里。如果只有一个符号是传递不了信息的。就有人说一个符号也可以传递信息,可以用这个符号的数量来表示不同信息。但此时你会发现,必须用空白符。否则你给我发了100个“A”,我怎么知道这些“A”该怎么断开?所以空白符是一个必要符号。
第二个属性是初始输入,即图灵机运行前,纸带上的符号状态。
第三个属性是初始状态,即图灵机运行前,内部所处于的某个状态。任何时刻,图灵机只能处于一个状态。
第四个属性是:“接受状态”,或者叫“终止状态”。也即是图灵机进入这种状态后停机。很多情况下,这个接受状态只有一种,就是之前提到过的停机状态。
第五个属性是:转移函数集合。转移函数很像是计算机的程序,它决定了图灵机的变化过程。图灵机在任何时刻,它所处于的情形是由两个属性确定的:当前读取头下小方格内的符号和内部状态。转移函数因为是函数,它有输入参数和输出参数。它的输入参数就取这两个属性的值,它的输出参数有三个:
- 对当前格子输出什么符号;
- 内部状态变为什么;
- 以及读取头向左还是向右移动,或者不动。
所有转移函数的集合就决定了一个图灵机从启动到停机的过程,如果它会停机的话。当然,有些图灵机是不会停机的,比如它进入某几个状态的循环或者读取头永远向右移动等等。
- Busy Beaver是那种2色-n状态的图灵机中,在停机前可以运行最久的图灵机。BB(n)函数就是停机前它运行的步数.
- BB(n)是不可计算数,也是一个快速增长序列。
- 理论上,已经有电脑程序可以在有限步骤内验证哥德巴赫猜想和黎曼猜想的正确性。只是步数之多,大到类无法想象的长。
- 有一个可以判定ZFC公理是否一致的程序,这个程序如果停机,那就是数学体系的崩塌,还好,我们有充分信心它是不会停机的。