計算機簡史第三章 機電時代之布林代數

peterjxl發表於2024-06-09

布林運算,使得計算機開始有了處理邏輯的能力。

萊布尼茨堅信,人類的思想和數字一樣可以化繁為簡——所有思想都可以分解為數量不多的簡單思想。這些簡單思想透過一些既定規律,可以組成任意的複雜思想,就像數學運算一樣。當兩個人發生了爭執,他們可以把自己的觀點透過數學計算的方式梳理出來,誰對誰錯就一目瞭然了。

為了“計算”思想,萊布尼茨闡述了後來被稱為合取(conjunction)、析取(disjunction)、否定(negation)等的邏輯運算規則,成為數理邏輯(mathematical logic)最早的探索者之一。

但邏輯運算在數學上的系統性定義,要等到 19 世紀由英國數學家喬治·布林(George Boole)首次提出。布林分別在 1847 年和 1854 年發表了著名的《邏輯的數學分析》和《思維規律的研究》,將數學中的代數方法引入到邏輯學中,被後人稱為布林代數(Boolean algebra),邏輯運算因而也叫布林運算。


下面透過一個例子介紹簡單一下邏輯運算,假設有 X、Y 兩個命題:

  • X:喬治·布林發明了二進位制。
  • Y:喬治·布林創立了布林代數。

顯然,X 命題是錯的,Y 命題是對的。在邏輯學中,我們稱:X 命題為假,Y 命題為真。如果用連詞將 X、Y 兩句話連起來說呢?

比如:喬治·布林發明了二進位制且創立了布林代數。這句話是錯的,即“X 且 Y”的組合命題為假。

再比如:喬治·布林發明了二進位制或創立了布林代數。這句話是對的,即“X 或 Y”的組合命題為真。

這就是邏輯學中的合取與析取,也稱邏輯與和邏輯或。

當然,也有對單個命題的邏輯運算,比如:喬治·布林沒有發明二進位制。這句話是對的,即“非 X”為真。

這就是邏輯學中的否定,也稱邏輯非。

與、或、非是 3 種最基本、最常用的邏輯運算。將它們組合起來,還可以形成與非、或非、異或、同或等複雜邏輯運算。歷史上,布林和許多其他邏輯學家曾使用過各種層出不窮的符號來表示它們,如今,我們常用下表中的表達形式:

邏輯運算 英文縮寫 表示式

AND X · Y
OR X + Y
NOT \(\overline{X}\)
與非 NAND \(\overline{X · Y}\)
或非 NOR \(\overline{X + Y}\)
異或 XOR X \(\bigoplus\) Y
同或 XNOR X \(\bigodot\) Y

其中,異或和同或其實意如其名,只是表示式有點抽象,它們的展開式十分容易理解:

X \(\bigoplus\) Y = X · \(\overline{Y}\) + \(\overline{X}\) · Y

X \(\bigodot\) Y = X · Y + \(\overline{X}\) · \(\overline{Y}\)

而邏輯命題的真假像極了二進位制中的 1 和 0,布林代數自然而然選擇用 1 表示真、0 表示假。

經過簡單的邏輯推演,我們就能得到這些邏輯運算在所有情況下的結果:

X Y 非 X 與非 或非 異或 同或
0 0 0 0 1 1 1 0 1
0 1 0 1 1 1 0 1 0
1 0 0 1 0 1 0 1 0
1 1 1 1 0 0 0 0 1

不難發現,邏輯運算和二進位制運算有著極高的一致性,除了有點違反直覺的 1+1=1:

邏輯與:

  • 0·0=0
  • 0·1=0
  • 1·1=1

邏輯或:

  • 0+0=0
  • 0+1=1
  • 1+1=1

更巧合的是,邏輯運算和數學運算一樣滿足交換律、結合律和分配律等各種運算規則,比如:

  • X·Y=Y·X
  • X+Y=Y+X
  • X·(Y·Z)=(X·Y)·Z
  • X+(Y+Z)=(X+Y)+Z
  • (X+Y)·Z=X·Z+Y·Z

相關文章