您的位置:首頁>正文

亞里斯多德如何創造了電腦? | 投資人說

編者注:電腦的歷史不到百年, 但是電腦理論基礎的奠定卻用了數千年。 正是在古希臘先哲亞里斯多德的影響下, 後世的其他哲學家才為重塑我們世界的技術革命奠定了基礎。 而這些人對電腦的影響遠沒有香農和圖靈那樣為人所熟知, 著名風投家, 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發明的,其想法是為神經元建立一個像布林邏輯一樣,可用於構造計算機電路的微積分。神經網路一直都很神秘,只有圈內人才懂,直到幾十年後跟統計技術進行了結合,使得它們因為獲得的資料越來越多而得到改善時情況才開始改變。最近,隨著電腦變得越來越擅長於處理大型資料集,這些技術已經產生了顯著的效果。未來的程式設計可能會意味著讓神經網路接觸世界並從中學習。

這將會是電腦故事很應景的第二春。邏輯始于一種理解思維定律的方式。然後説明創造了能根據演繹邏輯進行推理的機器。今天演繹邏輯和歸納邏輯並結合起來創造了一種既能推理也能學習的機器。用布林的話來說,始於調查“人類思維的本質和構成”的努力,可以導致新思維,也就是人工思維的誕生——而這種思維有朝一日也許能趕上甚至超過我們自己的思維。

所有人都是必死的。

蘇格拉底是人。

蘇格拉底是必死的。

你可以把“蘇格拉底”替換成任何物件,“必死”也可以替換成任何斷言,但該論斷依然正確。這一論斷的正確性主要取決於邏輯結構。邏輯詞——“所有”、“是”,以及“因此”就已經把所有的工作做完了。

亞里斯多德還根據他對自身邏輯體系的其他部分的推斷定義了一組基本公理:

任何對象均與自身等同(同一律)

任一命題不能既真又不真(矛盾律或無矛盾律)

一個命題要麼是真的要麼是假的(排中律)

這些公理不是為了描述大家實際上是如何思考的(這屬於心理學的範疇),而是描述一個理想化的、完全理性的人應該是怎麼思考的。

亞里斯多德的公理化方法影響了另一本甚至更加出名的書籍,據估計出版次數僅次於《聖經》的歐幾裡得的《幾何原本》。

《幾何原本》的片段

雖然《幾何原本》表面上講的是幾何,但它卻成為了教學嚴格演繹推理的標準教科書。(林肯曾經說過,他是通過學習幾何原本來學會進行可靠的法律論證的。)在歐幾裡得的體系當中,幾何學想法是以空間圖的形式呈現的。幾何學一直都沿用這種做法,直到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發明的,其想法是為神經元建立一個像布林邏輯一樣,可用於構造計算機電路的微積分。神經網路一直都很神秘,只有圈內人才懂,直到幾十年後跟統計技術進行了結合,使得它們因為獲得的資料越來越多而得到改善時情況才開始改變。最近,隨著電腦變得越來越擅長於處理大型資料集,這些技術已經產生了顯著的效果。未來的程式設計可能會意味著讓神經網路接觸世界並從中學習。

這將會是電腦故事很應景的第二春。邏輯始于一種理解思維定律的方式。然後説明創造了能根據演繹邏輯進行推理的機器。今天演繹邏輯和歸納邏輯並結合起來創造了一種既能推理也能學習的機器。用布林的話來說,始於調查“人類思維的本質和構成”的努力,可以導致新思維,也就是人工思維的誕生——而這種思維有朝一日也許能趕上甚至超過我們自己的思維。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示