George Boole · 1815–1864

布尔

他把「与、或、非」写成了算术,八十多年后那套算术长成了每一块芯片

x2=xx^2 = x
二元律 · 在普通代数里它只有 0 和 1 两个解,而逻辑只需要这两个数

乔治·布尔 1815 年 11 月 2 日生于英格兰林肯,父亲约翰是个鞋匠,生意做得不好,却痴迷光学与数学,自己磨镜片装过望远镜。布尔没有读过大学,也从未为任何学位念过一天书:拉丁文是跟一位书商学的,希腊文、法文、德文与意大利文全靠自学,拉格朗日和拉普拉斯的书也是自己啃下来的(他后来名下的那两个博士学位——1851 年都柏林的 LL.D. 与 1859 年牛津的 D.C.L.——都是荣誉学位)。十六岁那年家里的店垮了,他去当助教养活父母与弟妹;十九岁在林肯自办了一所学校,此后十几年白天教课、夜里做数学。1844 年皇家学会把一枚皇家奖章授给了这个小学校长,表彰的是论文《论分析中的一般方法》——那是皇家奖章第一次颁给数学工作。1849 年他受聘为爱尔兰科克女王学院首任数学教授,十一月到任。

让他留在数学史上的是另外两本书。1847 年的《逻辑的数学分析》与 1854 年的《思维规律的研究》做了一件两千年没人做过的事:把逻辑写成代数。他让符号代表「一类东西」,于是「且」成了乘法、「非」成了 1 减、全体是 1、空的那一类是 0;而「一样东西选两遍还是那些东西」给出 x² = x——一条普通代数里只有 0 和 1 两个解的式子。1854 年那本书的后六章接着把同一套办法用在概率上,书名里「逻辑与概率的数学理论」不是客套。1855 年 9 月他娶了玛丽·埃佛勒斯特,生了五个女儿:老三艾丽西亚自学四维几何,算出了六个正四维多胞体的三维截面;最小的埃塞尔·丽莲生于 1864 年,也就是父亲去世那一年,后来写了小说《牛虻》。1857 年布尔当选皇家学会会士。1864 年 12 月 8 日他病逝于科克郊外的巴林坦普尔,年四十九。他生前几乎没有看到这套代数被人用起来——八十多年后,一个二十一岁的美国研究生把它接到了继电器上。

布尔肖像
《伦敦新闻画报》1865 年 1 月 21 日刊出的木口木刻肖像 · Wikimedia Commons,公有领域。布尔 1864 年 12 月 8 日病逝于科克,这是随讣闻一同刊出的那一幅,见该期第 11、13 页。

生平

  1. 1815
    生于林肯

    11 月 2 日。父亲是鞋匠,业余磨镜片、读数学,儿子的第一课是他上的。

  2. 1831
    十六岁做助教

    父亲的店垮了,他去当中学助教,从此供养父母与弟妹。

  3. 1834
    十九岁自办学校

    在林肯开了一所自己的学校。白天教课,夜里读拉格朗日与拉普拉斯。

  4. 1844
    获皇家学会皇家奖章

    表彰论文《论分析中的一般方法》。皇家奖章 1826 年就设了,这是第一次颁给数学工作。

  5. 1847
    《逻辑的数学分析》

    序言落款「林肯,1847 年 10 月 29 日」——写完它时他还在经营自己那所学校。

  6. 1849
    任科克女王学院教授

    爱尔兰科克女王学院首任数学教授,十一月到任。他从没为任何学位念过书。

  7. 1851
    在万国博览会上遇见巴贝奇

    科克藏着一封吊唁信,写信人回忆说,那天这两个人谈起了造一台「会思考的机器」。

  8. 1854
    《思维规律的研究》

    他自己认作定本的那一本。全书二十二章,第十六到二十一章讲的是概率。

  9. 1855
    与玛丽·埃佛勒斯特成婚

    9 月 11 日。她后来自己写教育与数学的书,两人生了五个女儿。

  10. 1857
    当选皇家学会会士

    一个从没为学位念过书的人,凭两本当时没人看得懂的书进了皇家学会。

  11. 1864
    卒于科克

    12 月 8 日,年四十九。死亡证明上记的是胸膜肺炎。

  12. 1937
    香农把它接到继电器上

    MIT 的硕士论文:串联是与、并联是或,化简电路就是化简式子。

展品厅

绝大多数展品都可以亲手把玩——这是本馆的立馆之本;少数以叙述为主的,做成故事展签。

镇馆之宝 · 亲手玩

x 乘 x 还是 x

普通代数里这条式子只有两个解,0 和 1——布尔说,那正好够逻辑用。

x2=xx(1x)=0x^2 = x \quad \Longrightarrow \quad x(1-x) = 0

1847 年秋天,三十一岁的布尔写完了一本薄薄的小册子《逻辑的数学分析》,序言落款是「林肯,10 月 29 日」。他要做的事在当时近乎冒犯:两千年来逻辑是哲学的地盘,是亚里士多德的三段论,是拿自然语言一句一句推出来的;他要把它写成代数。办法是让符号代表一类东西:设 x 是所有会飞的,y 是所有是鸟的,那么 xy 就是既会飞又是鸟的那一类。这样定下来之后,乘法可交换、可结合、对加法可分配,普通代数的规矩一条都不用改。可有一条式子是普通代数里没有的——一样东西选两遍,还是那些东西,所以 xx = x。1847 年他把这条叫「指数律」,写作 xⁿ = x;1854 年改称「二元律」,写作 x² = x。(今天通用的「幂等」是 1870 年才由本杰明·皮尔斯引入的词,不是布尔的说法。)在实数里这条方程只有两个解:0 和 1。演示左边那张图画的就是它,y = x 与 y = x·x 只在这两点相碰,中间那道缝最宽处也不过 0.25。布尔于是说:那就让逻辑的数只有 0 和 1,1 是全体,0 是空的那一类。移一下项得到 x(1 − x) = 0;他指出,哲学家们郑重其事的矛盾律——没有东西能既具有某性质又不具有它——不过是这条算术律的一个推论。

换一个运算看看:与、或、非、恰好一个,每一个都写成 0 和 1 上的加减乘

布尔的想法一句话说得完:让符号照代数的规矩走,别问它代表什么。 设 x 表示「所有会飞的东西」这一类,那么 xy 就是「既会飞又是鸟」,1 − x 是「不会飞的」,而 xx 显然还是 x——一样东西选两遍,还是那些东西。 于是他得到那条别处没有的式子:x·x = x。 1847 年他管它叫「指数律」,1854 年改称「二元律」;今天通用的「幂等」是 1870 年才有的词,不是他的说法。 在普通代数里这条式子只有两个解,0 和 1;左边那张图画的就是这件事,缝最宽处也不过 0.25。 布尔说:那就让逻辑只用这两个数。 移一下项得到 x(1 − x) = 0,他在《思维规律的研究》里指出,形而上学家郑重其事的「矛盾律」——没有东西能既具有某性质又不具有它——不过是这条算术律的一个推论。 换几个按钮看看:与、或、非、恰好一个,每一个都能写成 0 和 1 上的加减乘,而且算完仍落在 0 和 1 上。 最后一个按钮是反例:光写 x + y,11 那一行会给出 2。 布尔本人的 + 正因如此只对互不相交的两类有定义,他自己的话是「无法解释的」;他的「或」要写成 x + y(1 − x)。 1863 年杰文斯写信劝他改用可兼的「或」、允许 X + X = X,布尔断然拒绝,还中止了通信;次年杰文斯自己出了一本《纯逻辑》。

半加器:一个异或加一个与

机器要会加法,先得会答两个问题:本位写几,要不要进一。

S=AB,C=ABS = A \oplus B, \quad C = A \cdot B

加法是小学生都会的事,可要让一堆开关会做加法,得先把它拆成逻辑。两个一位数相加,答案分成两半:本位写什么,以及要不要向上进一。写成布尔代数,这两半都是一行式子——本位是「恰好一个为真」,也就是异或;进位是「两个都为真」,也就是与。两个门就够了。要处理更高的位,还得收下低位递上来的进位,于是两个半加器再加一个或门;把它们首尾相接,进位像多米诺一样一级一级往左传,一台加法机就成了。演示里可以拨两个四位数看这条链怎么动:拨到 1111 + 0001,最低位那一下要一路传到最高位,四级全亮,这是最坏的情形。代价也正在这里——位数越多,等进位传完的时间越长,六十四位要串过六十四级,所以真正的芯片改用「先行进位」,把每一级的进位并行算出来;换的仍是同一套代数,只是把式子重新整理了一遍。要说清楚的是:布尔本人没有想过电路,他 1864 年就去世了。把这套逻辑写成加法电路的,是 1937 年香农那篇硕士论文的最后一个例子「二进制电加法器」:最低位正是「和 = 异或、进位 = 与」,更高的位用对称函数写出。不过「半加器」「全加器」这两个名字他并没有用,那是十来年后才定下来的叫法;同一时期德国的楚泽、贝尔实验室的斯蒂比茨也各自做出了二进制加法电路,所以这里不替任何人认领「第一个」。

一台机器要会加法,它得先会两件事:本位写几,以及要不要进一。 写成布尔代数就一眼看得见:本位是「恰好一个为真」,也就是异或;进位是「两个都为真」,也就是与。 两个门合起来叫半加器。 要处理更高的位,还得收下低位传上来的进位,于是两个半加器再加一个或门,成为全加器。 把四个全加器首尾相接,进位像多米诺一样一级一级往左传——这就是行波进位加法器。 拨到 1111 + 0001 看看最坏情况:最低位那一下要一路传到最高位,四级全亮。 代价也在这里:位数越多,等进位传完的时间越长;六十四位要串过六十四级。 所以真正的芯片改用「先行进位」,先把每一级的进位并行算出来,再统一相加——换的仍是同一套代数,只是把式子重新整理了一遍。 布尔本人从没想过电路。 这套电路最早的系统性符号描述出自 1937 年香农的硕士论文,最后一个例子就叫「二进制电加法器」; 不过「半加器」「全加器」这两个名字是十来年后才定下来的,同一时期楚泽与斯蒂比茨也各自做出了二进制加法电路,所以这里不替任何人认领「第一个」。

交、并、补:另一套读法

同一套式子,可以读成逻辑,也可以读成集合——德摩根律两边都成立。

(AB)=AB,(AB)=AB(A \cup B)' = A' \cap B', \quad (A \cap B)' = A' \cup B'

布尔的 x 从头到尾都是一类东西,不是一个真假值。乘是取交,1 减是取补,1 是全体,0 是空的那一类;x·x = x 说的就是 A ∩ A = A。所以他那套逻辑代数同时也是一套集合代数,两种读法逐条对得上——这正是它后来能同时长进数据库查询、搜索语法与电路设计的原因。奥古斯特·德摩根是布尔一生最重要的通信者,两人的信从 1842 年一直写到布尔去世。1847 年两人各出了一本逻辑的书,凑得极巧:德摩根后来一再说两书是同一天问世的,这话最早见于他 1848 年 1 月匿名为布尔写的书评——「就在德摩根先生的书在伦敦出版的那一天,本文所评的这一本在剑桥面世」。后来的考据说,两本确实都在 1847 年 11 月出版,相差不过一两天。以他为名的那两条律说的是:否定一个「或」,它就变成「且」;否定一个「且」,它就变成「或」。这两条并不是他发明的——十四世纪的奥卡姆在《逻辑大全》里已经用文字说过:一个合取命题的矛盾命题,是各合取支的矛盾命题的析取。德摩根做的是把它们写成可以代入演算的形式,名字就此归了他。演示里的两张韦恩图不是照着结论画出来的:画法是先把平面切成四块或八块,再对每一块分别代入左式与右式求值,值为 1 才涂色,所以「两张图长得一样」与底下那一排逐块比对是同一件事。

布尔的 x 从头到尾都是一类东西,不是一个真假值。 xy 是同时属于两类的那些,1 − x 是不属于 x 的那些,1 是全体,0 是空的那一类。 于是他那套算术直接就是今天的集合代数:乘是交,补是 1 减,而 x·x = x 说的就是「A ∩ A = A」。 德摩根是布尔一生最重要的通信者,两人的书都在 1847 年 11 月出版,前后不过一两天。 以他为名的那两条律说的是:否定一个「或」,会把它变成「且」,反过来也一样。 这两条并不是他发明的——十四世纪的奥卡姆在《逻辑大全》里就写过:一个合取命题的矛盾命题,是各合取支的矛盾命题的析取。 德摩根做的是把它们写成可以代入演算的形式,名字就此归了他。 这里的两张图不是照着结论画的:画法是先把平面切成四块或八块,再对每一块分别代入左式与右式求值,值为 1 才涂色。 所以「两张图长得一样」与底下那一排逐块比对是同一件事。 最后一个按钮是故意写错的一条——否定之后忘了把 ∪ 换成 ∩,图当场就不一样了。

一个开关网络,就是一个布尔表达式

这一步不是布尔迈出的——是七十三年后一个二十一岁的硕士生。

AB+AB=AA \cdot B + A \cdot B' = A

布尔死于 1864 年,没见过一根电线。把他的代数接到电路上的是克劳德·香农:1937 年 8 月,二十一岁的他在麻省理工签下了那篇硕士论文《继电器与开关电路的符号分析》,次年以摘要形式刊在美国电气工程师学会汇刊上。他看出的事今天说来像废话,当年却没有人说破:两个开关串起来,灯亮的条件是两个都闭合,那就是「与」;并起来是有一个闭合就行,那就是「或」;常闭触点一按就断,那就是「非」。于是一张接线图与一个布尔表达式是同一样东西,而化简电路就等于化简式子——省下来的是真的铜、真的继电器和真的钱。在此之前,电话交换机的设计是一门靠经验与直觉的手艺;在此之后,它成了可以演算的事。论文里他明明白白点了名:「乔治·布尔开创的逻辑代数,是研究逻辑关系的一种符号方法。」演示里换几个预设试试:A·B + A·B′ 要用四个开关,化简成 A 只要一个,可无论怎么拨,两盏灯永远同亮同灭。有一处小注脚值得记下:香农原文的符号是反着的,他让符号表示电路的「阻抗」,0 代表通路、1 代表断路,于是串联在他笔下写成加法。这里按今天通行的写法画,两套只差一个整体取反。顺带一提,同一时期日本的中嶋章与苏联的舍斯塔科夫也各自把布尔代数用到了继电器上。

布尔死于 1864 年,没见过一根电线。 把他的代数接到电路上的是克劳德·香农,1937 年 8 月签下的一篇硕士论文《继电器与开关电路的符号分析》——那年他二十一岁,论文次年以摘要形式刊在美国电气工程师学会汇刊上。 他看出的事今天说来像废话:两个开关串起来,灯亮的条件是「都闭合」,那就是「与」;并起来是「有一个闭合就行」,那就是「或」;常闭触点一按就断,那就是「非」。 于是一张接线图与一个布尔表达式是同一样东西,而化简电路就等于化简式子——省下的是真的铜和真的继电器。 论文里他明明白白点了名:「乔治·布尔开创的逻辑代数,是研究逻辑关系的一种符号方法。」 画面上换几个预设看看:A·B + A·B′ 用四个开关,化简成 A 只要一个,可无论怎么拨,两盏灯永远同亮同灭。 一点小注脚:香农原文的符号是反着的,他让符号表示电路的「阻抗」,0 是通路、1 是断路,于是串联在他笔下是加法。 这里按今天通行的写法画,两套只差一个整体取反。 顺带一提,楼梯上下各一个开关的双控灯,写出来正是「恰好一个为真」——那是异或。

一个式子为真的概率

知道 P(A) 与 P(B),还定不下 P(A 且 B)——只能给出一段区间。

max(0,p+q1)P(AB)min(p,q)\max(0,\, p+q-1) \le P(A \cap B) \le \min(p,\, q)

《思维规律的研究》的全名是《思维规律的研究,逻辑与概率的数学理论即建基于其上》,后半截常被略去不提,可全书二十二章里第十六到二十一章都在讲概率。布尔问的是这样一个问题:已知若干个事件各自的概率,能不能算出某个逻辑式子为真的概率?他发现答案常常不是一个数,而是一段区间。理由朴素得出奇:设 P(A) = p、P(B) = q,把整个世界切成四块——既 A 又 B、只 A、只 B、都不是——它们的概率分别是 t、p − t、q − t、1 − p − q + t,加起来恒为 1。约束只有一条:谁都不能是负的。四条不等式解开,就把 t 关进了 max(0, p + q − 1) 与 min(p, q) 之间。我们熟悉的 P(A)·P(B) 只是这段区间里的一个点:独立是一条额外的假设,从来不是逻辑的结论。演示里把 P(A) 拨到 1 看看,区间会塌成一个点,因为必然事件不留任何自由度。这两个界他 1854 年就在第十九章写下来了,用的是类的计数;他还在脚注里把下界让给了德摩根,说那个式子「似乎是德摩根教授最早给出的」。今天这段区间通称「弗雷歇界」——弗雷歇 1935 年证明了它是只凭各自概率所能给出的最紧的界,而他在同一篇文章里管另一侧那条叫「布尔的不等式」。所以分工可以这样记:界是布尔与德摩根先给出的,「这已经是最紧的」是弗雷歇证明的。至于布尔这套「概率的一般问题」到底是什么,海尔佩林 1965 年给了一个干净的回答:它本质上是一个线性规划。

布尔那本书的全名是《思维规律的研究——逻辑与概率的数学理论即建基于其上》,后半截常被忘掉:全书二十二章,第十六到二十一章都在讲概率。 他问的是这样一个问题:已知若干个事件的概率,能不能算出某个逻辑式子为真的概率? 答案常常是算不出一个数,只能算出一段区间。 画面左边解释了为什么:两条竖带的宽度分别是 P(A) 与 P(B),可它们重叠多少,图里量不出来——那是独立于前两个数的第三个数。 约束只有一条,而且朴素得很:切出来的四块,谁都不能是负的。 把这四条不等式解开,就把 P(A 且 B) 关进了 max(0, p+q−1) 与 min(p, q) 之间。 我们熟悉的 P(A)·P(B) 只是这段区间里的一个点——独立是一条额外的假设,从来不是逻辑的结论。 把 P(A) 拨到 1 试试:区间会塌成一个点,因为必然事件不留任何自由度。 这两个界布尔 1854 年就在第十九章写下来了,他还在脚注里把下界让给了德摩根;而「这已经是最紧的界」是弗雷歇 1935 年证明的,所以今天通称弗雷歇界。 弗雷歇在同一篇文章里管右边那条 P(A 或 B) ≤ P(A) + P(B) 叫「布尔的不等式」,统计学里天天用它做多重比较的修正。 至于这整套「概率的一般问题」,海尔佩林 1965 年指出,本质上是一个线性规划。

《思维规律的研究》与那场雨

他把自己最重要的一本书写完,十年后在同一条路上淋了一场雨。

1854 年的《思维规律的研究》是布尔自己认作定本的那一本。1847 年那本小册子他后来嫌它仓促;1854 年这一本从头写起,前十五章讲逻辑,后六章讲概率,开篇第一句就把野心摆了出来:本书的用意,是去考察心智在推理时所遵循的那些基本规律,用一套演算的符号语言把它们表达出来。当时几乎没有人跟上。数学家嫌它是哲学,哲学家嫌它是数学。1864 年 11 月下旬的一天(一般定在 11 月 24 日),他冒着大雨从巴林坦普尔的家中步行三英里去学校——最早的印本记述作两英里——穿着湿衣服讲完了课,随即发起高烧,12 月 8 日病逝,年四十九,死亡证明上记的是胸膜肺炎。关于那几天还流传着另一种说法:他的妻子玛丽相信「以同治同」,把他裹进湿床单、往床上浇冷水,反而加重了病情。这个说法值得当心。它出自布尔亲属事后的指控,同时代的医疗记录里没有,最早的印本记述里也没有;而且被说成的疗法其实是维多利亚时代的「水疗」而非顺势疗法。布尔的主要传记作者麦克黑尔与科恩 2018 年用布尔本人的书信指出,他对水疗的兴趣早在结婚之前就有,临终时所受的治疗与他自己一贯的医疗观念一致,现有史料并不支持「妻子强加庸医之术」这一指控。真正确凿的是另一件事:他去世时,那套代数几乎还没有用处。它要等到七十多年后才第一次派上用场,而那时它的名字已经叫布尔代数。

故事展签故事展签:一本当时没人看得懂的书,和一场四十九岁的雨。

传承

他的工作没有留在十八世纪——每条链的终点,都是你今天正在使用的东西。

x·x = x 与逻辑代数(1847、1854)布尔代数成为数字电路的语言每一块芯片里的与门、或门、非门
半加器与全加器算术逻辑单元 ALU每一台数字计算机的加法与比较
香农 1937:开关网络就是布尔表达式逻辑综合与电路化简算法今天的芯片设计工具仍在做同一件事:把式子化简成更少的门
布尔代数即集合代数关系代数与检索语法数据库查询与搜索引擎里每一个筛选条件
命题演算被代数化弗雷格、罗素与形式逻辑形式验证:让机器检查一个证明或一块芯片对不对
给逻辑式子的概率定上下限(1854)邦费罗尼修正与多重比较统计推断里给假阳性把关

语录

形而上学家称作矛盾律的那条公理——它断言任何事物都不可能同时具有某种性质又不具有它——是那条基本思维规律的一个推论,而这条规律的表达式就是 x² = x。

—— 《思维规律的研究》(1854)第三章命题四,初版第 49 页。大意转述,原文:That axiom of metaphysicians which is termed the principle of contradiction … is a consequence of the fundamental law of thought, whose expression is x² = x

凡熟悉符号代数现状的人都知道,分析过程是否有效,并不取决于所用符号的解释,而只取决于它们组合的规律。

—— 《逻辑的数学分析》(1847)导论开篇第一句,初版第 3 页。大意转述,原文:the validity of the processes of analysis does not depend upon the interpretation of the symbols which are employed, but solely upon the laws of their combination

本书的用意,是去考察心智在推理时所遵循的那些基本规律,用一套演算的符号语言把它们表达出来,并在这个基础上建立逻辑这门科学、构造它的方法。

—— 《思维规律的研究》(1854)第一章开篇第一句,初版第 1 页。大意转述,原文以 The design of the following treatise is to investigate the fundamental laws of those operations of the mind by which reasoning is performed 起头