假设你有一个像这样的布尔规则/表达式
(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 (...)
布尔代数中是否有属性可以执行此操作?
答案 0 :(得分:5)
看看DeMorgan's定理。该链接指向与电子门有关的文件,但理论保持不变。
它表示如果我们
,任何逻辑二进制表达式都保持不变(引自上述链接文件)
答案 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操作。
您可以将任何表达式转换为布尔运算的完整集。
以下是一些完整集:
答案 5 :(得分:0)
假设您可以使用NOT操作,则可以仅使用AND或仅重写OR来重写任何布尔表达式。在你的情况下:
(A OR B) AND (D OR E) AND F
我倾向于使用工程速记来写上面文字并写道:
所以:
(A+B)(D+E)F
算术的推论实际上对于分解术语非常有用。
(A+B) => (A'B')'
因此,您可以将表达式重写为:
(A+B)(D+E)F
(A'B')'(D'E')'F