逻辑代数
0x00 定义
逻辑代数是代数的一个分支,与普通代数相比,逻辑代数主要定义了与,或,非三种运算,是用普通代数描述数字之间关系的方式来描述逻辑关系的形式主义wikipedia。
逻辑代数是乔治·布尔(George Boole)在他的第一本书《逻辑的数学分析》(1847年)中引入的,并在他的《思想规律的研究》(1854年)中更充分的提出了逻辑代数。BooleGeorge
0x01 起因
在学习 CS:APP 这本书的第2章时,常常用到位级运算,甚至它的习题还有只允许使用部分位级逻辑运算的规矩。当时在笔记上记下了要复习数字逻辑电路的知识,不过一直没有行动。今天在做 CS:APP 的 DataLab 时,更是感觉数字逻辑电路中常用的组合逻辑函数十分有用。在后悔大学数字电路没有好好学习而且没有笔记之后,还是得重新学习这方面的知识。
逻辑代数与计算机电子电路的行为紧密相关,实际上,香农在它的硕士学位论文中证明了两者之间的等价性Shannon。在非硬件的场合,也非常有用,可以用它对复合条件表达式化简,写出最高效的逻辑表达式;或者可以作为完成CS:APP作业的后备知识。
由于课本早已丢失,以下的内容均来自互联网。具体来说,主要来自这篇博客。
0x02 基本规律
在逻辑代数中,我们使用大写字母 A, B, C...
等作为基本单元,它们可以是变量或者逻辑表达式。在编程语言中,常用 &, |, ~
来表示位级的与,或,非,在逻辑代数中,AB
代表 A & B
;A + B
代表 A | B
;A'
则代表 ~A
。
0/1律
0 + A = A
0·A = 0
1 + A = 1
1·A = A
这几条十分简单,不多解释。但是其常用于复杂表达式的化简过程中。
还原律/重叠律/互补律
A'' = A
A + A = A, A·A = A
A + A' = 1, A·A' = 0
交换律/结合律/分配律
将与和或看作普通代数中的乘和加,这些规律也与普通代数中具有的类似。
A + B = B + A
A·B = B·A
(A + B) + C = A + (B + C)
(AB)·C = A·(BC)
A(B + C) = AB + AC
A + BC = (A + B)(A + C)
较为特殊的是最后一条或对与的分配律,它与倒数第二条与对或的分配律形式上同构,但是与普通代数差异较大。
证明:(A + B)(A + C) = A + AB + AC + BC = A(1 + B + C) + BC = A + BC
摩根定律
(A + B)' = A'B'
(AB)' = A' + B'
这一规律可以总结为:或的非是非的与,与的非是非的或,或者用集合的概念讲:
并集的补集是补集的交集,交集的补集是补集的并集
这个公式十分重要,在逻辑函数化简和逻辑转换中必不可缺。例如,可以使用它将与逻辑转换为或逻辑和非逻辑——AB = (A' + B')'
,也可以反过来——A + B = (A'B')'
根据这一定律的思想可以推出两条规则
- 反演规则:在对逻辑函数取反时,或变为与,与变为或,然后对每个量取反,但要保留组合量的非号。
如:(((A + B)C + D)(E + F))' = ((A'B' + C')D') + E'F'
- 对偶规则:这个规则是上面提到的与或逻辑转换的一个严谨定义。它的内容是:若两个逻辑式$F_1 = F_2$成立,那么它们的对偶式$F_1^D = F_2^D$也成立。
如:A(B + C) = AB + AC
,分别求左右两边的对偶式:A + BC = (A + B)(A + C)
。
取对偶式的规则是:或变与,与变或,保证运算顺序不变;常数项0变1,1变0
常用公式
这一部分中的公式是根据上面基本公式推导而来,在逻辑函数化简时经常用到。
- 吸收公式:
A + AB = A
- 消因子公式:
A + A'B = A + B
- 并项公式:
AB + AB' = A
- 消项公式:
AB + A'C + BC = AB + A'C
其中消因子公式利用了或对与的分配律,吸收公式和并项公式利用了与对或的分配律的逆运算,消项公式的证明如下:
1 | AB + A'C + BC |
逻辑函数化简与卡诺图
(这部分等到需要用了再写…
0xFF 参考
wikipedia 维基百科-逻辑代数
BooleGeorge Boole, George. An Investigation of the Laws of Thought. Prometheus Books. 2003 [1854]. ISBN 978-1-59102-089-9.
Shannon Shannon C E. A symbolic analysis of relay and switching circuits[J]. Electrical Engineering, 1938, 57(12): 713-723.