原创

逻辑的引擎

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://daichen.blog.csdn.net/article/details/96582907

最近利用通勤时间又读完了一本好书,《Engines of Logic——Mathematicians and the Origin of the Computer》。可能由于作者本身也是数学和计算方面的牛人,所以这本书并不那么容易读。一是字里行间可以立即感受到的不舒服,即句式有些太复杂,随便翻开一页就能发现很多可以用作GRE阅读理解的长难句。二是每一章都大概用了至少一半的篇幅,对年代和人物生平进行介绍。于是各种人名、国家、政治、战争相关的词参杂在GRE长难句中,令人云里雾里。三就是本人的问题了,对书中涉及的数学知识准备不足。

但本书的优点明显,系统地梳理了相关的人物和知识,可以作为后续学习的主线(参见本文最后一部分的后续学习计划)。再就是下面正文也会提到的,本书刷新了笔者对逻辑和计算两者关系的既有认知。回过头来想想,其实每天都在两者间往来,有点当局者迷了,本书正是醍醐灌顶的那一下。所以瑕不掩瑜,总体来说这是一本绝对值得推荐的好书。

注:读完这本书后,这篇文章却一直没有写完。现在搁置了快一年,但当时读完后兴奋的心情仍记得。所以暂且把写完的部分写发出来,让大家了解这样一本难得的好书。


1.莱布尼兹的梦

说到莱布尼兹,我们首先会想到的就是微积分了,与同样大名鼎鼎的牛顿各自独立研究出了微积分。但莱布尼兹有一项超凡的能力,他为微分和积分发明的符号记法沿用至今,使得复杂的微积分计算变成了几乎不用思考的“体力劳动”。莱布尼兹不止于此,他认为对人类的各种知识都可以用类似的方法来实现简化甚至自动化。于是,他梦想着将人类的全部知识进行百科全书式地编纂,用统一的数学语言将每一条知识点都精确地表达出来,同时用一套计算规则表示这些知识(proposition命题)之间的逻辑关系,最后也是最重要:一台能够承载这些计算的机器,自动证明、产生更多知识,解放人类去做创造性的思考

莱布尼兹着迷于亚里士多德的概念分类法,于是对这个他想到的绝妙构想,首先要做的就是用一套特殊的符号表去表示概念。同时他也在实践中向着这个方向努力,帕斯卡设计了能够加减的机器,而莱布尼兹则设计了第一台能够乘除的机器,在其中引入了被称作“莱布尼兹轮”的天才部件。尽管如此,他还是没能在有生之年实现这个美好的愿景。也许今天的我们想起来很简单,觉得计算机发展起来也就是最近几十年的事情。可是对于当时的人们,没有理论基础,没有合适的材料和工艺,要想靠一位数学家甚至是一代数学家们来完成都是不现实的。即便到了今天,尽管很多人都在研究,也有了Prolog专门的逻辑语言,可莱布尼兹的自动化愿景也还没完全实现。

莱布尼兹自己可能也清楚,这个宏伟的构想要靠接下来几代人共同努力了,而且他认为最终是可以实现的。脚踏实地,他给出了一系列可行的步骤:1)创建一套百科全书包揽人类的所有知识;2)选取关键的底层记号,为每一个都提供专门的符号来表达;3)逻辑推导变成了对这些符号的操纵。这也就是我们今天所说的“符号逻辑”,莱布尼兹为后人指明了前进的方向。


2.逻辑的计算

2.1 布尔:化逻辑为代数

在学习离散数学时相信大家肯定都学过布尔代数。当时眼里只有代数两个字,就觉得这只是另一种形式的代数。可如今想想,古老的逻辑与代数的运算结合到了一起,真是神奇!在莱布尼兹开创和指引的逻辑演算的大道上,布尔又更进了一步,经过更多人的贡献,最终发展成为一个分支——数理逻辑。想想每天编程时,每次声明一个布尔变量,其实都是在纪念着布尔。

简单来说,布尔用乘法表示交集,用加法表示并集,0表示空集,1表示全集(包含所有当前被考虑的对象)。通过一系列的研究和验证,比如最简单的x(1 - x) = 0,一个集合里的元素与不属于该集合的元素取交集,结果应该为0,即空集才对,否则就违反了最基本的Principle of Contradiction了。所谓的“矛盾原则”是由亚里士多德提出来的,所有哲学都应该遵守的基本公理。它的基本含义是:一个性质不可能既属于又不属于同一样东西。在布尔代数里,xx即集合与自己的交集当然仍旧等于自己。所以前面的等式就变成了x(1 - x) = x - xx = x - x = 0,于是布尔很高兴这个代数系统满足了基本的哲学原则。

布尔的逻辑系统可以说是对莱布尼兹构想第一步的“简单粗暴”的实现,但问题也很明显。布尔代数的乘法和加法表示交集和并集,也就是说布尔代数只能表示“并且”和“或者”的逻辑关系。但至少还要有“如果那么”吧,该怎样表示呢?答案就是x(1 - y) = 0,即x为真,并且y也为真。但莱布尼兹所说的人类全部知识所需的表达方式要远多于此,最基本的量词在布尔代数里就无法表达。尽管如此,布尔却在用代数和符号表达人类知识和逻辑推理的道路上迈出了坚实的一步。

最早在《程序员的数学修养》一文里对编程和数学家的日常工作做过类比,数学证明的构建与程序异曲同工。之后在读《The Joy of X》时又重新思考了这一问题,觉得数学证明是数学家的日常,即纯数学,而程序员更接近应用数学或计算数学,证明只是用来对算法(程序)本身正确性的验证。但这一次《Engines of Logic》刷新了我的认知,本书完全模糊了逻辑证明与计算的界限。其实这是我们程序员每天都在做的事,将写好的带有一堆条件语句的程序编译,然后运行在只有基本算术运算功能的CPU上。这一切都太过自然,以至于我们从来没有思考过为什么我们能够这样做?逻辑推导与计算的区别是什么?

2.2 弗雷格:命题逻辑

2.3 图灵:通用图灵机

2.4 冯诺依曼:第一台通用计算机

我们都知道第一台计算机埃尼阿克(ENIAC),1946年诞生于美国宾夕法尼亚大学。但其实埃尼阿克的下一代EDVAC才是通用图灵机的第一个物理实现。从实用角度出发,EDVAC具有“一步”就能实现加减乘除的基本运算功能,这在原版图灵机是需要通过configuration构建起来的(具体参见《Annotated Turing》)。同时它还能够把数据和指令从内存读到CPU中,这也就是著名的冯诺依曼架构。


3.计算的能力

3.1 康托:无限

3.2 希尔伯特:这不是数学,这是神学!

3.3 哥德尔:亚里士多德后最伟大的逻辑学家。


4.超越莱布尼兹的梦

4.1 逻辑与计算

阅读本书时的最大疑问就是:逻辑推理与计算是如何成了一件事的?其实它们就像硬币的两面,将逻辑推理化简成形式规则最早可以追溯到亚里士多德的时代。作者用了英文里“reckon”估算、估摸这个词,说这个词巧妙地说明了逻辑与计算间的关系。比如我们根据去年的庄家产量去估算今年的,当我们带着各种数字去reckon时逻辑推理与计算就交织在了一起。

4.2 计算机与人脑

图灵机横空出世后,关于计算机是否可以取代人、计算的智能是否可以达到甚至超过人类的争论,直到今天也没有停止过。图灵在他的论文里“添油加醋”,不断地在两者间打着比方,而之后图灵又提出了著名的图灵测试。然而,争论并没有因为图灵测试而停下来。如果一个人不会下棋,在做图灵测试时被关到一个小屋里,给了他一本在各种情况下应该如何落子应对的书。最后他成功欺骗了人类对手,甚至赢了比赛,在这种情况下我们可以说他是有下棋的智能吗?后来的故事我们都知道,深蓝赢了国际象棋大师卡斯帕罗夫。

问题的关键在于什么是“知道”、“会”(know)。很多人会说深蓝知道的只是指令,只是一堆没有意义的符号,与国际象棋无关。可如果你能在卡斯帕罗夫下棋时深入到他的头骨,你同样看不到棋子,你看到的是神经元在活动。关于人脑是如何工作的研究还处于初级,但计算机是由我们工程师和程序员共同构建起来的,它的构造我们了如指掌。然而不管是人脑还是计算机,我们可以把人脑分子层面的模式分析想象成计算机的符号操作。可这种解释也无法让所有人满意,有人会争辩深蓝是没有意识的。什么是意识?我们又陷入了更深的思考和争论。


5.后续补充学习

《Engines of Logic》这本书可以很好地充当符号逻辑、计算理论等方面的学习主线,可单单凭这一本书就想对这一庞大而历史悠久的分支有深刻理解是不现实的。如果读完就扔下那是对这本书以及阅读后产生的短时知识记忆的浪费,所以在本文做过总结后,还要读更多的书才能深入了解。以前是目前手头已有的不错资料的整理:

  • 远古的两座大神:亚里士多德的逻辑,欧几里德的公理系统。
  • 莱布尼兹的微积分记法
  • 哥德尔的证明
    • 《Gödel’s Proof》
    • 《Gödel, Escher, Bach: An Eternal Golden Braid》:旷世神书集异壁
  • 图灵机的深入研究
    • 《Annotated Turing》:目前在读,前面几章背景知识介绍就已足够惊艳,全书既有广度又有深度。
  • 香农的信息论
    • 《Code: The Hidden Language of Computer Hardware and Software》:跟《Annotated Turing》是一个作者,本书声望更高。
    • 《A Mind at Play: How Claude Shannon Invented the Information Age》
文章最后发布于: 2019-07-20 13:14:19
展开阅读全文
0 个人打赏
私信求帮助

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览