我们不加证明地罗列一些布尔代数中常用的定律如下,其中 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 分”,也许更容易理解一些。