假设您有一个像这样的布尔规则/表达式
(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 (...)
布尔代数中是否有可以做到这一点的属性?
假设您有一个像这样的布尔规则/表达式
(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 (...)
布尔代数中是否有可以做到这一点的属性?
看看德摩根定理。该链接指向与电子门有关的文档,但理论保持不变。
它说任何逻辑二进制表达式保持不变,如果我们
(引用上述链接文件)
您的示例正在利用 AND 对 OR 的分布性,如此处所示。
您需要做的就是依次应用它。例如,使用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
您可能有兴趣阅读有关卡诺图的内容。它们是简化布尔表达式的工具,但您也可以使用它们来确定所有单独的表达式。我不确定您如何将其概括为可以编写程序的算法。
您可能对Conjunctive Normal form或其兄弟Disjunctive normal form感兴趣。
据我所知,布尔代数不能仅使用 AND 和 OR 运算来构建。如果您只有这两个操作,您将无法接收 NOT 操作。
您可以将任何表达式转换为完整的布尔运算集。
这是一些完整的套装:
假设您可以使用 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