我们说我有一个名为' 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中。
提前致谢。
答案 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。