亚里士多德是如何发明计算机的

造就 2017-04-06 10:06 阅读:189
摘要:那些受亚里士多德影响的哲学家,为重塑了整个世界的计算机技术革命搭建了舞台。

计算机的历史经常被描述为实物的历史,从算盘,到巴贝奇差分机,再到二战期间的密码破译机。

事实上,我们更应将其理解为思想的历史,而且主要是源于数理逻辑的思想——数理逻辑是一门晦涩艰深、迹近邪教的学科,最初诞生于19世纪。

数理逻辑的先驱是一些哲学倾向浓厚的数学家,其中最著名的当属乔治·布尔(George Boole)和戈特洛布·弗雷格(Gottlob Frege),而启发他们的,是莱布尼茨的通用“概念语言”以及亚里士多德的古老逻辑系统。

最开始,数理逻辑被认为是一门极度抽象的学文,不会有什么实际应用。

正如一位计算机科学家所言:“在1901年那个时候,如果有一位局外人受命调研诸门科学,并找出在未来百年内,其应用成果最少的一门学科,答案很可能就是数理逻辑。”

然而,数理逻辑将为一个领域奠定基础,而这个领域对现代世界产生的影响将超过其他任何领域。

数理逻辑对计算机科学的推动在20世纪30年代达到高潮,当时,有两篇具有里程碑意义的论文问世:克劳德·香农(Claude Shannon)的《继电器与开关电路的符号分析》,以及艾伦·图灵(Alan Turing)的《论可计算数及其在判定问题上的应用》。在计算机科学的发展史中,香农和图灵是令人高山仰止的人物。但是,他们之前的哲学家和逻辑学家,其重要性却常常被忽视。

“数学或许可以被定义为我们永远不知道自己在谈论什么,也不知道我们说得对不对的一门学科。”

在许多方面,香农的论文都是一篇典型的电子工程专业论文,其中满是方程式和电路图。但这篇论文的特别之处在于,其主要参考文献是一部拥有90年历史的数学哲学著作——乔治·布尔的《思维规律》(The Laws of Thought)。

如今,在计算机科学家中,布尔的大名可谓如雷贯耳。但1938年那会儿,在哲学界之外,他的著作几乎鲜有人知。香农是在本科阶段的一门哲学课上读到布尔著作的。“碰巧的是,没有其他人同时熟知这两个领域。”他后来曾说。

布尔经常被说成是数学家,但他自视为哲学家,是亚里士多德的门徒。 布尔在《思维规律》的开篇阐明了自己的目标,就是要探究人类思维的基本规律。

接着,布尔致敬了对其著作产生重大影响的亚里士多德——逻辑学的开山鼻祖。

试图改进亚里士多德的逻辑学,这堪称一个大胆之举。亚里士多德的逻辑学在两千多年的学术原则中占据着核心位置。人们普遍认为,亚里士多德的逻辑学已经十分完备。哲学家康德曾评论说,既然亚里士多德的逻辑学一直“未能再更进一步,因此从各个方面来看,它已经是完整和完备的了。”

亚里士多德的核心发现是,论证是否有效,是基于其逻辑结构,与所涉及的非逻辑性词汇无关。他提出的最著名的论证模式被称为三段论:

所有人必有一死。

苏格拉底是人。

因此,苏格拉底必有一死。

我们可以用其他任何对象替换这里的“苏格拉底”,用其他任何谓语替换“必有一死”,而最终的论证仍将成立。论证的有效性只是由逻辑结构所决定,逻辑词汇——“所有”、“是”、“因此”——构成了这个结构。

此外,亚里士多德还定义了一组基本公理,并据此推导出其逻辑系统中的其余部分:

A是A(同一律)

A不是非A,或A不能既是B又不是B(无矛盾律)

A是B或不是B(排中律)

这些公理并不是为了描述人类实际的思维方式(那属于心理学范畴),而在于描述一个理想化的、绝对理性的人所应具备的思维方式。

亚里士多德的公理化方法影响了一部更为有名的著作:欧几里得的《几何原本》(Elements)。有人估计,它是印刷数量仅次于《圣经》的书籍。

《几何原本》的残页

虽然表面上讲的是几何学,但《几何原本》却成为了教授严谨演绎式推理的教科书。

亚伯拉罕·林肯曾说,他通过研究欧几里得,学会了有效的法律辩论方法。

在欧几里得的体系中,几何命题一直以空间图的形式呈现。直到17世纪30年代,笛卡尔向世人展示,几何还可以用公式来表示,这才取代《几何原本》长达两千年的“统治”。

笛卡尔的《方法论》是西方第一本普及代数符号的数学著作。如今,这些代数符号已经成为标准,比如用x、y、z代表变量,用a、b、c代表已知量,诸如此类。

笛卡尔的代数学让数学家得以超越空间感,通过精确定义的形式规则来使用符号。这让数学研究的主导模式从图表转向了公式,并由此产生了一系列影响,其中之一,就是促进了微积分学的发展——在笛卡尔去世大约30年后,牛顿和莱布尼茨分别独立发明了微积分。

布尔想对亚里士多德逻辑学所做的事,正如笛卡尔对欧几里得几何学所做的改变:把逻辑学从人类直觉的限制中解放出来,办法就是赋予其一个精确的代数符号。举个简单的例子,当亚里士多德写出:

所有人必有一死。

布尔用变量替代“人”和“必有一死”,用算术运算符来替代逻辑词“所有”:

x = x * y

这个等式可以被解读为,“所有在集合x中的对象同样在集合y之中。”

《思维规律》创造了数理逻辑这一全新的学术领域,在随后的岁月里,它成为了数学家和哲学家研究最为活跃的领域之一。

香农的独到见解在于,他认为布尔的数理逻辑可以直接应用到电路中。当时,还没有一套系统理论来统领电路的设计。香农意识到,正确的理论应该是“对逻辑学符号研究所使用的命题演算的精确模拟。”

他在一张简单的图表中展示了电路与布尔运算之间的对应关系:

香农将数理逻辑应用到电路中

这种对应关系为计算机科学家提供了基础,让他们得以运用布尔等逻辑学家数十年间在逻辑学和数学领域所取得的研究成果。在论文的后半部分,香农演示了如何利用布尔逻辑来开发一个可以进行二进制数字加法运算的电路。

香农的加法器电路

把这些加法器电路串联在一起,就可以实现任何一种复杂的算术运算。作为基本模块,这些电路构成了所谓的算术逻辑单元,后者是现代计算机的关键部件。

香农的另一大成就在于,他是区分计算机逻辑层和物理层的第一人。这种区分对计算机科学来说十分重要,以至于现代读者可能无法理解它在当时是何等富有洞见——这倒使我们想到了那句谚语,“一个世纪的哲学是下一个世纪的常识。”

香农的论文发表后,研究人员在计算机的物理层方面取得了长足进步,其中包括贝尔实验室的威廉·肖克利(William Shockley)及其同事在1947年发明了晶体管。晶体管可谓香农继电器的大幅改进版,也是在物理层进行布尔运算编码的最著名方式。在之后的70年里,半导体行业在越来越小的空间中集成了越来越多的晶体管。2016年款的iPhone拥有约33亿个晶体管,每一个都相当于香农在论文中描述的“继电器开关”。

香农向世人展示了如何将逻辑学运用到物理世界,而图灵则揭示了如何用数理逻辑的语言来设计计算机。

当图灵在1936年撰写论文时,他试图解决的是“判定问题”。该问题由数学家大卫·希尔伯特(David Hilbert)首次提出,他想知道,是否存在一种算法,可以判定任意数学命题的真伪。与香农的论文不同,图灵的论文具有很强的技术性,其主要价值不在于它对判定问题给出了答案,而是在此过程中,它为计算机设计提供了模板。

图灵所属学派的渊源可以追溯到莱布尼茨,即那位独立发明了微积分的哲学巨擘。在莱布尼茨对现代思维做出的诸多贡献中,最新奇的想法之一就是他提出的“通用语言”概念。按照他的设想,这种语言能够表示所有可能的数学和科学知识;它是一种类似于古埃及象形文字的表意字符,只不过这些字符对应的是数学和科学的“原子”概念。莱布尼茨认为,这种语言将“大大增强”人类的推理能力,作用将远超显微镜、望远镜等光学仪器。

莱布尼茨还设想了一种能够处理这种语言的机器,他称之为“推理演算机”。

不过,莱布尼茨未能有机会发明他的通用语言,也没能设计出这种机器。直到1879年,莱布尼茨的这一梦想第一次有望成为现实。当时,德国哲学家戈特洛布·弗雷格出版了具有里程碑意义的逻辑学著作《概念文字》(Begriffsschrift)。在布尔尝试改进亚里士多德逻辑学的启发下,弗雷格发明了一种更加先进的逻辑系统。如今,哲学和计算机课堂上教授的逻辑学——一阶逻辑或谓词逻辑——只是对弗雷格的系统稍作了修改。

弗雷格逻辑学的主要创新在于,它更准确地反映了日常语言的逻辑结构。此外,弗雷格还率先使用了数量词,并头一次把宾语从谓语中分离出来。他还是如今计算机科学中一些基本概念的提出者,比如递归函数。

弗雷格的形式语言——他称之为“概念脚本”——由无意义的符号组成,这些符号则由定义明确的规则操控。语言只由解释来赋予意义,而解释是单独指定的。用杰出计算机科学家艾伦·纽厄尔(Allan Newell)和赫伯特·西蒙(Herbert Simon)的话来说,这让逻辑学演变成了“符号游戏”,一场“使用无意义的符号、基于特定纯粹句法规则来进行的游戏。”

正如哲学家罗素那句诙谐的名言:“数学或许可以被定义为我们永远不知道自己在谈论什么,也不知道我们说得对不对的一门学科。”

也许没有人料到,弗雷格的研究工作竟带来了一个意外后果:人们发现了数学基础中的漏洞。例如,事实证明,数千年来被奉为逻辑严密性黄金标准的《几何原本》竟然充满了逻辑错误。由于欧几里得使用了“直线”和“点”这样的普通词语,因此在面对含有这两个词的语句中, 他(以及数千年来的读者)诱使自己做出了想当然的假设。举一个相对简单的例子,在普通用法中,“直线”这个词表示,如果三个不同的点位于一条“直线”上,那么其中一点必在另外两点之间。但是,当你使用形式逻辑来定义“直线”时,“之间”这个概念也需要加以界定,而欧几里得恰恰忽视了这一点。一旦运用形式逻辑,这样的缺漏很容易被发现。

于是,这就引发了数学基础的危机。如果作为数学圣经的《几何原本》出现了逻辑错误,那么其他数学领域有没有呢?那些建立在数学基础上的学科,比如物理,又怎样呢?

好消息是,用于发现这些错误的逻辑方法,同样也能用来纠正它们。数学家开始全面重建数学的基础:1889年,朱塞佩·皮亚诺(Giuseppe Peano)提出了算术公理;1899年,希尔伯特提出了几何学公理。此外,希尔伯特还提出了一个计划,试图将数学的其余部分形式化,并列出了形式化所应满足的具体要求,包括:

完备性。我们必须证明以下命题:在形式化之后,数学里所有的真命题都可以被证明。

确定性。应该有一个算法,来确定每一个形式化的命题是真命题还是假命题。(这其实就是图灵论文中提到的“判定问题”。)

所谓希尔伯特计划,就是通过满足这些要求,来重建数学学科。直到20世纪30年代,这一直是一群逻辑学家的研究重点,其中包括希尔伯特、罗素、库尔特·哥德尔(Kurt Gödel)、约翰·冯·诺依曼(John Von Neumann)、阿隆佐·邱奇(Alonzo Church),当然,还有图灵。

“在科学中,新事物只伴随困难出现。”

希尔伯特计划至少在两条线上得到推进。在第一条线上,逻辑学家构建出逻辑系统,以证明希尔伯特的要求是否可满足。

在第二条线上,数学家使用逻辑概念来重建经典数学。

历史学家托马斯·库恩(Thomas Kuhn)曾说:“在科学中,新事物只伴随困难出现。”在“希尔伯特计划”实施的那个年代,逻辑学处于不断创造与毁灭的动荡之中。一位逻辑学家建立了复杂的系统后,另一位逻辑学家可能会将之摧毁。

毁灭者青睐的利器是自我指涉的构建,即自相矛盾的陈述,表明它所依据的公理本身就存在矛盾。这种“说谎者悖论”的简单形式如下:

这个语句为假。

如果“这个语句为假”为真,那么这个语句为假;如果“这个语句为假”为假,那么这个语句为真,这就形成了自我矛盾的无限循环。

在数理逻辑领域,罗素头一次对“说谎者悖论”做出了重要运用。他指出,弗雷格的系统允许得出自相矛盾的集合:

设集合R由一切不属于自身的集合组成。如果R不是自身的元素,那么其定义决定了它必须包含自身;如果R是自身的元素,那么它就违背了自己的定义,即由一切不属于自身的集合组成。

这被称为罗素悖论,它被视为弗雷格系统的一个严重缺陷。

罗素和同事阿尔弗雷德·诺思·怀特黑德(Alfred North Whitehead)在1910年至1913年间发表了三卷本的《数学原理》(Principia Mathematica),这是为完成希尔伯特计划而进行的最为雄心勃勃的尝试。书中使用的方法是如此复杂,以至于光是为了证明1+1=2,就用去了300页的篇幅。

罗素和怀特黑德试图通过所谓的“类型论”去解决弗雷格系统的悖论。他们把形式语言划分为多个层级或类型,每个层级都可以指涉下一个层级,但不能指涉自身或更高的层级。实际上,类型论就是通过禁止自我指涉来解决自我指涉的悖论。这套解决方案在逻辑学家之中的接纳度并不高,但它却对计算机科学产生了影响——大多数现代计算机语言中,都拥有受类型论启发的特性。

自我指涉的悖论最终表明,希尔伯特计划永远无法成功。第一个打击出现在1931年,当时哥德尔提出了著名的不完备性定理。该定理证明,任何相容的逻辑系统,只要强大到足以蕴含算术公理,其体系中就必然包含不能被证明的真命题。

摧毁希尔伯特计划的最后一击是,图灵和邱奇分别证明,可以判定任意数学命题真伪性的算法是不存在的。(邱奇通过设计全新的λ演算系统,完成了自己的证明,该系统之后启发了包括Lisp在内的计算机语言。)至此,判定问题的答案是“否”。

在1936年那篇著名论文《论可计算数及其在判定问题上的应用》当中,图灵的主要观点是在第一部分提出的。为了严格地用公式来表示判定问题,图灵先是构建了一个日后将演化为计算机的数学模型。如今,符合这个模型的机器被称为“通用图灵机”。

接着,图灵演示了程序以及数据是如何存储在计算机之内的。如果使用如今的词汇,我们会说,他发明了为大多数现代计算机提供支撑的“存储程序”结构。

在图灵之前,一般的假设是,当使用这类机器时,机器、程序和数据这三个分类是相互完全独立的实体。机器是一个物理实体,如今我们称之为硬件;程序是指完成一次运算,要么通过打孔卡实现,要么通过插板上相互连接的电缆完成。最后,数据则是数值输入。而通用图灵机告诉我们,这三个分类之间的区别是一种错觉。

图灵第一个证明,任何可以编码到硬件中的计算逻辑也可以编入软件代码中。后来,图灵描述的这种结构被称为“冯·诺伊曼结构”,不过,近代史学家普遍认为它来源于图灵。

虽然从技术层面上说,希尔伯特计划失败了,但证伪过程表明,大规模的数学研究可以从逻辑学中构建。在香农和图灵提出了开创性的观点后——这些观点揭示了电路、逻辑和计算之间的联系——研究人员已经有可能把这种新的概念机应用于计算机设计。

第二次世界大战期间,这一理论被付诸实践。当时,政府实验室征召了一批逻辑学精英,冯·诺依曼加入了在美国洛斯阿拉莫斯实施的原子弹计划,在那里研究计算机设计,为物理学提供支持。1945年,冯·诺依曼写出了EDVAC的设计规范,EDVAC是有史以来第一台以逻辑为基础的存储程序计算机。人们普遍认为,EDVAC为现代计算机的设计奠定了基础。

另一方面,图灵则加入了英国布莱切利园的一个秘密单位,他在那里参与设计的计算机成功破解了德军密码。图灵对实用计算机设计最为持久的贡献是确立了ACE(自动计算引擎)规范。

作为第一台基于布尔逻辑和存储程序结构的计算机,ACE与EDVAC有着很多相似性。但它们也存在一些有趣的差异,其中一些差异导致了对不同计算机设计思路的争辩。冯·诺依曼钟意的设计类似于现代的CISC处理器,它把丰富的功能集成到了硬件当中;而图灵的方案更像是现代的RISC处理器,它追求最大限度地降低硬件复杂性,把更多的工作分派给软件。

冯·诺依曼认为,计算机编程将是一项乏味的文员性工作。图灵则说,计算机编程“应该充满乐趣,它不会变得单调乏味,因为那些机械性的工作或许可以交给机器本身来完成。”

自20世纪40年代以来,计算机编程的复杂性已经显著提高,但有一件事依然没有改变:计算机仍然需要程序员来制定规则。若是使用哲学术语,我们会说,计算机编程遵循的是演绎逻辑的传统——演绎逻辑研究的是如何依照形式规则来操控符号。

过去十多年里,随着机器学习的发展——例如为机器创建框架,使其通过统计推导来学习——计算机编程已开始发生变化。这让编程变得更加贴近于逻辑学的另一个分支,即归纳逻辑,它研究的是通过具体实例来推导规则。

如今最具潜力的机器学习技术使用了神经网络,而神经网络是上世纪40年代发明的。发明者当时想为神经元开发一种微积分学,使其能够像布尔逻辑一样,用来构建计算机电路。神经网络在数十年时间里一直默默无名,直到它们与统计技术结合。在统计技术的帮助下,它们可以馈入更多数据,从而获得改进。近年来,随着计算机处理大数据集的能力越来越强,这些技术已经带来了令人惊叹的成果。未来,编程可能意味着,把世界展示在神经网络前,让神经网络自己去学习。

这也许将成为计算机发展史的第二幕。一开始,逻辑学是作为一种理解思维规律的方式;之后,它帮助创建了可以依照演绎逻辑进行推理的机器;如今,演绎逻辑和归纳逻辑正在融合,创造出既可以推理又可以学习的机器。从最初布尔所说的“为探究人类思维的本质与构造”,到如今,现代计算机的发展,有朝一日,我们或许会创造出一种新的思维,一种能够媲美甚至超越自身的人工思维。

翻译:何无鱼

来源:The Atlantic

造就:剧院式的线下演讲平台,发现最有创造力的思想

版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。
阅读量: 189