图灵机模型

作者:晓雷
链接:https://www.zhihu.com/question/21452411/answer/48216701
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

语言与机器是我很早就想写的一个系列文章。大三时初次接触函数式编程就被这条不同寻常的“邪门歪道”所震惊。原来我们熟悉的过程是编程语言之外还存在这么多的“奇葩”。原来编程的思维不只有机器这一条路。仔细往下探究很快就会了解到丘奇的λ算子和图灵的图灵机,前者站在数学的抽象角度后者站在物理的机器视角。真正理解一件事物最好的方式莫过于去探寻它的历史,作为系列文章的第一篇,我们就一起回到20世纪初,寻找计算机产生的源头。


  • 1 数学渊源

    • 1900 希尔伯特23问题

    • 1901 罗素悖论引发第三次数学危机

    • 1931 哥德尔不完备性定理

  • 2 可计算性问题

  • 3 三种模型对程序语言的影响

    • 基于图灵机的过程/命令编程范式

    • 基于λ算子的函数编程范式

    • 基于一阶逻辑(一般递归函数)的逻辑编程范式


1 数学渊源


1900 希尔伯特23问题

希尔伯特(David Hilbert)在1900年巴黎数学家大会上提出著名的希尔伯特23问题。这23个问题对20世纪的数学界产生巨大影响,照亮整个20世纪的数学天空。此处我们只说明第2问题与第10问题,它们与我们后面要讲的故事有着莫大的联系。第2问题是有关公理系统的相容性:证明算术公理是一致的。第10问题是有关多项式丢番图方程解的问题:否存在一个算法,能够计算任意丢番图方程是否有整根。


1901 罗素悖论引发第三次数学危机

十九世纪下半叶,康托尔创立了著名的集合论。刚产生时,曾遭到许多人的猛烈攻击。后来数学家们发现,从自然数与康托尔集合论出发可建立起整个数学大厦。“一切数学成果可建立在集合论基础上”。 但是不久伯特兰·罗素(Bertrand Russell,1872—1970)提出了 一个悖论,可以用一个理发师问题进行通俗的描述:


塞尔维亚有一位理发师:他只给所有不给自己理发的人理发,不给那些给自己理发的人理发。 问:他要不要给自己理发呢? 如果他给自己理发,他就属于那些给自己理发的人,因此他不能给自己理发。如果他不给自己理发,他就属于那些不给自己理发的人,因此他就应该给自己理发。(严格的罗素悖论: S由一切不是自身元素的集合所组成。 罗素问:S是否属于S呢? )


许多数学家开始关心数学的基础问题。 数是什么? 无穷是什么? 公理应该如何? 空间应该如何?直观是否靠得住?当时的基础研究主要来源于四大支脉,它们彼此交叉:

  • 数的理论以及空间或其他对象的理论。

  • 集合及无穷或超穷数的理论,连续统理论。(康托尔一人创造)

  • 公理理论: 1899年希尔伯特的《几何基础》出版,是这个方向的里程碑。此后形成数学各领域中的公理化热潮,集合论也不例外。

  • 形式逻辑的符号化与数字化

其中比较突出的当属公理化路线,危机产生后很多数学家和逻辑学家都在致力于给整个数学建立一个一致的公理基础,比如罗素和怀特海德写了 “数学原理” (Principia Mathematica) ; 比如约翰 ·冯 ·诺伊曼写了关于公理化集合论的博士论文 ; 再比如丘奇 (Alonzo Church)提出了λ算子(初衷是为了给逻辑学提供一个基础, 能代替罗素的类型理论和恩斯特 · 策梅洛 (Ernst Zermelo)的集合理论)。公理化路线的领军人物是希尔伯特:


几何基础和公理理论

早期的几何学基础是欧几里得的《几何原本》所奠定的。但欧几里得体系有着许多缺陷。有些公理多余,许多概念诉诸直观。希尔伯特在一些人的影响下,提出来“在一切几何命题中,我们可以用桌子,椅子,啤酒杯来代替点,线,面”,这种思想后来导致他完成了几何学基础的彻底革新。1899希尔伯特发表的《几何基础》不仅彻底清除了欧几里得几何学体系中的缺陷,建立了新的几何学基础,而且树立了现代数学的公理化模式,发展了公理学,推动了整个数学基础的研究。 公理化的要点在于:

  • 提出一些原始的术语,这些术语,并不作为定义。

  • 原始术语的性质只由公理所反映出来的性质决定。

  • 公理系统中的每一公理是否符合人们的直观不予考虑,人们关心的只是公理系统中的公理是否彼此之间没有矛盾,也就是相容性。

希尔伯特的公理系统是非常适合开展一个几何理论的。因此希尔伯特不仅为欧几里得几何学奠定了新的公理化基础,更重要的是建立一套模式来处理任何数学对象,并把他们建立在可靠的公理基础上。他还明确提出对公理系统的要求:

  • 无矛盾性,也称为协调性,一致性,相容性,也就是公理系统不能推出相互矛盾的结论。

  • 独立性,也就是公理系统中没有一个公理可由其它公理推出(正交性?)

  • (关于完备性和范畴性请查看相关资料)


希尔伯特计划-用公理化拯救数学大厦

由于悖论的出现,数学的基础产生危机,以布劳威尔为代表的直觉主义主张抛弃经典数学中不可构造的结果,从而引起希尔伯特保卫经典数学“有成效的概念结构和推理方法”的努力;其结果就是提出“希尔伯特计划” 最终目的就是证明经典数学的无矛盾性,因而是可靠的。希尔伯特认为每一门数学理论都是由一些公理出发的演绎系统。数学理论的可靠性在于公理系统的无矛盾性。证明数学理论无矛盾性常用划归的方法,例如把非欧几何学的无矛盾性归结为算术的无矛盾性,算术的无矛盾性归结为集合论的无矛盾性等。如果最后能完成这些无矛盾性的证明,则整个数学也就有了可靠的基础。这就需要一个绝对的证明。


1931 哥德尔不完备性定理

一开始,“希尔伯特计划”取得部分成功,如证明命题演算,一阶谓词演算,只具有加法的算术的无矛盾性。但是哥德尔(Kurt Godel)1931年成功证明:任何一个数学系统,只要它是从有限的公理和基本概念中推导出来的,并且从中能推证出自然数系统,就可以在其中找到一个命题,对于它我们既没有办法证明,又没有办法推翻。 哥德尔不完全定理的证明结束了关于数学基础的争论,宣告了把数学彻底形式化的愿望是不可能实现的。

“希尔伯特计划”原打算把所有古典数学,至少是其中大部分内容形式化。哥德尔第一不完备性定理证明这是不可能的。“希尔伯特计划”还试图通过有穷的证明来证明这样的形式系统的无矛盾。哥德尔第二不完备性定理表明,即使形式数论的所有方法都看成是有穷的,也不足以证明数论的无矛盾性(希尔伯特第2问题得到了答案)。

哥德尔的论文发表之后,立即引起逻辑学家的莫大兴趣,它开始虽然使人感到惊异不解,不久即得到广泛承认,并产生了巨大的影响。它是20世纪数学的最重大成就之一,它是数理逻辑发展史上的里程碑。使得数理逻辑发展成“四论”,即递归论,证明论,公理集合论,模型论组成的数学分支。



2 可计算性问题

哥德尔不完备性定理说不存在一个完备的系统把数学彻底形式化。因为总有一些问题是既不可以证明“真”,也不可以证明“假”的。有些数学家看到这里会思考一个问题:哪些问题是可证明的?哪些问题是不可证明的? 边界在哪?怎么判定一个问题是否可解?这与希尔伯特第10问题(“是否存在一个算法能够计算任意丢番图方程是否有整根)也有着莫大的联系。要解决这个问题,就得先严格定义“可计算”这一概念。于是就引出了著名的”丘奇-图灵命题“。


可计算的通俗说法:“设函数f的定义域是D,值域是R,如果存在一种算法,对D中的任意给定x,都能计算出f(x)的值,则称函数f是可计算的”,也就是在可以预先确定的时间和步骤之内能够具体进行的计算。在严格的可计算函数定义之前,数学家们经常使用“有效计算”这一非正式术语去描述那些可以通过笔和纸进行计算的函数。20世纪30年代许多数学家试图将可计算性理论形式化。其中三个典型代表是哥德尔,丘奇和图灵。他们的研究思路都是为计算建立一个数学模型,称为计算模型,然后证明凡是这个计算模型能够完成的任务都是可计算的任务。(这个模型就像一个评价器,判定哪些问题可解哪些不可解)。在可计算理论中,丘奇-图灵命题是关于可计算函数性质的猜想:自然数上的函数可以被人类按照特定的算法计算当且仅当它可以被图灵机计算。

  • 1933年,哥德尔(Kurt Gödel)和雅克·埃尔布朗(Jacques Herbrand) 一同建立了一类被称为一般递归函数(general recursive)的形式化定义。一般递归函数是最小的一类函数,它包含了所有的常函数,射影函数和后继函数并且对函数的组合运算与递归运算封闭。

  • 1936年,丘奇(Alonzo Church )所创造的形式化系统被哥德尔不完备性定理冲击之后,发现该形式化系统所包含的lambda算子(λ-calculus)具有良好的性质,并基于lambda算子定义了一种自然数的编码方式(丘奇数)。他证明自然数域上的函数是lambda可计算的(λ-computable )仅当对应的丘奇数上的函数可以被lambda算子表示出来。

  • 1936年,在得知丘奇的工作内容之前图灵(Alan Turing)创造了一种通过操作纸带上的符号进行计算的机器理论模型(图灵机)。把自然数编码成一堆符号序列,自然数上的函数是图灵可计算的(Turing computable )仅当存在图灵机可以在自然数被编码的符号序列上计算相应的函数。

丘奇和图灵证明以上三种关于可计算函数的形式化定义是一致的:一个函数是λ-computable当且仅当它是Turingcomputable当且仅当它general recursive。


3 三种模型对程序语言的影响

基于图灵机的过程/命令编程范式

冯·诺依曼根据图灵机提出了奠定现代计算机体系结构的冯·诺依曼体系结构,出现了机器语言,发展为汇编语言,最终形成了以C语言为代表的C类语言家族(C++,C#,Java等),它的计算原理是有限状态自动机,核心概念是“命令”。


基于λ算子的函数编程范式

1965 年, 英国计算机科学家Peter Landin发现可以通过把复杂的程序语言转化成简单的λ算子,来理解程序语言的行为。这个洞见可以让我们把λ算子本身看成一种程序设计语言。 而众所周知的 John McCarthy的Lisp 语言,更是让λ算子广为传播。现在不论是各种实际的程序设计语言还是理论上的研究工作,λ算子都是一个绕不过去的基本工具了。λ算子之所以这么重要, 用 Benjamin C.Pierce的话说在于它具有某种“二象性”:它既可以被看作一种简单的程序设计语言,用于描述计算过程,也可以被看作一个数学对象, 用于推导证明一些命题。代表语言是Scheme、Haskell,计算原理是λ算子,核心概念是函数。


基于一阶逻辑(一般递归函数)的逻辑编程范式

代表语言Prolog/Mercury,计算原理是逻辑推理,核心概念是断言(Predicate)。




【二,图灵机介绍 (构成?工作方式?停机问题?)】

声明:以下内容来自 北京大学 李戈老师的《计算概论A》课件 课程地址 Coursera - Free Online Courses From Top Universities


图灵机的构成

<img src="https://pic2.zhimg.com/606861189586b4219ea5342127acdad1_b.jpg" data-rawwidth="947" data-rawheight="530" class="origin_image zh-lightbox-thumb" width="947" data-original="https://pic2.zhimg.com/606861189586b4219ea5342127acdad1_r.jpg">

图灵机工作方式

<img src="https://pic4.zhimg.com/4cb42069005405d31160f402d79b834b_b.jpg" data-rawwidth="951" data-rawheight="521" class="origin_image zh-lightbox-thumb" width="951" data-original="https://pic4.zhimg.com/4cb42069005405d31160f402d79b834b_r.jpg">

示例:

<img src="https://pic1.zhimg.com/2996149bc432b1cee8b26cddf0052b14_b.jpg" data-rawwidth="953" data-rawheight="493" class="origin_image zh-lightbox-thumb" width="953" data-original="https://pic1.zhimg.com/2996149bc432b1cee8b26cddf0052b14_r.jpg">
<img src="https://pic4.zhimg.com/e6aa364405b3e0c1096da20e6ad6153f_b.jpg" data-rawwidth="948" data-rawheight="480" class="origin_image zh-lightbox-thumb" width="948" data-original="https://pic4.zhimg.com/e6aa364405b3e0c1096da20e6ad6153f_r.jpg">
<img src="https://pic2.zhimg.com/2d342706d004602d1febce464afe910d_b.jpg" data-rawwidth="952" data-rawheight="481" class="origin_image zh-lightbox-thumb" width="952" data-original="https://pic2.zhimg.com/2d342706d004602d1febce464afe910d_r.jpg">
<img src="https://pic1.zhimg.com/91fde5e924d3621ef21a722988de9190_b.jpg" data-rawwidth="949" data-rawheight="483" class="origin_image zh-lightbox-thumb" width="949" data-original="https://pic1.zhimg.com/91fde5e924d3621ef21a722988de9190_r.jpg">
<img src="https://pic4.zhimg.com/470622a03e7f793f7fde2cd9c118d20f_b.jpg" data-rawwidth="937" data-rawheight="477" class="origin_image zh-lightbox-thumb" width="937" data-original="https://pic4.zhimg.com/470622a03e7f793f7fde2cd9c118d20f_r.jpg">
<img src="https://pic2.zhimg.com/59b5a71fcc6043302e73bf58df31e3c5_b.jpg" data-rawwidth="942" data-rawheight="487" class="origin_image zh-lightbox-thumb" width="942" data-original="https://pic2.zhimg.com/59b5a71fcc6043302e73bf58df31e3c5_r.jpg">
<img src="https://pic3.zhimg.com/03507df36738cc547c8cf8cbd7fa969e_b.jpg" data-rawwidth="945" data-rawheight="487" class="origin_image zh-lightbox-thumb" width="945" data-original="https://pic3.zhimg.com/03507df36738cc547c8cf8cbd7fa969e_r.jpg"> <img src="https://pic2.zhimg.com/7c820d477291971d336c181d11d4d66d_b.jpg" data-rawwidth="949" data-rawheight="477" class="origin_image zh-lightbox-thumb" width="949" data-original="https://pic2.zhimg.com/7c820d477291971d336c181d11d4d66d_r.jpg">
<img src="https://pic4.zhimg.com/d8f5512c137ddfbcf79e5077e5c24fe3_b.jpg" data-rawwidth="942" data-rawheight="478" class="origin_image zh-lightbox-thumb" width="942" data-original="https://pic4.zhimg.com/d8f5512c137ddfbcf79e5077e5c24fe3_r.jpg">
<img src="https://pic4.zhimg.com/7d8e3474c9c54fc0bf079a10879828f3_b.jpg" data-rawwidth="945" data-rawheight="482" class="origin_image zh-lightbox-thumb" width="945" data-original="https://pic4.zhimg.com/7d8e3474c9c54fc0bf079a10879828f3_r.jpg">
<img src="https://pic1.zhimg.com/28b40ed4b2ed432ab2af0aab51cbd254_b.jpg" data-rawwidth="950" data-rawheight="477" class="origin_image zh-lightbox-thumb" width="950" data-original="https://pic1.zhimg.com/28b40ed4b2ed432ab2af0aab51cbd254_r.jpg">
<img src="https://pic2.zhimg.com/f5342ba624201e803dea70f8922f4531_b.jpg" data-rawwidth="950" data-rawheight="475" class="origin_image zh-lightbox-thumb" width="950" data-original="https://pic2.zhimg.com/f5342ba624201e803dea70f8922f4531_r.jpg">


图灵机为什么受到重视?

可计算模型有很多,但是图灵机却拥有 简单! 强大! 可实现!的强大特点。


下图网址里有图灵机的具体实现:


<img src="https://pic3.zhimg.com/278eabbcc7c36ca1f1014783f1e0da62_b.jpg" data-rawwidth="569" data-rawheight="445" class="origin_image zh-lightbox-thumb" width="569" data-original="https://pic3.zhimg.com/278eabbcc7c36ca1f1014783f1e0da62_r.jpg">

图 灵 机 的 理 论 意 义
  • 可计算性的判定;
  • 意义:
    • 给出了一个可实现的通 用计算模型; -引入了通过“读写符号” 和“状态改变”进行运 算的思想;
    • 证实了基于简单字母表 完成复杂运算的能力;
    • 引入了存储区、程序、 控制器等概念的原型;


参考链接:

猜你喜欢

转载自blog.csdn.net/hemeinvyiqiluoben/article/details/54617388