布林代數(Boolean algebra)
/ BOO-lee-an /
布林代數是「真與假」的數學——一種乾淨的代數,其中每個量不是 1(真)就是 0(假),運算則是 AND、OR、NOT。它是讓我們把閘的行為寫下來、化簡、並加以推理的文法,就像普通代數讓我們操作數字一樣。它以喬治·布林(George Boole)命名,他在 1800 年代就意識到邏輯可以用符號和規則來運算,遠早於有任何電子裝置能執行它。當你寫下「就緒 AND(非忙碌)」這樣的條件時,你其實已經在做布林代數了。
它的變數只取 0 或 1。AND 寫成像乘法(A times B,常簡寫成 AB),只有兩者都為 1 時才得 1。OR 寫成像加法(A + B),任一為 1 就得 1。NOT 用上橫線或一撇表示(A' 表示「非 A」)。從少數幾條定律就能改寫式子:A AND 1 = A、A OR 0 = A、A AND A' = 0、A OR A' = 1,以及關鍵的德摩根定律:not(A AND B) =(not A)OR(not B)、not(A OR B) =(not A)AND(not B)。一個小化簡:ready AND(not busy)OR(ready AND busy),把 ready 提出來,就化簡成只剩 ready——所以第二個子句根本不需要。這類化簡會從真實電路中拿掉一些閘。
它為何重要:布林代數是「用文字寫的規格」與「一堆實體閘」之間的橋樑。設計一個邏輯函數時,先寫出它的真值表,讀出一個布林式子,用代數(或用卡諾圖)化簡,化簡後的式子就直接對應到更少、更快的閘。誠實的重點是:看起來更簡單的代數通常意味著更小、更便宜、更省電的電路——但「最簡式」和「最少電晶體」並不總是一致,因為像 NAND 這樣的真實閘,比它所取代的「AND 再 NOT」還要便宜。
用真值表驗證德摩根。取 not(A AND B)。對 (A,B) = (0,0),(0,1),(1,0),(1,1),A AND B 為 0,0,0,1,所以它的 NOT 是 1,1,1,0。再看 (not A) OR (not B):1,1,1,0。每一列都相符——這兩個式子是同一個閘,這正是為什麼 NAND 可以拿來頂替「反相後再 OR」。
德摩根定律讓你藉由把輸入與輸出反相,在 AND 與 OR 之間互換——這是設計者日常的招式。
布林代數和普通算術不同,即使我們借用了 + 和 times 的符號。在布林代數裡 1 OR 1 = 1,而不是 2——沒有進位,因為存在的值就只有 0 和 1。