重构布尔方程

时间:2009-05-31 15:25:33

标签: parsing boolean expression equation

假设你有一个像这样的布尔规则/表达式

(A OR B) AND (D OR E) AND F

您希望将其转换为尽可能多的AND表达式,如此

A AND D AND F
A AND E AND F
B AND D AND F
B AND E AND F

你只是减少了OR,所以它变成了

(A AND D AND F) OR (A AND E AND F) OR (...)

布尔代数中是否有属性可以执行此操作?

6 个答案:

答案 0 :(得分:5)

看看DeMorgan's定理。该链接指向与电子门有关的文件,但理论保持不变。

它表示如果我们

,任何逻辑二进制表达式都保持不变
  1. 将所有变量更改为其补充。
  2. 将所有AND操作更改为OR。
  3. 将所有OR操作更改为AND。
  4. 取整个表达的补充。
  5. (引自上述链接文件)

答案 1 :(得分:3)

你的例子是利用AND over OR的分布,如here所示。

您需要做的就是连续申请。例如,使用x*(y+z) = (x*y)+(x*z)(其中*表示AND和+表示OR):

0. (A + B) * (D + E) * F
1. Apply to the first 2 brackets results in ((A+B)*D)+((A+B)*E)
2. Apply to content of each bracket results in (A*D+B*D)+(A*E+B*E)
3. So now you have ((A*D+B*D)+(A*E+B*E))*F
4. Applying the law again results in (A*D+B*D)*F+(A*E+B*E)*F
5. Apply one more time results in A*D*F+B*D*F+A*E*F+B*E*F, QED

答案 2 :(得分:2)

您可能有兴趣阅读Karnaugh maps。它们是用于简化布尔表达式的工具,但您也可以使用它们来确定所有单个表达式。我不知道你怎么可能将它概括为一个你可以编写程序的算法。

答案 3 :(得分:2)

您可能对Conjunctive Normal form或其兄弟Disjunctive normal form感兴趣。

答案 4 :(得分:0)

据我所知,布尔代数不能仅使用AND和OR运算来构建。 如果只有这两个操作,则无法接收NOT操作。

您可以将任何表达式转换为布尔运算的完整集

以下是一些完整集:

  • AND而不是
  • OR而不是

答案 5 :(得分:0)

假设您可以使用NOT操作,则可以仅使用AND或仅重写OR来重写任何布尔表达式。在你的情况下:

(A OR B) AND (D OR E) AND F

我倾向于使用工程速记来写上面文字并写道:

  • AND作为产品(。或什么都没有);
  • OR作为总和(+);和
  • 不是单引号(')。

所以:

(A+B)(D+E)F

算术的推论实际上对于分解术语非常有用。

De Morgan's Law

(A+B) => (A'B')'

因此,您可以将表达式重写为:

(A+B)(D+E)F
(A'B')'(D'E')'F