布尔代数 是计算机的基础。没有它,就不会有计算机。
布尔代数发展到今天,已经非常抽象,但是它的核心思想很简单。本文帮助你理解布尔代数,以及为什么它促成了计算机的诞生。
我依据的是《编码的奥妙》的第十章。这是一本好书,强烈推荐。
一、数理逻辑的起源
18世纪早期,英国数学家乔治·布尔(George Boole,1815-1864)突发奇想:人的思想能不能用数学表达?
此前,数学只用于计算,没有人意识到,数学还能表达人的逻辑思维。
两千年来,哲学书都是用文字写的。比如,最著名的三段论:
所有人都是要死的,
苏格拉底是人,
所以,苏格拉底是要死的。
乔治·布尔认为,这种推理可以用数学表达,也就是说,哲学书完全可以用数学写。这就是数理逻辑的起源。
二、集合论
乔治·布尔发明的工具,叫做"集合论"(Set theory)。他认为,逻辑思维的基础是一个个集合(Set),每一个命题表达的都是集合之间的关系。
比如,所有人类组成一个集合 R ,所有会死的东西组成一个集合 D 。
所有人都是要死的
集合论的写法就是:
R X D = R
集合之间最基本的关系是并集和交集。乘号( X )表示交集,加号( + )表示并集。上面这个式子的意思是, R 与 D 的交集就是 R 。
同样的,苏格拉底也是一个集合 S ,这个集合里面只有苏格拉底一个成员。
苏格拉底是人
// 等同于
S X R = S
上面式子的意思是,苏格拉底与人类的交集,就是苏格拉底。
将第一个式子代入第二个式子,就得到了结论。
S X (R X D)
= (S X R) X D
= S X D
= S
这个式子的意思是,苏格拉底与会死的东西的交集,就是苏格拉底,即苏格拉底也属于会死的东西。
三、集合的运算法则
前面的三段论比较容易,一眼就能看出结论。但是,有些三段轮比较复杂,不容易立即反应过来。
请看下面这两句话。
"鸭嘴兽是卵生的哺乳动物。鸭嘴兽是澳洲的动物。"
你能一眼得到结论吗?
鸭嘴兽 X 卵生 = 鸭嘴兽
鸭嘴兽 x 澳洲 = 鸭嘴兽
将第一个式子代入第二个,就会得到:
鸭嘴兽 X 卵生 x 澳洲 = 鸭嘴兽
// 相当于
卵生 x 澳洲 = 鸭嘴兽 + 其他
因此,结论就是"有的卵生动物是澳洲的动物",或者"有的澳洲的动物是卵生动物"。
还有更不直观的三段论。
"哲学家都是有逻辑头脑的,一个没有逻辑头脑的人总是很顽固。"
请问结论是什么?
这道题会用到新的概念:全集和空集。集合 A 和所有不属于它的元素(记作 -A)构成全集( I ),这时 A 和 -A 的交集就是一个空集( 0 )。
A + (-A) = I
A X (-A) = 0
因此,有下面的公式。
B
= B X I
= B X (A + -A)
= B X A + B X (-A)
回到上面那道题。
哲学家 X 逻辑 = 哲学家
无逻辑 X 顽固 = 无逻辑
根据第一个命题,可以得到下面的结论。
哲学家 X 无逻辑
= (哲学家 X 逻辑) X 无逻辑
= 哲学家 X (逻辑 X 无逻辑)
= 哲学家 X 0
= 0
即哲学家与没有逻辑的人的交集,是一个空集。
根据第二个命题,可以得到下面的结论。
无逻辑 X 顽固
= 无逻辑 X 顽固 X (哲学家 + 非哲学家)
= 无逻辑 X 顽固 X 哲学家 + 无逻辑 X 顽固 X 非哲学家
= 0 X 顽固 + 无逻辑 X 顽固 X 非哲学家
= 无逻辑 X 顽固 X 非哲学家