简化一组AND和OR子句

时间:2011-05-04 19:27:41

标签: logic conditional

所以如果我有一组AND和OR子句如下:

Y = ( A + B ) . ( A + C' ) . ( B + D' )

我可以像这样简化:

Y = A . ( B + C' ) . ( B + D' ) ; Because A is common to ( A + B ) and ( A + C' )
Y = A . B . ( C' + D' )         ; Because B is common to ( B + C' ) and ( B + D' )

感谢您的时间。

4 个答案:

答案 0 :(得分:5)

不,如果您使用以下值:

A = 1
B = 0
C = 0
D = 0

如果您的简化版本为false,则原始语句为true。您可以通过扩展布尔表达式然后尝试代数减少它来找到表示它的另一种方式,如下所示:

(A + B)(A + C')(B + D')
(AA + AC' + AB + BC')(B + D')                          // expand first 2 groups
AAB + ABC' + ABB + BBC' + AAD' + AC'D' + ABD' + BC'D'  // expand all groups
AB + ABC' + AB + BC' + AD' + AC'D' + ABD' + BC'D'      // apply identity to reduce
AB + BC' + AD'                                         // eliminate redundant expressions

最终结果将在您的符号中显示为

(A . B) + (B . C') + (A . D')

进一步可以将其带到

B . (A + C') + (A . D')

A . (B + D') + (B . C')

答案 1 :(得分:3)

我认为唯一有用的等价物是

(A + B)。(A + C')=== A +(B.C')

所以它变成

(A +(B.C'))。 (B + d')

if B: --> A . D'
else: --> (A+C')

不知道这是否有助于您获得更有效/更有用的信息

A   B   C'  D'  f()
TRUE    TRUE    TRUE    TRUE    TRUE
TRUE    TRUE    TRUE    FALSE   TRUE
TRUE    TRUE    FALSE   TRUE    TRUE
TRUE    TRUE    FALSE   FALSE   TRUE
TRUE    FALSE   TRUE    TRUE    TRUE
TRUE    FALSE   TRUE    FALSE   TRUE
TRUE    FALSE   FALSE   TRUE    FALSE
TRUE    FALSE   FALSE   FALSE   FALSE
FALSE   TRUE    TRUE    TRUE    TRUE
FALSE   TRUE    TRUE    FALSE   FALSE
FALSE   TRUE    FALSE   TRUE    TRUE
FALSE   TRUE    FALSE   FALSE   FALSE
FALSE   FALSE   TRUE    TRUE    FALSE
FALSE   FALSE   TRUE    FALSE   FALSE
FALSE   FALSE   FALSE   TRUE    FALSE
FALSE   FALSE   FALSE   FALSE   FALSE

在电子表格中观看:[{3}}

答案 2 :(得分:0)

eZanmoto,乍一看它看起来会起作用,但我很快就完成了每个人的真值表,以下是失败的情况:

@A = B = C = D = True
Original = True
First = True
Second = False

@A = C = True, B = D = True
Original = True
First = False
Second = False

@A = True, B = C = D = False
Original = True
First = True
Second = False

@A = C = False, B = D = True
Original = True
First = False
Second = False

@A = C = D = False, B = True
Original = True
First = False
Second = False

答案 3 :(得分:0)

迟到的答案。我最近学到了更多关于Quine-McClusky algorithm and Karnaugh maps的知识,这是模仿布尔epxressions的系统方法。

我偶然发现this python implementation看起来很不错,我以为我会使用它验证我之前的答案:

import logic
A,B,C,D = logic.bools('ABCD')

print logic.boolsimp((A & B) | (A & ~C) | (B & ~D))

果然打印

(B & ~D) | (~C & A) | (B & A)

Pythonists:永远不要为逻辑运算选择错误的运算符;这主要是因为andornot无法在Python中重载


完整性检查

作为一项完整性检查,我确实通过算法实现检查了我认为会导致潜在简化的等效性是“看到”:

print logic.boolsimp((A & B) | (A & ~C))
print logic.boolsimp(A & (B | ~C))

打印两次相同的输出((~C & A) | (B & A)