如何最小化重复的布尔表达式

时间:2014-09-19 21:47:51

标签: boolean logic boolean-expression electronics boolean-operations

我们说我有一个名为' foo'的逻辑门的真实表。

a | b | out |
0 | 0 |  1  |
0 | 1 |  0  |
1 | 0 |  0  |
1 | 1 |  1  |

这解析为以下布尔表达式:

foo =(-a ^ -b)v(a ^ b)

我们还说我有一个名为' bar'的逻辑门的电路图。

          -----        -----
a -------|     |      |     |
         | foo |------|     |
b -------|     |      | foo |------ out
          -----       |     |
c --------------------|     |
                       -----

这解析为以下布尔表达式:

bar =( - (( - a ^ -b)v(a ^ b))^ - c)v((( - a ^ -b)v(a ^ b))^ c)

为了找到这个结果,我将布尔表达式替换为' foo'把自己当成' a'。

是否有简单的算法方法来简化此布尔表达式?它显然有很多重复,我想得到一个最小的布尔表达式,最好是在CNF或DNF中。

提前致谢。

2 个答案:

答案 0 :(得分:2)

将最终输出表示为 g 函数:

f = foo(a,b) = ¬a·¬b + a·b
g = foo(f,c) = ¬f·¬c + f·c
g = foo(foo(a,b),c) = ¬(¬a·¬b + a·b)·¬c + (¬a·¬b + a·b)·c

假设⋅运算符代表二元连词(∧),+二元分离(∨)和 - 或un一元否定,我会以这种方式应用Boolean algebra的定律:

     ¬(¬a·¬b + a·b)        ·¬c + (¬a·¬b + a·b)·c
     ¬(¬a·¬b + a·b)        ·¬c + ¬a·¬b·c + a·b·c //distributivity of · over +
    (¬(¬a·¬b)·¬(a·b))      ·¬c + ¬a·¬b·c + a·b·c //De Morgan's law
 ((¬¬a + ¬¬b)·(¬a + ¬b))   ·¬c + ¬a·¬b·c + a·b·c //De Morgan's law
     ((a + b)·(¬a + ¬b))   ·¬c + ¬a·¬b·c + a·b·c //double negation law
(a·¬a + a·¬b + b·¬a + b·¬b)·¬c + ¬a·¬b·c + a·b·c //distributivity of · over +
   (0 + a·¬b + b·¬a + 0)   ·¬c + ¬a·¬b·c + a·b·c //complementation: x·¬x = 0
       (a·¬b + b·¬a)       ·¬c + ¬a·¬b·c + a·b·c //identity for +: 0 + x = x
             a·¬b·¬c + b·¬a·¬c + ¬a·¬b·c + a·b·c //distributivity of · over +

             a·¬b·¬c + ¬a·b·¬c + ¬a·¬b·c + a·b·c

最后一行是原始表达式的最小DNF。您也可以通过这种方式将其转换为最小的CNF:

a·¬b·¬c  + ¬a·b·¬c + ¬a·¬b·c  +  a·b·c
a·¬b·¬c  +  a·b·c  + ¬a·b·¬c  + ¬a·¬b·c          //just permuting
a·(¬b·¬c + b·c)    + ¬a·(b·¬c + ¬b·c)            //distributivity of · over +

//distributivity of + over ·:
(a + ¬a)·(a + (b·¬c + ¬b·c))·((¬b·¬c + b·c) + ¬a)·(¬b·¬c + b·c + b·¬c + ¬b·c)

//complementation: (a + ¬a) = 1
     (1)·(a + (b·¬c + ¬b·c))·((¬b·¬c + b·c) + ¬a)·((¬b·¬c + b·c) + (b·¬c + ¬b·c))

//identity for ·: 1·x = x
         (a + (b·¬c + ¬b·c))·((¬b·¬c + b·c) + ¬a)·(¬b·¬c + b·c + b·¬c + ¬b·c)

//(¬b·¬c + b·c + b·¬c + ¬b·c) = 1 i.e. sum of all b, c combinations; to be sure:
(a + (b·¬c + ¬b·c))·((¬b·¬c + b·c) + ¬a)·(¬b·(¬c + c) + b·(¬c + c)) //distribut.
(a + (b·¬c + ¬b·c))·((¬b·¬c + b·c) + ¬a)·(¬b·(1) + b·(1))      //complementation
(a + (b·¬c + ¬b·c))·((¬b·¬c + b·c) + ¬a)·(¬b + b)              //identity for ·
(a + (b·¬c + ¬b·c))·((¬b·¬c + b·c) + ¬a)·(1)                   //complementation

(a + (b·¬c + ¬b·c)                      )·((¬b·¬c + b·c) + ¬a) //identity for ·
(a + (b + ¬b)·(b + c)·(¬c + ¬b)·(¬c + c))·((¬b·¬c + b·c) + ¬a) //distributivity
(a +      (1)·(b + c)·(¬c + ¬b)·(1)     )·((¬b·¬c + b·c) + ¬a) //complementation
(a +          (b + c)·(¬c + ¬b)         )·((¬b·¬c + b·c) + ¬a) //identity for ·
              ((a + b + c)·(a + ¬c + ¬b))·((¬b·¬c + b·c) + ¬a) //distributivity
//distribut.: ((a + b + c)·(a + ¬c + ¬b))·((¬b+b)·(¬b + c)·(¬c + b)·(¬c+c) + ¬a)
//complem.:   ((a + b + c)·(a + ¬c + ¬b))·(   (1)·(¬b + c)·(¬c + b)·(1)    + ¬a)
//identity:   ((a + b + c)·(a + ¬c + ¬b))·(       (¬b + c)·(¬c + b)        + ¬a)
//distribut.: ((a + b + c)·(a + ¬c + ¬b))·((¬b + c + ¬a)·(¬c + b + ¬a))

                (a + b + c)·(a + ¬b + ¬c)·(¬a + ¬b + c)·(¬a + b + ¬c)

您的函数可以简化为以下任一表达式:

g = a·¬b·¬c + ¬a·b·¬c + ¬a·¬b·c + a·b·c //minimal DNF
g = (a + b + c)·(a + ¬b + ¬c)·(¬a + ¬b + c)·(¬a + b + ¬c) //minimal CNF

答案 1 :(得分:1)

使用De Morgan's laws,您可以将其进一步简化为CNF或DNF。