从数学到计算机 从莱布尼兹到冯诺依曼 从数理逻辑到算法分析

https://blog.csdn.net/lanonjj/article/details/51464922

序:从2010年进入大学接触到计算机开始,便不断对其本源好奇,接触得愈久就愈是觉得这门学科当真博大精深、美妙又繁复,纵其一生也难穷究竟。以下为一段时间内(2010 ~ 2015.09.28)探索的简略总结,半年后,回头再看惊觉其中内容和各线索之间的联系竟然已忘记大半。庆幸当时没有偷懒,把这些思考和笔记写在了Evernote中,所以还能再次看到。现将这篇笔记发送到互联网上,以资备忘和分享,其中或有错误、语焉不详之处,还请指正。

<1> 什么是分析学?

分析学建立在微积分基础之上,而要建立微积分必须明确定义无穷小,为了定义无穷小则需要一个公理化的实数理论,而实数理论是建立在有理数系统之上的,有理数系统又更底层的依赖于自然数系统,而自然数系统本身的和谐性,则依赖于集合论的和谐性。以公理系统观之则存在以下依赖路径链:

ZFC集合公理 → Peano自然数公理系统 → 有理数系统 → 实数理论 → 极限理论 → 微积分 → 分析学

<2> 公理系统的意义

公理系统将一个数学系统归结为一组基本的公理,这些公理之间满足自洽性、独立性和完备性,则整个数学系统的可探索部分可以完全由该公理系统推导出来。公理系统使得整个系统有了一个完整、明确的定义,而不是如远古时代的先辈依靠直觉和经验来认识数和几何图形那样来定义和研究数学对象。完整、明确的定义避免了歧义与在细节化时的含混不清,由此有了公理系统我们就能完整的理解到底什么是实数中的无理数,而不是说不能有理化的数即是无理数那样完全没有明确意义的说法。

<3> 数学是什么

数学在表观和操作上是可以完全符号化的演算过程。数值化的演算通常称为计算,而所有的符号化系统都可以编码为自然数系统(哥德尔的证明),所以数学在操作上可以等价为计算过程。在自然算术系统中一切的数学计算过程都是一种代数变换,而所有的代数变换皆可映射到最简单的代数系统上:二进制的布尔代数。这是计算机拥有计算能力的根本原因。因为计算机只是实现了布尔代数的机器而已。数学的基本操作虽然可以归结为二进制的布尔代数,但数学中更一般化的基本操作是推理和证明,即演绎,或者演算 [之所以在计算之外又使用演绎、演算这两个词语,是因为演绎和演算更具有数理逻辑的味道,而计算一词严重的偏向了数值计算的含义]。所有的数学演算最终都是对于数学命题的证明,或者说是对于某个数学事实的推演,比如计算 1 + 1 的值实际上是应用Peano的自然数系统公理进行推演得出一个事实的过程,即 1 + 1 = 2的事实。

<4> 更大的野心

在希尔伯特建立公理系统之时曾有一个伟大的野心,如果所有的数学分支都可以归纳到一组公理系统中,那么整个数学系统不仅将拥有完整而坚实的基础(从此数学家再也不会由于某些概念的含混不清而争论好几个世纪了),同时在某种程度上也意味着数学的终结,因为所有可能的数学事实将可以由公理系统轻松,完整并且无歧义的推导出来。然而哥德尔的证明却表明了这样的努力是不会成功的,这样的完备且一致的公理系统并不存在。虽然不能实现那个最初伟大的抱负,但公理系统本身的意义仍然存在。 
公理系统表明了一个数学系统中的数学事实可以由有限的公理一步一步地推导出来。既然可以机械的推导出来这些事情,那么为什么不让它们自动进行呢?伟大的莱布尼兹在他研究数理逻辑时就已近想着让机械模仿人类的思维过程来实现对数学事实的推导,即基于公理化方法进行自动化演算。 
数理逻辑的研究表明数学演算可以归结为公理系统的定义和谓词逻辑的几种基本操作。在公理化完整定义了一个完整的数学系统后,结合数理逻辑就让机械演算有了完整的理论可能性基础,剩下的就是创造一整套具体方法来实现机械演算。当公理系统被形式化之后,我们就可以采用形式化演算进行数学计算了。那么对于机械而言只要它们能够按照演算的规则进行操作就能在一定程度模拟人类自身的演算过程了。这一整套的演算规则即是我们所谓的形式化语言,形式化语言包含了该形式化系统中各种对象的定义和对象之间的运算规则,即形式化的公理系统。所以只要有一个机器实现了一门形式化语言,则该机器就能进行该系统中的形式化演算。在莱布尼兹、康托尔、希尔伯特、哥德尔之后图灵在终于在理论上给出了这样的机器的完整雏形,即图灵机,一台正真具备了演算能力的机器。从此人类的智力得到了从繁琐中解放的救赎,终于可以让那些重复、简单、无聊、机械的推导过程自动化进行了。所以,最后的关键是怎么把自动机理论变成物理实现的现实呢?

<5> 冯诺依曼的贡献

冯诺依曼的伟大之处在于让图灵机变成了正真现实可用的可编程的计算机器。他提出冯氏结构,采用存储程序模型实现了形式化语言的机械化。自此我们完成了从数理逻辑基础到自动机的伟大历程,完成了几代伟大人物壮丽设想。

<6> 形式化语言

数学本身可归结为符号化的演算,亦可特例化为自然数系统的算术计算,从而进一步归结为二进制的布尔逻辑,即一般意义上的计算。计算过程是推演某个数学事实的过程,更自然语言地可表述为从输入推演到输出的过程,从初始化条件变换到期望结果的过程。 
变换之根本在集合论上即映射,在数理逻辑上即推演。描述映射与推演的具体方法称为形式化方法,所形成的系统成为形式化系统,更计算性的说即是形式化语言。 
一门形式化语言实际上定义了一个数学系统,同时也对应着一个自动机模型。而我们现在所用的通用计算机,它们与图灵机是等价的,常见的形式化语言,即编程语言同样也都是图灵完备的,即它们与图灵机具备相同的计算能力,对于同一个问题将给出同样是可计算的或者不可计算的判定结果。

形式化系统 <=> 形式化语言 <=> 自动机 <=> 机器

<7> 算法是什么

在这整个计算过程中,推演的过程,变换的过程即是算法。算法,是实现计算过程的方法。纯粹算法实际上不应该依赖于具体的机器实现,其唯一被限制之处应该源于该形式化系统本身。现实的算法,即我们通常意义的算法则常常需要针对时间和空间做优化,即在一定程度上是与具体机器相关的。

<8> 编程是什么

在有了形式化语言即编程语言之后,在确定了算法之后,则只需要将算法表述为当前的编程语言的形式让实现了该语言的机器run一遍即可。所以编程是将算法表述为某种特定语言的过程。

<9> 一脉相承的问题

康托尔发现实数比自然数更多,即自然数和实数不能一一对应,并由此开端引出了著名的罗素悖论。 
哥德尔证明了任何一个形式系统,只要包括了简单的初等数论描述,而且是自洽的,它必定包含某些系统内所允许的方法既不能证明真也不能证伪的命题,即不具有被完备性。 
图灵说自动机将不可避免的面对停机问题。 
关于此议题请参考刘未鹏《康托尔、哥德尔、图灵 — 永恒的金色对角线》一文以及Gregory Chaitin在马萨诸塞大学关于数学基础的世纪演讲《A Century of Controversy over the Foundations of Mathematics》。这两篇文章对这个问题做了十分精彩,深刻的解说。这是两篇让人有一种“念了五年计算机终于认祖归宗了”读后感的文章。

<10>黑客们都用LISP

面向机械的通用形式化语言和图灵机是等价的,那么有没有一种理论并不面向机器而是针对纯粹数学而且和图灵机等价呢? 
Yes.It’s. 那就是哥德尔天才证明中已近显露头角的程序即数据的形式化推理系统。丘奇1936年给出的lambda演算系统就是一个这样的系统,而LISP刚好是以lambda演算为基础构建的编程语言。它们强大的威力将赋予你任意构造自己需要的算子,随心所欲构造出任何自己满意计算机器的能力,甚至可以说唯有lambda演算才是编程语言界真正无可争议的皇后,它简单的难以置信(3行定义,真的只有三行定义而已!!),同时却也美丽的不可琢磨,让人觉得无与伦比,并产生了人类由于面对过于壮丽的事物会不自由主想要哭泣自然反应,以及心智因此停顿而一时不知所措,如痴如醉的恍惚。 
“真正的黑客们都用LISP”,在计算机圣经《黑客与画家》一书中教父Paul Graham如是言。教父诚不欺我也。

[之所以称《黑客与画家》为圣经而不是其他书籍,是因为圣经从来都不是技术书籍,而是那些饱含真理与文化,并不断指引人们走上正确道路的书籍。]

猜你喜欢

转载自www.cnblogs.com/hjlweilong/p/9434522.html