第10章 逻辑与开关
什么是真理?亚里士多德认为真理是与逻辑相关的某种事物。《工具论》(Organon)(可以追溯到公元前 4 世纪)这本书收集了他的理论,这也是最早在逻辑上做出全面阐述的著作。对于古希腊人来说,逻辑是在追求真理的过程中的一种分析方法,因此它被人们认为是一种哲学形式。亚里士多德的逻辑学基础是三段论法。最著名的三段论法(但是这个三段论却并没有出现在亚里士多德的著作中)是:
所有男人都必有一死;
苏格拉底是男人;
因此,苏格拉底必有一死。
在三段论中,首先假定两个条件是正确的,然后再通过这两个条件推断出结论。
苏格拉底之死这种结论似乎太简单了,然而,三段论的形式其实是多种多样的。例如,以下两个由 19 世纪的数学家查尔斯·道奇森(也被人们称为刘易斯·卡罗尔)提出的条件:
所有哲人都是符合逻辑的;
一个没有逻辑的人总是非常顽固的。
上述条件的推论一点也不明显(结论是“一些顽固的人不是哲人。”注意,这里“一些”这个词的出现完全是意料之外的)。
在过去的两千多年里,数学家们都压制着亚里士多德的逻辑学,并试图用数学符号和算子限制它的发展。19 世纪前期,唯一涉足这个领域的人就是莱布尼茨(1648-1716),他早年涉足了逻辑学,而后转移到了其他兴趣上(例如,与牛顿在同一时期,独立发明微积分)。
而后乔治·布尔(George Boole)出现了。
乔治·布尔于 1815 年出生于英格兰,降临到了这个对于他来说充满不公的世界。乔治的父亲是个鞋匠,母亲曾经做过女佣,因此,按常理在当时英国森严的等级制度下,他基本上不会做出什么有别于父辈们的事业。但是他凭借着勇于探究的精神以及父亲的帮助(乔治的父亲对科学、数学和文学都有浓厚的兴趣),乔治在年少的时候就接受了良好的教育,而这本应是上流社会中的男孩子们才能享有的特权。他学习了拉丁语、希腊语和数学。1849年,布尔凭借着他早期在数学研究上的论文成为了爱尔兰利克市皇后书院的数学系首席教授。

19 世纪中叶的一些数学家一直在研究逻辑的数学定义(其中最著名的是奥古斯特·德·摩根 Augustus De Morgan),但在理论上有着实际突破的却是布尔。首先是一部短篇著作《逻辑的数学分析——关于演绎推理的一篇随笔》(The Mathematical Analysis of Logic, Being an Essay Towards a Calculus of Deductive Reasoning,1847 年),而后是一篇更长且更宏大的著作《思维规律的研究——逻辑与概率数学理论的基础》(An Investigation of the Laws of Thought on Which Are Founded the Mathematical Theories of Logic and Probabilities ,1854 年),通称《思维规律》(The Laws of Thought)。布尔死于 1864 年,他由于冒雨赶去上课而感染了肺炎,那一年,他年仅 49 岁。
布尔于 1854 年所发表著作,其书名就彰显了一种雄心壮志。因为理性的人总是通过逻辑去进行思考,如果我们找到了一种利用数学来描述逻辑的方法,也会找到一种用数学方法来描述大脑是如何工作的。当然,现在这种观点显得很是天真(然而在那个时代这确实是非常先进的思想)。
布尔发明了一种代数,这种代数看上去与传统代数非常相似,而且运算规则也非常类似。在传统的代数中,操作数(通常为字母)代表数字,算子(通常为 “+” 和 “×”)则用来指示这些数字之间如何运算。通常,我们应用传统代数来解决可能像这样的问题:安雅有 3 磅豆腐。贝蒂的豆腐是安雅的 2 倍。卡门的豆腐比贝蒂多 5 磅。迪尔得丽的豆腐是卡门的 3 倍。试问迪尔得丽有多少豆腐?
在解决这个问题时,我们首先要将文字叙述转化为数学语言,下面用四个字母分别表示每个人所拥有的豆腐有多少磅:
将以上 4 个表达式带入同一式子中合并,最终可以得到一个加法和乘法混合运算的式子:
当进行传统代数运算的时候,我们会遵循一定的规则。这些规则在实际中可能非常根深蒂固,以至于我们不再认为它们是规则,甚至可能忘记它们的名字。但规则确实是任何形式数学运算的基础。
首先是加法和乘法的交换律(commutative)。意思就是,在运算符两边的操作数可以任意调换:
相反,减法和除法则是无法应用交换律的。
加法和乘法也遵循结合律(associative),如下:
最后,乘法遵循加法分配率(distributive):
传统代数的另一个特点就是,它是处理数字的,例如,豆腐的重量、鸭子的数量、火车行驶的距离或家庭成员的年龄。布尔的天才之处就在于他把代数从数的概念中抽离出来而使其更加抽象。在布尔代数(Boole’s algebra,现在也这样叫)中,操作数不是数字而是类(class)。简单说,一个类就是一个事物的群体,它后来也被称为集合(set)。
以猫为例。猫可以分为公猫与母猫。为了简便,用字母
我们也可以用别的字母代表猫的颜色,例如:
仍以此为例,猫还可以分为已被绝育的和未被绝育的。我们用字母
在传统的(数字的)代数中,符号 “+” 和 “×” 用来表示加法和乘法。在布尔代数中,也有 “+” 和 “×” 这样的符号,这很可能造成混淆。所有人都知道在传统代数中如何将数字相加或相乘,但是我们如何将类相加或相乘呢?
然而,在布尔代数中,并没有实际意义上的加或乘。而符号 “+” 和 “×” 表示的是完全不同的意义。
在布尔代数中,符号 “+” 表示两个集合的并集。两个集合的并集的意思就是指第一个集合中的所有元素与第二个类中所有元素的集合。例如,
在布尔代数中,符号 “×” 表示两个集合的交集。两个集合的交集就是指既在第一个集合中又在第二个集合中的所有元素的集合。例如,
为了避免在传统代数与布尔代数间混淆,有时用符号 “∪” 和 “∩” 来代替 “+” 和 “×”。布尔对数学方面的革命性影响是让人们熟知的符号更加抽象,因此,我决定坚持他的做法,而不是引入新的符号到他的代数中。
交换律、结合律和分配律都在布尔代数中同样成立。而且在布尔代数中,加法还可以来分配乘法,但在传统的代数中,这是不成立的:
白猫和黑色母猫的并集与如下两个集合的交集是一样的,这两个集合分别是,白猫和黑猫的并集,白猫和母猫的并集。虽然有点难理解,但是,这个结论是成立的。
布尔代数中还有另外两个符号是非常重要的。这两个符号看起来像数字,但是它们并不是真正意义上的数字,相对于数字而言,它们有不同的意义。在布尔代数中,符号1表示“全集”——也就是我们所提到的所有事物。在前面的例子中,符号1表示的就是“所有猫的集合”。因此:
也就是说,公猫与母猫的并集是所有猫。同样的,褐色的猫、黑猫、白猫与其他颜色猫的并集也是所有猫的集合:
通过以下方法也可以得到所有猫的集合:
符号1与减号连用可以表示在全集中排除一些事物,例如,
意思就是除去公猫的所有猫的集合。这个集合与母猫的集合是相等的:
另一个要用到的符号就是 0,在布尔代数中,符号 0 表示空集——不包含任何元素的集合。空集往往是两个互斥集合的交集,例如,母猫与公猫的交集:
注意,在布尔代数中,1 和 0 有时也同在传统代数中的应用一样。例如,所有猫与母猫的交集是母猫的集合:
空集与母猫的交集还是空集:
空集与母猫的并集则是母猫:
但是有时也会出现与传统代数相悖的结果。例如,所有猫与母猫的并集是所有猫的集合:
这个式子在传统代数中就是没有意义的。
由于
而这两个集合的交集为0:
在历史上,这个公式代表了逻辑学上的一个重要概念:这一概念被称为矛盾律。矛盾律指出事物不可能既是它本身,同时又是它的对立面。
布尔代数中与传统代数形式上最大区别之处就是这样一个表达式:
这个表达式很明确地表达了布尔代数的意义:母猫和母猫的交集依然是母猫。但是如果
就是将其代数同传统代数区别开的一条语句。另一个在传统代数中看起来比较有趣的式子是:
母猫和母猫的并集依然是母猫。
布尔代数提供了一种解决亚里士多德三段论的数学方法。我们再看看最著名的三段论法中的前两句,但是现在不区分性别:
所有人都难逃一死;
苏格拉底是人。
我们用
“所有人都难逃一死”是什么意思?意思就是说所有人的集合与必有一死的事物的交集是所有人:
命题
“苏格拉底是人”这句话的意思就是苏格拉底的集合(一个很小的集合)与所有人的集合(一个很大的集合)的交集是苏格拉底:
根据第一个等式我们可以得到
根据结合律,可以写为:
并且我们已知
到此,我们得出了结论。这个表达式告诉我们,苏格拉底的集合与必有一死的事物的集合的交集是
应用布尔代数证明这个显而易见的事实(实际上在2400年前苏格拉底自己就证明了他必有一死)似乎有点小题大做,然而布尔代数同样可以用来确定某种事物是否遵循特定的标准。或许某天你走进了一家宠物商店,对店员说:“我想要一只公猫,已绝育的,白色或褐色都可以,或者一只母猫,也要是已绝育的,除了白色任何颜色都可以;或者,只要是黑猫就可以。”店员会对你说:“你想要的猫是在以下这样的集合里:
对么?”你会说:“是的!正是!”
