我有两个布尔表达式:
¬aΛ¬b V ¬aΛ¬c V aΛ¬bΛ¬c #1
¬aΛ¬b V ¬aΛ¬c V ¬bΛ¬c #2
我知道他们是完全相同的,因为他们的真相表是相同的。我的问题是,我怎样才能使它们在表达方面同等。
你可能会注意到他们之间的唯一区别是#1有额外的' a'在它的最后一个OR期限。各种保理方法试图摆脱额外的' a'没有成功。
答案 0 :(得分:2)
我并不确切地知道你的意思"表达方式"但是如果你根据a是真还是假来分解它们就会很容易看出来。
如果a为真(前两个项在Eq1和Eq2中均为假):
Eq1 => ~b & ~c
Eq2 => ~b & ~c
如果a为假:
Eq1 => ~b | ~c
Eq2 => ~b | ~c | (~b & ~c)
== Eq1
编辑: 您可以使用布尔标识更正式地创建相同的参数:
(~a & ~b | ~a & ~c | ~b & ~c) == ((~a & ~b) | (~a & ~c) | (~b & ~c)) & (a | ~a)
自(a | ~a) == 1
和x & 1 = x
然后使用&
分布|
:
== (((~a & ~b) | (~a & ~c) | (~b & ~c)) & a) | (((~a & ~b) | (~a & ~c) | (~b & ~c)) & ~a)
现在你拥有了每个"案例"作为主|
两侧的另一个事实。再次应用分发将把这个事实推向内部案例并最终做出与上面所做的相同的取消。只看左侧的第一个分布:
((~a & ~b) | x) & a) == (a & ~a & b) | (a & x) == 0 | (a & x) == a & x
其中x是另外两个或表达式。遵循此策略将给出与上述相同的答案。如果你遇到困难我可以带你进一步,但你应该可以从这里拿走它。
答案 1 :(得分:0)
通常,您需要将表达式转换为disjunctive normal form。要做到这一点,你要对基本连词进行分离:对于真值表中的每一个,写出所有变量或它们的反转的相应连接,然后对所有这些连词进行分离。联合正常形式也存在,但很少使用。
对于许多变量的表达式,析取正规形式变得非常大。在这种情况下,您可能希望使用最小化算法(例如Quine-McCluskey algorithm),但这非常复杂且计算成本高(最小化问题为NP-hard,并且这些算法的运行时间通常比指数级更差计算真值表。)
如果您只需要一个通用表示来比较相同变量的任何布尔表达式,您也可以比较这些表达式的真值表: