布尔函数简化器?

Boolean function simplifier?

x = (a & b & d) | ~(a | ~b | c) | (~c & ~d & a) | (c & d)

~ = not
& = and
| = or

如何简化这样的功能,我应该从什么开始? 我尝试了一些简化程序,但我不明白它们。

你应该为涉及的变量和最终输出写出一个真相table。

然后,对于事实 table 中被证明为真的每一行,您根据变量的状态编写一个逻辑方程来重现逻辑“一”,通常是一个 AND 函数适当的输入和反向输入。

假设只有 3 行的输出为真或逻辑 1。 那将意味着您将拥有三个逻辑方程式。 您可以通过将这三个方程与 OR 运算符连接在一起来完成这项工作。

通过查看真相 table,您可能会注意到逻辑真线的输出并不依赖于所有变量。这是简化表达式的一种方法。

求解与您在上面给出的方程式类似的方程式 (a & b & d) | (~a | b | ~c) | (~c & ~d & a) | (c & d)

我得到以下结果

x = 1 除了一种情况,即 (a b c d) = (1 0 1 0),在这种情况下它为零。 因此 x = ~( a & ~b & c & ~d) 或 x = ~a |乙 | 〜c | d

如何做到这一点? 为了更容易做到这一点,您可以将等式重写为

 x = A | B | C | D, where

 A =  (a &  b & d)
 B = (~a | b | ~c)
 C =  ~c & ~d & a
 D =   c &  d

除了 (abcd) 的两组输入即 (1010) 和 (1011) 之外的所有变量 B = 1。

变量 A = 1 仅适用于两个输入集,B 已经涵盖了。

与变量 C 类似。

对于两组输入 B 中的一组,变量 D = 1 没有使 = 1,即 (1011)。

因此只有当输入恰好为 a=1、b=0、c=1、d=0 时 x = 0,但我们希望将其写为一个等式,当这些输入时为真 (=1)给出,所以我们写

 x = ~(a & ~b & c & ~d) or x = ~a | b | ~c | d

所以这是一种简化的方法。我将在单独的答案中添加第二种技术。

抱歉花了这么长时间才拼出来,但也许其他人会发现它有用。

OP 的原始方程已相当简化。真相 table 具有几乎相等的 T 和 F 条目,因此不适合演示该技术。可以将其重写为

 x = (a & b & d) | (~a & b & ~c) | (a & ~c & ~d) | (c & d)

这是相当紧凑的,但结合第一项和最后一项以及中间两项可以写得略有不同: x = ((a & b | c) & d) | ((~a & b | a & ~d) & ~c) 请参阅下面的第二个建议答案以获得进一步的解释