我们不加证明地罗列一些布尔代数中常用的定律如下,其中 a、b、c 代表任意布尔表 达式。为了不与赋值符号=和比较运算符==混淆,我们用<=>来表示左右相等。
(1)a and False <=> False
(2)a and True <=> a
(3)a or False <=> a
(4)a or True <=> True
从以上四条定律可见,and 类似于二进制算术中的乘法运算,or 类似于加法运算,True 类似于 1,False 类似 0。这不是巧合,事实上,布尔代数和二进制代数本质上是一样的。
(5)a or (b and c) <=> (a or b) and (a or c)
(6)a and (b or c) <=> (a and b) or (a and c)
对否定的否定当然就是肯定,这就是双重否定律:
(7)not(not a) <=> a
下面两条定律称为 De Morgan 定律,用于将 not 深入到被否定表达式的内部。
(8)not(a or b) <=> (not a) and (not b)
程序设计中布尔代数运算定律可以用来化简复杂的布尔表达式,以便代码更容易理解。
以上面的继续进行一局比赛的条件为例,
not (a == 11 or b == 11)
<=> (not (a == 11) and not (b == 11))
<=> a != 11 and b != 11
原来的继续比赛条件 not (a == 11 or b == 11)可以直接解读为:当“(a 得到 11 分或者 b 得到 11 分)不是事实”。这似乎不太合乎我们的日常表达方式。通过应用 De Morgan 定律,最后化简为等价的 a != 11 and b != 11,这个表达式可解读为“当 a 不是 11 分并且 b 也不是 11 分”,也许更容易理解一些。