(这是对您评论的直接回答,也是对您的主要问题的侧面回答。简而言之,使用不同的方法来获得所需的简化表达式。)
您有一个复杂的表达式,但它只使用了 5 个逻辑变量。在这个问题中,构建一个只有 2^5 = 32 行的真值表会容易得多。您可以查看结果并使用它们来构建简化的等效表达式。这不使用原始问题所需的“定律和属性”,但它是简化布尔表达式的标准技术。
您应该在几乎所有离散数学课程中都学会了如何构建真值表。简而言之,您制作了一个表格,其中每行中的每个元素都是T 对应True 或F 对应False。这些行包含 Ts 和 Fs 的所有可能组合。对于 5 个变量,这将使用 2^5 = 32 行。对于每一行,您将第一个值分配给 A,将第二个值分配给 B,依此类推。然后您计算这些值的表达式并将结果写在行尾。
这可以手动完成,但您的表达方式足够复杂,我们可以避免这种情况。这是一个打印所需表格的 Python 3 脚本。请注意,Python 具有 product() 函数,它简化了获取 Ts 和 Fs 的所有可能组合。该脚本使用B[] 将布尔值转换为单个字符T 或F。
from itertools import product
"""Make a truth table for the Boolean expression
A.!B.E + !(B.C).D.!E + !(C.D).E+!A.D.!E + A.!(C.D).E + A.E + A.B.!E + !(A.C) + B.C.!D
"""
B = ('F', 'T')
print('A B C D E : Result')
print('- - - - - : ------')
for a, b, c, d, e in product((True, False), repeat=5):
print(B[a], B[b], B[c], B[d], B[e], end=' : ')
print(B[
(a and not b and e)
or (not (b and c) and d and not e)
or (not (c and d) and e)
or (not a and d and not e)
or (a and not (c and d) and e)
or (a and e)
or (a and b and not e)
or (not (a and c))
or (b and c and not d)
])
结果如下:
A B C D E : Result
- - - - - : ------
T T T T T : T
T T T T F : T
T T T F T : T
T T T F F : T
T T F T T : T
T T F T F : T
T T F F T : T
T T F F F : T
T F T T T : T
T F T T F : T
T F T F T : T
T F T F F : F
T F F T T : T
T F F T F : T
T F F F T : T
T F F F F : T
F T T T T : T
F T T T F : T
F T T F T : T
F T T F F : T
F T F T T : T
F T F T F : T
F T F F T : T
F T F F F : T
F F T T T : T
F F T T F : T
F F T F T : T
F F T F F : T
F F F T T : T
F F F T F : T
F F F F T : T
F F F F F : T
我们看到结果总是T 除了单行T F T F F。这意味着您的表达式为真,除非 A 为真,B 为假,C 为真,D 和 E 为假。所以我们可以将您的表达式(使用您的符号)简化为
!(A.!B.C.!D.!E)
简单地使用德摩根定律将其更改为正常形式:
!A + B + !C + D + E
这就是你想要的。