「糾正我們推理的唯一方法,是使它們像數學家的推算一樣實在可靠,這樣我們就能一目了然地發現錯誤。當人與人之間爭論不休時,我們只要說:別再吵了,讓我們算算看誰才是對的。」
—— 萊布尼茲 1685 年致 Philipp Spener 信。
本文為系列文章,上一篇請見:易經、巴別塔、通用文字——萊布尼茲研究二進位之路│《電腦簡史》數位時代(二)
亞里斯多德開創邏輯系統好棒棒,but……
萊布尼茲提出只用 0 與 1 的二進位算術,成為現代電腦的運算方式。不過,現代電腦可不是之前的計算器,藉由齒輪轉動的圈數來做加減乘除,而是利用電子零件的開關狀態。開關狀態如何做二進位算術?這就需要藉助「邏輯運算」。
邏輯運算這個詞在現代聽起來理所當然,但你若拿去問十八世紀以前的人,他一定覺得莫名其妙,邏輯用的都是文字語句,又不是數學,怎麼運算呢?
是的,打從亞里斯多德開創有規則可循的邏輯系統,兩千年來表達邏輯的方式都是用自然語言做為陳述句,例如下面這個最具代表性的三段論。
大前提:所有人都會死。
小前提:蘇格拉底是人。
結論:蘇格拉底會死。
然而自然語言不免會有多重涵義,或是容易有歧義的問題,不僅翻譯成不同語言可能造成誤解,就算是使用同一種語言的人,也可能會對其中的邏輯關係有不同認知。例如「有關係就沒關係,沒關係就有關係」這句俗諺裡面,「關係」這個詞項顯然有不同涵義,而「有」與「沒」的用法也前後不一。
況且除了簡單的三段論,還有其它形式更複雜的邏輯陳述,用自然語言確實無法精確地表示各種邏輯形式和規律。
你以為數學式本來就長這樣?
其實數學早期也都是用自然語言,如果翻開當時的數學書籍,只見盡是長長的文字敘述,即使看得懂,恐怕也難以聯想到它就是代表一個簡單的公式而已。這是因為直到十六世紀,數學才開始用符號來表達,像加、減、乘、除、等於都是約莫那個時候才改用 +、-、×、÷、= 代表。而我們現在熟悉的數學式記法,包括用字母代表未知數,更是十七世紀才盛行。
數學符號化之後,表述方式更加簡短精確,計算也變得方便許多。而且由於符號不受語文隔閡,不同國家的數學家都能一目了然,因此得以加速數學與科學的傳播與交流,是促成科學革命的重要基石。
萊布尼茲本身遊歷德國、法國、英國三地,又曾為微積分創造新的符號,更能感受符號化的重要性,因此在他夢想有數學般的通用文字之前,就已經試圖把邏輯轉換為數學那樣的表示方式,也就是現代所稱的「數理邏輯」。
萊布尼茲致力於邏輯數學化,可惜無人知
萊布尼茲先於 1679 年設想各種基本概念都用某個質數代表,例如「動物」用 “2” 代表,「理性」是 “3”,那麼「人是理性的動物」這個句子就相當於 “6=2×3”,也就是說代表「人」的數字是 “6”。從 6=2×3 可以推導出 6÷3=2,代表「人失去理性等於動物」,這樣便能透過計算完成邏輯推論。
1686 年,萊布尼茲改用 A、B、C……等字母符號代表普通命題,並引入「非」、「等於」、「不等於」、「屬於」、「不屬於」等符號,然後用這些符號列出交換律、傳遞關係……等處理集合關係的運算規則。
到了 1690 年,他又將加法與減法納入邏輯演算之中,讓邏輯的符號化與數學化更加完整,可以說已經為數理邏輯打下堅固的地基。無奈這些手稿在萊布尼茲生前從未公開,直到二十世紀初世人才知道他這方面的研究,數理邏輯的發展因此延遲了一個半世紀,才由英國數學家布爾 (George Boole) 重新開創。
布爾公親變事主,重新開創數學邏輯
布爾於 1815 年出生在一個鄉下小鎮,父親是個鞋匠。因為家境清寒,他自小學畢業後就沒再受正式教育,而是靠自學習得語文與數學知識。
布爾十六歲時被當地一所學校聘為教師,成為家中經濟支柱;到了十九歲乾脆自己開辦學校,同時更投入數學的研究。布爾二十三歲開始發表數學論文,逐漸獲得倫敦學術圈的注意,其中一位數學家德摩根 (Augustus De Morgan) 與他結為好友,後來竟為他帶來開創邏輯新局的契機。
話說十九世紀的哲學家已經注意到亞里斯多德的三段論有許多問題,因此包括德摩根在內的一些學者開始思考如何將邏輯數學化(如之前所說,他們渾然不知萊布尼茲早已做了研究)。1846 年,德摩根發表了一篇關於三段論的論文,主要是針對命題中的「所有」、「有些」,或「大部分」提出量化的討論。
沒想到論文發表後,另一位英國哲學家漢彌爾頓 (Sir William Hamilton) 立即跳出來指控德摩根剽竊自己的想法。布爾身為德摩根好友,自然要關切兩人爭執的內容,沒想到他深入研究後,竟從原本的旁觀者搖身一變為一代宗師。
命題真偽改用 1 與 0 代表,邏輯關係化為數學運算
1847 年,布爾出版了《邏輯的數學分析》(The Mathematical Analysis of Logic),這本僅僅 82頁的小冊子立即撼動了哲學界與數學界。這裡面完全用代數的形式來表達傳統邏輯,像「且」、「或」、「非」、「若……則……」等邏輯關係都化為乘法與加、減法;命題的真偽就用 1 與 0 兩種數值代表;另外布爾再訂出結合律、分配律、……等基本公理,成功地將邏輯數學化。
從此邏輯推論可以改用簡潔精確的數學式計算,不但避免語意模稜兩可造成的謬誤,也大幅增加處理命題的效能。在許多學者投入之下,數理邏輯這門全新的路線迅速發展,布爾自己也在 1854 年出版的《思維法則》(The Laws of Thought) 中,把整個系統補強得更完整。
其實布爾的研究成果有許多都是萊布尼茲已經做過的,但歷史就是這麼奇妙,萊布尼茲被視為二進位制的創立者,是因為一個世紀前的哈里厄特沒有公開發表論文。如今換成萊布尼茲自己沒有將邏輯代數的研究整理發表,而讓邏輯代數在一個半世紀後冠上布爾之名(稱為「布林代數」(Boolean algebra),”Boolean”意指「布林的」)。
還有一點令人惋惜的是,萊布尼茲如此看重二進位制,卻沒有像布爾那樣,用 1 與 0 代表命題運算後的真偽。對於電腦運算而言,這是絕對必要的,因此從電腦發展的角度而言,即使萊布尼茲的文稿更早公開,布爾一定還是會在發明電腦的功勞簿上記上一筆。
二進位制與布林代數就緒,現代電腦只欠東風
事實上,布爾對計算機也不陌生。由於好友德摩根是愛達·勒芙蕾絲的數學家教,透過這層關係,布爾曾經跟巴貝奇書信往來。他在 1862 年寫給巴貝奇的一封信中,還特地感謝他為自己解釋差分機的細節。就像當年萊布尼茲曾設想過二進位的計算機,我們不禁要想像若是結合布爾的全新觀點與巴貝奇的設計天分,是否會改變計算機的歷史?
但這已無從得知了,因為布爾在兩年之後就死於非命。原來布爾冒著大雨到學校教課,因此感冒發燒,不料他那迷信順勢療法的老婆,竟繼續往布爾身上澆了好幾桶水,反而導致他嚴重肺炎,才四十九歲就因病過世。
無論如何,沒有電力還是不會有現代電腦,因此儘管二進位制與布林代數早已就緒,仍需等待東風——也就是電力系統與硬體零件,計算機才能航向全新的世代。當然,東風起了,還得有個諸葛孔明運籌帷幄呢……。