布尔代数
在进入正题前,先说一个有趣的逻辑难题:
加拉哈德在寻找圣杯的旅途中,遇上了三条分别是由黄金、大理石、和石头铺成的分岔路。三条路分别由三个骑士看守。负责看守黄金路的骑士对加拉哈德说:这条路可以通往圣杯所在地,同时,如果石头路可以,那么大理石路也可以。负责看守大理石路的骑士说:黄金路和石头路都不能通往圣杯所在地。负责看守石头路的骑士说:走黄金路,你可以得到圣杯;走大理石路,你将一无所获。加拉哈德知道他们三人从来不说真话。那么从他们的谈话中,能否得到某些指引?
这些逻辑难题告诉我们,人类不擅长于使用逻辑来思维。例如说,感染新冠肺炎不会引致出现流鼻水的症状。如果你流鼻水了,于是便推论自己不是感染新冠肺炎,那么你便是犯了逻辑上的错误。
19世纪,乔治.布尔(George Boole)希望通过符号化和代数化来有系统地进行逻辑推理,于是有了后来闻名于世的布尔代数。乔治.布尔,他出身基层,父亲是鞋匠,靠自学成才。还自己出版刊物发表文章。后来被笛摩根(De Morgan)发现了,惊为天人,破格聘任他当大学教授。在事事讲求学历的今天,成为了绝唱。
布尔代数影响深远,是现在计算机类学科必修的知识。所有数字芯片,从设计到生产,每一个环节都离不开布尔代数。事实上,从大学一年级课程开始,AND, OR, NOT 逻辑运算,CNF, DNF, 笛摩根定理…等等等等,就已经植根到每一个业者的脑海里。布尔代数就像一座大山,任凭你怎么努力,也休想搬动它。
然而,乔治.布尔在一开始构思布尔代数的时候,并不是如现在般以AND-OR为中心的,而是以AND-XOR为中心。XOR即Exclusive-OR的意思。举个简单例子来说,某人的择偶条件是高大或是聪明,如果不排除可以同时“高大”和“聪明”,那是OR。如果是只能两者其中之一,那便是XOR。
采用原来构想的布尔代数的好处是运算过程比较接近我们中小学的代数运算,那么我们便不需要再学习另一套东西了。但AND-OR可能更接近我们日常的逻辑习惯。可能是这个原因,乔治.布尔后来便放弃了原来的构想。然而,电脑是不需要跟从人类的思考逻辑习惯进行运算的。反正人类在很多事情上都交给了电脑,只要给出的答案是正确就是了。
也许有人会反驳,在芯片设计中,OR gate要比XOR gate更为节省晶体管的数量。我认为这只是人们依赖布尔代数所产生的“偏心”效应。近年,由于pass-transistor logic (PTL)的出现,令OR gate不一定占有绝对优势,PTL目前已经应用到很多领域,如加法器,加密算法等。
可是,最大的阻力还是在于惯性阻力。因为传统的布尔代数已经被广泛使用,几乎所有工具都是围绕它创建的。要把它推倒重来,可以说是一件十分困难的事。
『何苦?』可能是很多人心中的直接想法。