二、图灵机

图灵机理论的提出及相关理论:

下面我们的主人公将是图灵,也许你现在对他一无所知,但阅读这一节后,你需要深刻的记住他,因为在我看来,是他启发与影响了他之后的整个计算机发展史。为了让大家更好地理解与接受他的理论,我会多穿插一些背景,毕竟天才也不是生活在真空中的。

图灵早年在剑桥大学求学,在那个年代,剑桥大学的大数学家罗素和怀特海已经创立了“数理逻辑学”。“数理逻辑”这个学科的创建,起源于一个逻辑上的“悖论”。为了非专业人士都能明白逻辑悖论的含义,哲学家或者数学家喜欢用讲故事的办法来解释它。一个经典的故事是:村子里有位理发师,他为而且只为村子里所有那些不给自己理发的人理发。数学的逻辑推理上会出现类似的悖论。数学家们十分担心“数学大厦”会因悖论的存在而坍塌,于是他们都想方设法去修补数学基础。例如,康托发表专著《集合论》,罗素与怀特海联合撰写三卷《数学原理》。

       剑桥大学是“数理逻辑学”的发源地与大本营,一群聪明而勤奋的青年数学家聚集在数学泰斗罗素教授的周围,图灵是其中的佼佼者。1935年,刚刚毕业,年仅23岁的图灵就被剑桥大学国王学院甄选为研究员,成为剑桥大学有史以来最年轻的研究员。正是图灵在数学,尤其是在“数理逻辑学”方面的深厚功底,令他几年后终于厚积薄发,一举奠定了他计算机科学的创始人的地位。

       图灵先知先觉,在电子计算机远未问世之前,他已经想到所谓“可计算性”的问题。物理学家阿基米得曾宣称:“给我足够长的杠杆和一个支点,我就能撬动地球。”类似的问题是,数学上的某些计算问题,是不是只要给数学家足够长的时间,就能够通过“有限次”的简单而机械的演算步骤而得到最终答案呢?这就是所谓“可计算性”问题,一个必须在理论上做出解释的数学难题。

       经过智慧与深邃的思索,图灵以人们想不到的方式,回答了这个既是数学又是哲学的艰深问题。1936年,图灵在伦敦权威的数学杂志上发表了一篇划时代的重要论文《可计算数字及其在判断性问题中的应用》。文章里,图灵超出了一般数学家的思维范畴,完全抛开数学上定义新概念的传统方式,独辟蹊径,构造出一台完全属于想象中的“计算机”,数学家们把它称为“图灵机”。这样的奇思妙想只能属于思维像“袋鼠般地跳跃”的图灵。

       “图灵机”想象使用一条无限长度的纸带子,带子上划分成许多格子。如果格里画条线,就代表“1”;空白的格子,则代表“0”。想象这个“计算机”还具有读写功能:既可以从带子上读出信息,也可以往带子上写信息。计算机仅有的运算功能是:每把纸带子向前移动一格,就把“1”变成“0”,或者把“0”变成“1”。“0”和“1”代表着在解决某个特定数学问题中的运算步骤。“图灵机”能够识别运算过程中每一步,并且能够按部就班地执行一系列的运算,直到获得最终答案。

       “图灵机”是一个虚拟的“计算机”,完全忽略硬件状态,考虑的焦点是逻辑结构。图灵在他那篇著名的文章里,还进一步设计出被人们称为“通用图灵机”的模型,它可以模拟其他任何一台解决某个特定数学问题的“图灵机”的工作状态。他甚至还想象在带子上存储数据和程序。“通用图灵机”实际上就是现代通用计算机的最原始的模型。

不过图灵在提出图灵机构想之后,又发现了新问题,有些问题图灵机是无法计算的。比如定义模糊的问题,如“人生有何意义”,或者缺乏数据的问题,“明天3D中奖号是多少”,其答案当然是无法计算出来的。但也有一些定义完美的计算问题,它们亦是不可解的,这类问题称为不可计算问题。

不可计算的问题在实践中几乎碰不到,事实上,很难找到这样的例子,既不可计算但又有人向计算的明确定义的问题。一个罕见的问题是所谓的停机问题。设想要编写一个用于检查并判定另一个程序是否会运行结束的程序,而事实上,不存在一个程序能够判断另一个程序是否与无限循环有染。我们可以来这样设想:假定我们有一个Test程序,此程序把别的测试程序当成输入,我们把它插入另一个程序Paradox(悖论)中,并在Test中使用Paradox函数作为参数(即Paradox() { … ;Test(Paradox);…})。这个Paradox函数的编写思路是这样的,如果Test程序判断Paradox会运行结束,那么Paradox就进入无限循环,如果Test判断Paradox不会结束,则Paradox函数立刻终止。于是Test函数对Paradox函数无效,所以判断函数是否会终止的程序不存在。

计算机不能解一些问题并不是计算机的弱点,因为停机问题本质上是不可解的,不可能建造出一个解停机问题的机器。通用计算机无法完成的计算,无论什么东西同样无法胜任。

 

图灵机的定义与举例:

接下来我们给出图灵机模型的一个严格的形式定义:

一个图灵机是一个七元组(Q,∑,σ,δ,q0,qaccept,qreject),其中Q,∑,σ都是有穷集合。

Q是状态集;

∑是输入字母表,不包括特殊空白符号;

σ是带字母表,其中包括∑与空白符号;

δ:Q×σ→Q×σ×(L,R)是转移函数;

q0∈Q是起始状态;

qaccept∈Q是接收状态;

qreject∈Q是拒绝状态;

下面是图灵机的图示:

 

从上述形式定义可以看出模型的关键在于有穷控制器中的状态转换函数,根据图灵的通用计算理论,这个转换函数是灵活可变的(对应于通用图灵机),当然也可以使单一的(对应于专用图灵机,即便如此,它的能力也强于有限状态机,因为图灵机是可以接受0级语言的),不过这并非图灵提出图灵机的意义所在。

下面我们来比较有限状态机与通用图灵机的区别所在:

1、 图灵机既能读又能写;

2、 带子是无限长的(可以无限存储,结合读写头既能左移又能右移的特点,当然就可以解决判断输入的0与1个数谁多的问题),而且带子上不但可以写入数据,还可以写入实现某一具体功能的;

3、 进入拒绝和接收状态立即停机;

同有限状态机一样,我们构造一个图灵机来实现一个简单的功能。

目标:利用二进制来设计一个专门计算“x+1”的图灵机,要求计算完成时,读写头要回归原位。

状态集合K:

{start,add,carry,noncarry,overflow,return,halt};

字母表∑:{0,1,*};

初始状态s:start;

停机状态集合H:{halt};

 

规则集合δ:

 

实现步骤:

----------------------------------------------------------------

----------------------------------------------------------------

----------------------------------------------------------------

从这个过程中我们发现,虽然图灵机可以实现x+1的功能,但是他的工作流程理解起来并不是人们日常的计算过程,甚至与现代计算机的计算原理也并无太大相关。这是因为与现代计算机相比,它的计算方式也还是有局限性,由于图灵机每次只能读入一个数据,改写所读入的数据,而不像现代计算机可以同时读入多个数据、改写其他数据,所以相应的算法难理解性也就增加。

 

图灵机的意义与思想内涵:

图灵提出图灵机的模型并不是为了同时给出计算机的设计,它的意义我认为有如下几点:

1、      它证明了通用计算理论,肯定了计算机实现的可能性,同时它给出了计算机应有的主要架构;

2、      图灵机模型引入了读写与算法与程序语言的概念,极大的突破了过去的计算机器的设计理念;

3、      图灵机模型理论是计算学科最核心的理论,因为计算机的极限计算能力就是通用图灵机的计算能力,很多问题可以转化到图灵机这个简单的模型来考虑。

对图灵机给出如此高的评价并不是高估,因为从它的设计与运行中,我们可以看到其中蕴涵的很深邃的思想。

通用图灵机等于向我们展示这样一个过程:程序和其输入可以先保存到存储带上,图灵机就按程序一步一步运行直到给出结果,结果也保存在存储带上。

另外,我们可以隐约看到现代计算机主要构成(其实就是冯诺依曼理论的主要构成),存储器(相当于存储带),中央处理器(控制器及其状态,并且其字母表可以仅有0和1两个符号),IO系统(相当于存储带的预先输入);

 

伟大的图灵:

正是在图灵搭建的理论基础之上,计算机才有了后来的蓬勃发展。美国的阿坦纳索夫在1939年果然研究制造了世界上的第一台电子计算机ABC,其中采用了二进位制,电路的开与合分别代表数字0与1,运用电子管和电路执行逻辑运算等。ABC是“图灵机”的第一个硬件实现。冯·诺依曼不仅在上个世纪40年代研制成功了功能更好、用途更为广泛的电子计算机,并且为计算机设计了编码程序,还实现了运用纸带存储与输入。至此,天才图灵在1936年发表的科学预见和构思得以完全实现。

明白了图灵那无与伦比的贡献,人们就不难理解,何以冯·诺依曼对于“计算机之父”的桂冠坚辞不受。曾经担任过冯·诺依曼研究助手的美国物理学家弗兰克尔教授这样写道:“许多人都推举冯·诺依曼为“计算机之父”,然而我确信他本人从来不会促成这个错误。或许,他可以被恰当地称为‘计算机的助产士’。依我之见,正是冯·诺依曼使世界认识了由图灵引入的计算机的基本概念。”弗兰克尔教授此言不虚,在1949年,冯·诺依曼发表了一篇题为《自动计算机的一般逻辑理论》的论文,客观而公正地阐述了图灵在计算机理论上的重大贡献。他写道:“大约12年前,英国逻辑学家图灵就开始研究‘可计算问题’,他准确地给出了‘自动计算机’的一般性定义。”冯·诺依曼宁愿把“计算机之父”的桂冠转戴在图灵头上。当然,这已经是在图灵离开普林斯顿十来年以后的事了,他当年在普林斯顿并没有像后来那样受人景仰。图灵曲高和寡,当年就能看明白他那篇文章划时代意义的,仅仅是少数杰出的数学家,如冯·诺依曼者。