來, 幹掉這碗數理雞湯。 向人類哲學與數學先賢致敬。 向本文作者致敬, 向本文譯者致敬。
那些受亞里斯多德影響的哲學家, 為重塑了整個世界的電腦技術革命搭建了舞臺。
電腦的歷史經常被描述為實物的歷史, 從算盤, 到巴貝奇差分機, 再到二戰期間的密碼破譯機。
事實上, 我們更應將其理解為思想的歷史, 而且主要是源於數理邏輯的思想——數理邏輯是一門晦澀艱深、跡近邪教的學科, 最初誕生於19世紀。
數理邏輯的先驅是一些哲學傾向濃厚的數學家, 其中最著名的當屬喬治·布林(George Boole)和戈特洛布·弗雷格(Gottlob Frege), 而啟發他們的, 是萊布尼茨的通用“概念語言”以及亞里斯多德的古老邏輯系統。
最開始, 數理邏輯被認為是一門極度抽象的學文, 不會有什麼實際應用。
正如一位元電腦科學家所言:“在1901年那個時候, 如果有一位局外人受命調研諸門科學, 並找出在未來百年內,
然而, 數理邏輯將為一個領域奠定基礎, 而這個領域對現代世界產生的影響將超過其他任何領域。
數理邏輯對電腦科學的推動在20世紀30年代達到高潮, 當時, 有兩篇具有里程碑意義的論文問世:克勞德·香農(Claude Shannon)的《繼電器與開關電路的符號分析》, 以及艾倫·圖靈(Alan Turing)的《論可計算數及其在判定問題上的應用》。 在電腦科學的發展史中, 香農和圖靈是令人高山仰止的人物。 但是, 他們之前的哲學家和邏輯學家, 其重要性卻常常被忽視。
“數學或許可以被定義為我們永遠不知道自己在談論什麼, 也不知道我們說得對不對的一門學科。 ”在許多方面, 香農的論文都是一篇典型的電子工程專業論文,
如今, 在電腦科學家中, 布林的大名可謂如雷貫耳。 但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年代發明的。發明者當時想為神經元開發一種微積分學,使其能夠像布林邏輯一樣,用來構建計算機電路。神經網路在數十年時間裡一直默默無名,直到它們與統計技術結合。在統計技術的幫助下,它們可以饋入更多資料,從而獲得改進。近年來,隨著電腦處理大資料集的能力越來越強,這些技術已經帶來了令人驚歎的成果。未來,程式設計可能意味著,把世界展示在神經網路前,讓神經網路自己去學習。
這也許將成為電腦發展史的第二幕。一開始,邏輯學是作為一種理解思維規律的方式;之後,它説明創建了可以依照演繹邏輯進行推理的機器;如今,演繹邏輯和歸納邏輯正在融合,創造出既可以推理又可以學習的機器。從最初布林所說的“為探究人類思維的本質與構造”,到如今,現代電腦的發展,有朝一日,我們或許會創造出一種新的思維,一種能夠媲美甚至超越自身的人工思維。
翻譯:何無魚
造就:劇院式的線下演講平臺,發現最有創造力的思想
《幾何原本》的殘頁
雖然表面上講的是幾何學,但《幾何原本》卻成為了教授嚴謹演繹式推理的教科書。
亞伯拉罕·林肯曾說,他通過研究歐幾裡得,學會了有效的法律辯論方法。
在歐幾裡得的體系中,幾何命題一直以空間圖的形式呈現。直到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年代發明的。發明者當時想為神經元開發一種微積分學,使其能夠像布林邏輯一樣,用來構建計算機電路。神經網路在數十年時間裡一直默默無名,直到它們與統計技術結合。在統計技術的幫助下,它們可以饋入更多資料,從而獲得改進。近年來,隨著電腦處理大資料集的能力越來越強,這些技術已經帶來了令人驚歎的成果。未來,程式設計可能意味著,把世界展示在神經網路前,讓神經網路自己去學習。
這也許將成為電腦發展史的第二幕。一開始,邏輯學是作為一種理解思維規律的方式;之後,它説明創建了可以依照演繹邏輯進行推理的機器;如今,演繹邏輯和歸納邏輯正在融合,創造出既可以推理又可以學習的機器。從最初布林所說的“為探究人類思維的本質與構造”,到如今,現代電腦的發展,有朝一日,我們或許會創造出一種新的思維,一種能夠媲美甚至超越自身的人工思維。
翻譯:何無魚
造就:劇院式的線下演講平臺,發現最有創造力的思想