跳转至

编码

一、逻辑与开关

1.传统代数

加法/乘法交换律

\(A + B = B + A\)

\(A * B = B * A\)

加法/乘法结合律

\(A + (B + C) = (A + B) + C\)

\(A * (B * C) = (A * B) * C\)

乘法遵循加法分配律

\(A * (B + C) = (A * B) + (A * C)\)

2.布尔代数

  • +: 代表两个集合的并集
  • *: 代表两个集合的交集
  • 1: 表示全集
  • 0: 表示空集

  • 以猫为例。以下字母代表的都不是数字,而是集合,因为数量会因为时间发生变化。

  • 字母 M 代表公猫
  • 字母 F 代表母猫
  • 字母 T 代表褐色的猫
  • 字母 B 代表黑猫
  • 字母 W 代表白猫
  • 字母 O 代表不在 T、B 或 W 集合中的其他颜色的猫
  • 字母 N 代表已被绝育的猫
  • 字母 U 代表未被绝育的猫

在布尔代数中,交换律/结合率/分配律都是成立的。并且加法还可以来分配乘法,这在传统代数中是不成立的。

\(W + (B * F) = (W + B) * (W + F)\)

上述表示可以解释为:白猫和黑色母猫的并集=白猫与黑猫的并集、白猫与母猫并集的交集 白猫与白猫的交集是白猫,黑猫与母猫的交集是黑母猫,所以上述的两种猫的交集是白猫+黑母猫

  • 符号1与减号连用表示在全集中排除一些事物,例如下面的式子表示除去公猫的所有猫的集合

\(1 - M\)

  • 公猫与母猫的交集:

\(F * M = 0\)

  • 注意,在布尔代数中,1 和 0 有时也同在传统代数中的应用一样。例如,所有猫与母猫的交集是母猫的集合:

\(1 * F = F\)

  • 空集与母猫的交集还是空集

\(0 * F = 0\)

  • 空集与母猫的并集则是母猫:

\(0 + F = F\)

  • 但是有时也会出现与传统代数相悖的结果。例如,所有猫与母猫的并集是所有猫的集合:

\(1 + F = 1\)

  • 这个式子在传统代数中就是没有意义的。
  • 由于 F是母猫的集合,(1-F)是所有非母猫的猫的集合,因此这两个集合的并集是

\(F + (1 - F) = 1\)

  • 而这两个集合的交集为0:

\(F * (1 - F) = 0\)

在历史上,这个公式代表了逻辑学上的一个重要概念:这一概念被称为矛盾律。矛盾律指出事物不可能既是它本身,同时又是它的对立面。

  • 布尔代数与传统代数形式上最大的区别之处就是这样一个表达式:

\(F * F = F\)

  • 这个表达式很明确地表达了布尔代数的意义:母猫和母猫的交集依然是母猫。但是如果 F 代表的是数字,这个表达式就不会成立。布尔认为式子:

\(X ^ 2 = X\)

  • 就是将其代数同传统代数区别开的一条语句。另一个在传统代数中看起来比较有趣的式子是:

\(F + F = F\)

  • 母猫和母猫的并集依然是母猫。

或许某天你走进了一家宠物商店,对店员说:“我想要一只公猫,已绝育的白色或褐色都可以,或者一只母猫,也要是已绝育的,除了白色任何颜色都可以;或者只要是黑猫就可以。”

店员会对你说:“你想要的猫是在以下这样的集合里:

\((M * N * (W + T)) + (F * N * (1 - W)) + B\)

你会说:“是的!正是!”

为了确定店员是正确的,你大概会去抛弃并集和交集的概念,并用 OR 和 AND 取而代之。这里将字母大写是因为,它们表示的不仅是字面意义,而表示布尔代数中的运算做并集的时候,可以看做:第一个集合 OR 第二个集合。做交集的时候,可以看做:第-个集合 AND 第二个集合。除此之外,NOT 可以看做在1后面加一个减号。总的来说: - 符号“ + ”(之前作为并集的符号)现在可以用 OR 来表示。 - 符号“ x ”(之前作为交集的符号)现在可以用 AND 来表示。 - 符号“ 1- ”(之前意思是从全集中去掉某些元素)现在用 NOT 来表示。

因此,原表达式可以写为:

(M AND N AND (W OR T)) OR (F AND N AND (NOT W)) OR B

这样就非常接近你所说的话了。注意,这里是如何用括号表述清楚你的意图的。你想要的猫来自以下三个集合中的一个:

(M AND N AND (W OR T))
          OR
(F AND N AND (NOT W))
          OR
          B

有了这个公式,店员就可以做一个布尔测试了。为了避免麻烦,我采用了一种略微有点不同的布尔代数形式--字母不仅仅代表集合。这里,字母可以用数字来赋值。我们只用数字0和 1。数字1代表 YES,Tre,即这只猫是符合这样的标准的。数字0表示NO,False,即这只猫不符合这种特定标准。 首先,店员拿出了一只未绝育的褐色公猫。以下是我期望得到的猫的表达式:

\((M * N * (W + T)) + (F * N * (1 - W)) + B\)

以下是用0和1替换之后的式子:

\(( 1 * 0 * (0 + 1)) + (0 * 0 * (1 - 0)) + 0\)

注意,只有 M和T的值为1,因为这只猫是褐色的公猫。 现在我们要做的就是化简这个表达式。如果简化结果为1,则这只猫就符合你的标准;如果简化结果为 0,那么这只猫就不符合。在化简的时候要切记,我们并不是真的在进行加和乘的运算,尽管通常我们可以当做是。符号“+”代表 OR,符号“x”代表 AND,在大多同类的规则中适用(有时在现代课本中也使用符号“∧”和“V”来表示 AND 和OR,而非用符号“x”和“+”。但是在这里符号“+”和“x”是具有特殊意义的)。 当符号“x”代表 AND 时,有以下几种可能的结果:

\(0 * 0 = 0\)

\(0 * 1 = 0\)

\(1 * 0 = 0\)

\(1 * 1 = 1\)