搜索

亚里士多德如何创造了计算机? | 投资人说

boxi · 2017-03-27
用布尔的话来说,始于调查“人类思维的本质和构成”的努力,可以导致人工思维的诞生。

编者注:计算机的历史不到百年,但是计算机理论基础的奠定却用了数千年。正是在古希腊先哲亚里士多德的影响下,后世的其他哲学家才为重塑我们世界的技术革命奠定了基础。而这些人对计算机的影响远没有香农和图灵那样为人所熟知,著名风投家、A16Z的合伙人Chris Dixon用逻辑清晰易懂的语言,从思想史的角度给我们上了一堂生动的计算机简史课,更重要的是,通过回顾这场既简短又漫长的计算机科学发展史,随着机器学习的兴起,Dixon指出计算机编程现在正从演绎逻辑转变到另一个主要的逻辑分支:归纳逻辑。

计算机史往往是从实物史的角度进行讲述,先是算盘,然后是巴贝奇差分机,再到二战时的密码分析机。实际上,把它理解为想法史会更好,那些想法主要诞生自数理逻辑,这是一门形成于19世纪,晦涩难懂、像邪教一样的学科。数理逻辑的先驱是身兼哲学家与数学家双重角色的人,其中最著名的是George Boole(乔治·布尔)和Gottlob Frege(戈特利布·弗雷格),而他们又受到莱布尼茨通用的“概念语言”这一梦想以及亚里士多德古代逻辑体系的启发。

数理逻辑一开始被认为是一门抽象到令人绝望的学科,并没有应用的可能。有一位计算机科学家是这么说的:“如果在1901年,一位有才且敏锐的局外人被要求接受科学调查,指出哪一个学科分支在下一世纪最不可能结出硕果的话,他的选择很有可能就会是数理逻辑。”尽管如此,但一个比任何其他领域对现代世界的影响都要大的领域,其基础是由数理逻辑来奠定的。

以两篇标志性的论文为标志,发端于数理逻辑的计算机科学革命在1930年代达到了顶峰:一篇是克劳德·香农的《继电器与开关电路的符号分析》,另一篇是阿兰·图灵的《论数字计算在决断难题中的应用》。在计算机科学史上,香农与图灵是两位杰出的人物,但是他们之前的哲学家和逻辑学家的重要性却经常为人所忽视。

众所周知的计算机科学史把香农的论文描述为“可能是是本世纪最重要,也是最著名的硕士论文。”香农是在MIT攻读电子工程学位的时候写下这篇论文的。它的导师,Vannevar Bush,开发了一款名为微分分析机的计算机原型,这个机器可以快速计算微分方程。设备几乎是机械式的,子系统由继电器来控制,采用临时的方式加以组织,因为当时还没有系统性的理论来支撑电路设计。香农的论文主题是在Bush寻找此类理论的建议下提出的。

数学可以定义为我们永远不知道自己在说什么的一门学科。

从很多意义上说,香农的论文是典型的电子工程论文,里面充斥着方程式以及电子电路图。不同寻常的是它主要参考的是已有90年历史的数学哲学,George Boole(布尔)的《思维的定律》。

今天,布尔的名字已经为计算机科学家所熟知(很多编程语言都有布尔型这一基本的数据类型),但在1938年的时候,在哲学系以外的地方他的作品鲜为人知。香农本人是在上一门本科哲学课时偶然接触到布尔的作品的。他后来评论说:“当时刚好没有其他人同时熟悉这两个领域。”

布尔往往被描述成是数学家,但他自认为是哲学家,效法的是亚里士多德。《思维的定律》以描述他的目标作为开始,也就是要探究人类思维运作的基本定律:

后续论述的目的,是要探究进行推理的思维运作的基本定律,以微积分符号语言的形式表示出来,并在此基础上建立逻辑学……以及最终搜集……一些有关人类思维的本质和构成的启示。

然后他开始称赞逻辑的发明者亚里士多德, 以及他自己工作的主要影响:

古代形式和学术形式的逻辑学几乎都仅跟跟大名鼎鼎的亚里士多德有关。在古希腊的那本部分技术、部分形而上学的专题论述《工具论》中呈现的这一学科,延续至今几乎没有任何变化。

试图改进亚里士多德的逻辑性工作从理性上来说是一项大胆的举动。在分为6册的《工具论》中论述的亚里士多德逻辑学,占据学术经典的中心位置超过了2000年。大家普遍认为亚里士多德几乎已经把这个主题所有能写的东西都写出来了。伟大的哲学家康德评论道,自亚里士多德以来,逻辑一直“都无法前进一步,因此显然已经是完备的了。”

亚里士多德的核心观察是,论断的正确与否取决于其逻辑结构,独立于所包含的非逻辑性词语。他讨论的最著名的论辩图式是所谓的三段论:

  • 所有人都是必死的。

  • 苏格拉底是人。

  • 苏格拉底是必死的。

你可以把“苏格拉底”替换成任何对象,“必死”也可以替换成任何断言,但该论断依然正确。这一论断的正确性主要取决于逻辑结构。逻辑词——“所有”、“是”,以及“因此”就已经把所有的工作做完了。

亚里士多德还根据他对自身逻辑体系的其他部分的推断定义了一组基本公理:

  • 任何对象均与自身等同(同一律)

  • 任一命题不能既真又不真(矛盾律或无矛盾律)

  • 一个命题要么是真的要么是假的(排中律)

这些公理不是为了描述大家实际上是如何思考的(这属于心理学的范畴),而是描述一个理想化的、完全理性的人应该是怎么思考的。

亚里士多德的公理化方法影响了另一本甚至更加出名的书籍,据估计出版次数仅次于《圣经》的欧几里得的《几何原本》。


《几何原本》的片段

虽然《几何原本》表面上讲的是几何,但它却成为了教学严格演绎推理的标准教科书。(林肯曾经说过,他是通过学习几何原本来学会进行可靠的法律论证的。)在欧几里得的体系当中,几何学想法是以空间图的形式呈现的。几何学一直都沿用这种做法,直到1630年代,笛卡尔证明了几何也可以用方程式的形式展现。他的《方法论》是西方首次普及现在已成为标准的代数标记法(x、y、z代指变量,a、b、c代指常量)的数学文本。

笛卡尔的代数使得数学超越了空间直觉,可以用精确定义的形式规则来操纵符号。这使得数学的主导模式从图形转变成了方程式,从而导致了微积分等事物的发展,后者是在笛卡尔之后约30年左右分别由牛顿和莱布尼茨发明出来的。

布尔的目标是像笛卡尔为欧几里得的几何所做的事情那样替亚里士多德的逻辑做一件事情:将它从人类直觉的限制中解放出来,赋予它一个精确的代数符号。我们来举个简单的例子,当亚里士多德写到:

所有人都是必死的。

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

x = x * y

这可以解析为“x集的一切均处于y集当中。”

《思维的定律》创立了一个新的学术领域——数理逻辑,这门学科后来几年成为了数学家和哲学家最活跃的研究领域之一。罗素把《思维的定律》称为是“发现了纯粹数学的作品。”

香农对布尔体系的洞察可以直接映射到电子电路上。那时候,电子电路的设计并没有系统性的理论支持。香农意识到合适的理论“正好类似用于逻辑的符号研究的命题演算。”

他还用一张简单的图表来说明电子电路于布尔运算的一致性:

香农从电子电路到符号逻辑的映射(弗吉尼亚大学)

这种一致性使得计算机科学家将布尔以及后学逻辑学家数十年在逻辑与数学方面的工作导入进来。香农在那篇论文的下半部分里还展示了布尔逻辑如何可以为两个二进位的相加创建电路。

香农的加法电路(弗吉尼亚大学)

通过将这些相加电路连在一起,可以构造出任意复杂度的算术运算。这些电路将成为所谓的算术逻辑单元的基本构建块,而后者正是现代计算机的关键部件。

香农的成就还可以换一种方式描述,那就是他是第一个区分了计算机的逻辑层和物理层的人。(这种区分对于计算机科学实在是太重要了,以至于今天的读者对于它这种见解在当时的深刻性会感到惊讶——这不禁会让人想起那句格言“上一世纪的哲学是下一世纪的常识。”)

自从香农的论文之后,计算机在物理层取得了巨大进展,其中包括1947年William Shockley和他在贝尔实验室的同事发明的晶体管。晶体管是香农继电器的极大改进版——是已知的对布尔操作进行编码的最好方式。此后的70年时间里,半导体行业把越来越多的晶体管塞进了越来越小的空间内。一台2016年的iPhone大概有33亿个晶体管,它们每一个都是像香农的图解里面的“继电器开关”。

香农展示了如何将逻辑映射到物理世界,图灵则展示了如何以数理逻辑的语言去设计计算机。当图灵在1936年写出它的论文时,他试图解决的是“决策问题”,这个问题首先由大卫·希尔伯特提出,他问有没有一种算法可以决定任意数学判断的真伪。跟香农的论文相比,图灵的论文是高度技术性的。其主要的历史意义并不在于对决策问题的回答,而在于在解决问题的过程中提供了一个计算机设计的模板。

图灵攻关的是一项要追溯到独立于牛顿发明微积分的哲学伟人莱布尼茨的传统。在莱布尼茨对现代思想的众多贡献里,其中最吸引人之一是被他称为是“普遍特征”的新语言的想法,他设想的这门语言应该可以表示所有可能的数学和科学知识。其灵感部分源自于13世纪的宗教哲学家Ramon Llull,莱布尼茨设想这种语言应该是想埃及的象形文字那样的表意文字,只是它的字符相当于数学和科学的“原子”概念。他提出,这门语言将赋予人类一种“工具”这种工具可极大地增强人类的推理,远比像显微镜和天文望远镜那样的光学仪器要强得多。

他还设想有一种机器能处理这门语言,他把这种机器称为推理演算器。

如果出现争议的话,就像两位会计之间不需要有争议一样,两位哲学家之间也将不再需要争论。因为他们只需要拿出手中的笔,然后相互说一声:Calculemus——我们来算一算吧。

莱布尼茨并没有机会发展他的通用语言或者相应的机器(尽管他的确发明了一种相对简单的计算机器,步进计算器)。实现莱布尼茨梦想的第一次可靠尝试发生在1879年,当时的德国哲学家弗雷格发表了标志性的逻辑论著《概念文字》。受到布尔试图改进亚里士多德的逻辑学的启发,弗雷格开发了一套先进得多的逻辑体系。今天哲学和计算机科学课上教的逻辑学,也就是一阶逻辑或者谓词逻辑,只不过是弗雷格体系的略微改变罢了。

弗雷格被普遍认为是19世纪最重要的哲学家之一。除了其他方面的成就以外,他还促进了著名哲学家Richard Rorty所谓的哲学的“语言学转向”。正如启蒙哲学痴迷于知识的问题,弗雷格之后的哲学痴迷于语言的问题。他的门徒包括了20世纪的两位最重要的哲学家——罗素和维特根斯坦。

弗雷格逻辑学的主要创新是以精确得多的方式表示了普通语言的逻辑结构。弗雷格还是第一个使用量词以及将对象与谓词分开的人。他还是第一个定义了递归函数以及带范围和绑定的变量等今天计算机科学的基础概念的人。

弗雷格的形式语言,也就是他所谓的“概念脚本(concept-script)”由无意义的符号组成,而这些符号由明确定义的规则操纵。语言仅由一个解释赋予含义,而后者是单独指定的(这一区分后来被称为语法与语义之别)。这就把逻辑变成了杰出计算机科学家Allan Newell和Herbert Simon所谓的“符号游戏”,“根据纯粹的语法规则摆弄无意义的令牌。”

所有意义均已被净化。这样就有了一个各种事情均可被证实的机械系统。于是我们通过绕开所有那些似乎与含义及人类符号有关的东西而首先取得进展。

正如罗素著名的讽刺所说那样:“数学是我们永远不知道我们在说什么,也不知道我们说的是否对的一门学科。”

弗雷格的工作的一个意想不到的后果是发现了数学基础的弱点。比方说,数千年来被认为是逻辑严密性金科玉律的欧几里得《几何原本》原来在逻辑方面却是错漏百出。因为欧几里得使用了像“线”和“点”这样的普通词语,所以他以及诸世纪以来的读者都受到了欺骗,对包含这些字词的句子做出假设。我们可以举个相对简单的例子,在日常使用中,“线”这个词隐含的意思是如果给出一条线上的3个不同的点,其中一点必位于另两点之间。但是当你用形式逻辑定义“线”时,结果连“之间”也需要进行定义——而这个是欧几里得所忽视的。形式逻辑使得类似的缺口很容易就能被识别出来。

这种实现给数学基础制造了一次危机。如果《几何原本》这本数学的圣经包含有逻辑错误的话,其他数学领域是不是也有呢?物理等其他建构在数学基础上的科学又该怎么办?

好消息是用于发现这些错误的相同逻辑方法也可以用来修正它们。数学家开始自底向上重建数学基础。1889年,Giuseppe Peano(朱塞佩·皮亚诺)提出了算术的公理,1899年,希尔伯特对几何做了同样的事情。希尔伯特还提出了一个将数学的其他部分一并进行形式化的计划,并指出任何此类尝试都应该满足以下需求:

  • 完整性:应该能证明所有真的数学论述可以在形式化系统里面加以证明。

  • 可判定性:应该有一个算法来确定任何数学判断的真伪。(这就是图灵论文里面提到的“可判定性问题”或者“决策问题”。)

以满足这些需求的方式来重建数学就成为了所谓的希尔伯特计划。直到1930年代,这都是包括希尔伯特、罗素、库尔特·哥德尔、冯·诺依曼、阿隆佐·邱奇以及阿兰·图灵在内的一群逻辑学家的主要关注点。

科学的新颖性只有在困难中凸显。

希尔伯特的计划至少在两个方面取得了进展。第一个方面是逻辑学家创造了一套逻辑体系,试图证明希尔伯特的需求是否可满足。

第二个方面,数学家利用逻辑概念重建了经典数学。比方说,皮亚诺的算术系统从一个叫做后继函数的简单函数开始,可以对任何数字加一。他利用后继函数来递归定义加法,再用加法来递归定义乘法等等,直到所有数论的操作都已定义完毕。然后他再利用这些定义再加上形式逻辑来证明算术方面的定理。

历史学家托马斯·库恩曾经观察到“在科学当中,新颖性只会在困难中凸显。”希尔伯特计划时代的逻辑是一个充满着创造和毁灭的动荡过程。一位逻辑学家刚刚建好了一套精心阐述的体系,另一位就会让它土崩瓦解。

从公理推导出的自指的、自相矛盾的陈述是深受喜爱的破坏工具。下面这句话就是这种“说谎者悖论”的简单形式:

这个句子是假的。

如果这个句子为真,则它就是假的,如果这个句子是假的,则它就是真的,从而导致了没完没了的自相矛盾。

罗素是第一个在数理逻辑中运用说谎者悖论的名人。弗雷格的体系可以推导出自相矛盾的集合:

设集合R是由一切不属于自身的集合所组成,如果R不是本身的一个成员,那么其定义表明它必须包含自身,如果它包含自身,那么它就与自己的定义矛盾,因为它由所有不是自身成员的集合组成。

或者可以用理发师悖论来理解:

在某个城市中有一位理发师,他的广告词是这样写的:“本人的理发技艺十分高超,誉满全城。我将为本城所有不给自己刮脸的人刮脸,我也只给这些人刮脸。我对各位表示热诚欢迎!”来找他刮脸的人络绎不绝,自然都是那些不给自己刮脸的人。可是,有一天,这位理发师从镜子里看见自己的胡子长了,他本能地抓起了剃刀,你们看他能不能给他自己刮脸呢?如果他不给自己刮脸,他就属于“不给自己刮脸的人”,他就要给自己刮脸,而如果他给自己刮脸呢?他又属于“给自己刮脸的人”,他就不该给自己刮脸。

这就是著名的罗素悖论。罗素悖论的提出被视为弗雷格成就的严重瑕疵(弗雷格本人对这一发现感到震惊。他在给罗素的回信中写道:“你对这一矛盾的发现给了我最大的惊讶,我甚至要说是惊愕,因为它已经动摇了我打算要搭建的算术的基础”)。

罗素与他的同事Alfred North Whitehead(怀特黑德)以《数学原理》这部著作进行了完成希尔伯特计划最雄心勃勃的一次尝试,1910年到1913年间,这部著作分三卷完成了出版。《数学原理》的方法实在是太详细了,以至于证明1+1=2就用了足足300页的篇幅。

罗素和怀特福德试图通过引入他们所谓的型式理论(type theory,类型理论)来解决弗雷格悖论问题。其想法是把形式语言区分为多个级别或者类型。每一个级别都可以引用以下的级别,但不能引用自身或者更高级别。通过禁止自我指涉,这就解决了自指的悖论。(这一解决方案在逻辑学家当中并不流行,但是却影响了计算机科学——大多数现代计算机语言都有受到类型理论启发的功能。)

自我指认悖论最终表明,希尔伯特的计划永远也无法取得成功。第一个打击出现在1931年,哥德尔发表来现在已经非常著名的不完全性定理,证明了任何足够强大可包含算术在内的一致性逻辑体系都必须包含有自身为真但不能证明为真的陈述。(其实就是一致性与完备性不可得兼。得益于《皇帝新脑(Gödel, Escher, Bach and The Emperor’s New Mind)》这类的书,哥德尔的不完全性定律是少数得到广泛普及的逻辑结果之一。)

最后一次打击是图灵和阿隆佐·邱奇分别证明了没有算法能够确定任意数学陈述是真还是假。(邱奇是通过发明了一套完全不同的系统来证明的,这套系统叫做λ演算,给后来计算机语言Lisp的诞生带来了灵感。)对决策问题的回答是否定的。

图灵的关键洞察来自那篇著名论文《论数字计算在决断难题中的应用》的第一段。为了对决策问题进行严格的公式化,图灵首先创建了一个说明什么才是计算机的数学模型(今天,符合这一模型的机器具备称为“通用图灵机”。)如逻辑学家Martin Davis所述:

图灵知道,就像烹饪书的食谱那样,一个算法往往是用一系列可按照精确的机械化方式所遵循的规则来说明的。他证明了仅用少数极其简单的基本动作即可做到而不会改变计算的最终结果。

然后,通过证明利用弗雷格规则没有机器可以仅靠执行那些基本动作来确定给定结论是否遵循给定前提,他得出结论说解决决策问题的算法是不存在的。

作为副产品,他还发现了一个通用计算机器的数学模型。

接着,图灵说明了程序以及所操作的数据如何可以存放在计算机里面。按照今天的说法,我们可以说他发明了作为大多数现代计算机基础的“存储程序”架构:

在图灵之前,一般的假设是,在处理此类机器时,机器、程序和数据这三类东西完全是分离的实体。机器是个物理实体,在今天我梦会称之为硬件。程序是执行计算的计划,也许是以穿孔卡片或者插接板的电缆连接的方式体现。最后,数据是数字化输入。图灵的通用机器表明,这三者的区分是个幻觉。

任何可编码进硬件的计算逻辑也能编码进软件里面,图灵是第一个对此做出严格证明的人。图灵描述的结构后来被称为“冯诺依曼结构”——但是现代历史学家一般都认为这出自图灵,因为诺依曼本人显然也这么认为。

不过,就技术层面而言,希尔伯特的计划,也就是证明众多的数学运算可通过逻辑构造出来的努力却是个失败。而在香农和图灵发现点子、逻辑与计算的关联之后,现在已经有可能把这种新的概念性机器导出到计算机设计里面。

在二战期间,当政府实验室征召若干逻辑学家精英时,这一理论性工作开始付诸实践。冯诺依曼加入了洛斯阿拉莫斯的原子弹项目,负责计算机设计来支撑物理研究。1945年,他写出了第一台存储程序、基于逻辑的计算机EDVAC的设计规范,这被普遍认为是现代计算机设计指南的明确起源。

图灵加入了位于伦敦西北布莱切利园的一个秘密部门,帮助设计可破译纳粹德国密码的计算机。他对使用计算机设计最不朽的贡献在于对自动计算机器(ACE)做出了规范。

作为第一批基于布尔逻辑和存储程序架构的计算机,ACE和EDVAC在很多方面都比较类似。但它们也有着有趣的不同,其中一些甚至预示着现代有关计算机的设计之争。冯诺依曼钟爱的设计类似于现代的CISC(C代表“复杂”)处理器,把丰富的功能植入到硬件里面。图灵的设计更像是现代的RISC(R代表“精简”)处理器,把硬件复杂度降到了最低,然后把更多的工作留给软件。

冯诺依曼认为计算机编程是一项沉闷乏味的文书工作。而图灵相反则认为计算机编程“应该非常引人入胜。编程永远都不应该有变成苦力的真正危险,因为任何相当机械化的过程都可以交给机器本身来处理。”

自1940年代以来,计算机编程已经变得复杂了很多很多。不变的是仍然有给出规则让计算机遵循的程序员。用哲学的术语来说,计算机编程仍然遵循了演绎逻辑的传统。后者是我们前面所讨论的逻辑的一个分支,做的是根据形式化规则来操纵符号。

在过去10年左右的时间里,编程开始随着其学习的流行而发生改变,后者牵涉到了为机器创建框架,听歌统计推断来进行学习。这让编程开始向另一个主要的逻辑分支慢慢靠拢,这个分支就是归纳逻辑,也就是通过特殊实例来推断规则。

今天最有希望的机器学习技术采用的是神经网络,这个东西最早是在1940年代由Warren McCulloch和Walter Pitts发明的,其想法是为神经元建立一个像布尔逻辑一样,可用于构造计算机电路的微积分。神经网络一直都很神秘,只有圈内人才懂,直到几十年后跟统计技术进行了结合,使得它们因为获得的数据越来越多而得到改善时情况才开始改变。最近,随着计算机变得越来越擅长于处理大型数据集,这些技术已经产生了显著的效果。未来的编程可能会意味着让神经网络接触世界并从中学习。

这将会是计算机故事很应景的第二春。逻辑始于一种理解思维定律的方式。然后帮助创造了能根据演绎逻辑进行推理的机器。今天演绎逻辑和归纳逻辑并结合起来创造了一种既能推理也能学习的机器。用布尔的话来说,始于调查“人类思维的本质和构成”的努力,可以导致新思维,也就是人工思维的诞生——而这种思维有朝一日也许能赶上甚至超过我们自己的思维。

 


+1
3

好文章,需要你的鼓励

参与评论
登录后才能参与讨论哦...
后参与讨论
提交评论0/1000

请回复有价值的信息,无意义的评论将很快被删除,账号将被禁止发言。

36氪APP让一部分人先看到未来
36氪
鲸准
氪空间

为你推送和解读最前沿、最有料的科技创投资讯

一级市场金融信息和系统服务提供商

聚集全球最优秀的创业者,项目融资率接近97%,领跑行业