1

我正在写下电路可满足性问题中或门的真值表(这与减少 3-可满足性问题有关)。

我有:

a  b  c    c = (a OR b)
1  1  1    1
1  1  0    0
1  0  1    1
1  0  0    0
0  1  1    1
0  1  0    0
0  0  1    0
0  0  0    1

因此,如果我在列 c = (a OR b) 中取 0 的行,并否定 a、b、c,那么我得到四个子句:

!a AND !b AND c
a AND !b AND !c
a AND !b and c
a AND b AND !c

我试图尽量减少这些条款。我知道正确的答案是:

c OR !a
c OR !b
c OR !a or !b

我如何最小化这四个子句?有在线程序吗?我使用了 wolfram,但它没有输出正确的答案,所以如果有人有时间帮忙,那就太棒了

4

1 回答 1

0

很容易看出,除了最后两行之外,最后一列与列几乎相同c。对于最后两行,它具有c交换列的值。所以我们可以写成:

if (a ∨ b) then c else ¬c

if c then t else f可以表示为 CNF (c ∨ t) ∧ (¬c ∨ f),因此上面的公式如下所示:

(a ∨ b ∨ ¬c) ∧ (¬(a ∨ b) ∨ c)
= (a ∨ b ∨ ¬c) ∧ ((¬a ∧ ¬b) ∨ c)
= (a ∨ b ∨ ¬c) ∧ (¬a ∨ c) ∧ (¬b ∨ c)

最后一个正是你想要的。

于 2014-04-02T17:00:13.023 回答