DP 和 DPLL 的可满足性产生不同的结果

问题描述

我有以下条款:

1. {P,Q,~R}
2. {~P,R}
3. {P,~Q,S}
4. {~P,~R}
5. {P,~S}

我必须分别使用DP和dplL证明可满足性。问题是我对每种算法都得到了不同的结果。 使用 DP:

1. {P,~S}
6. {Q} from 1 and 2

2. {~P,R}
3'. {P,S}
4'. {~P,~S}
7. {P} from 3' and 5

2. {R}
4'. {~R}
8. {}

所以不满意。但是使用 dplL:

1. {P,~S}
6. {P} split(P)

2'. {R}
4'. {Q,~R}

7.{Q}

这意味着它是可满足的...我做错了什么?

解决方法

在DP中的第一次推理中,解析规则没有正确应用。让我们关注从 6. {Q} from 1 and 21. {P,Q,~R} 推断 2. {P,~R}。将 P、Q 和 R 赋值给 false 满足 {P,~R}{~P,R},但它不满足推理所声称的 {Q} 由前两个包含。 {P,R} 的可能解析为:

  • {Q,~R,R} 通过解析 P
  • {P,~P} 通过解析 R

这两个子句始终为真,并被 DP 丢弃。 (丢弃有时称为重言式规则。)这些不包含 {Q},如前面的反例所示。

另请注意,在 DPLL 示例中,您已将 P、R、Q 指定为 true。这与子句 4. {~P,~Q,~R} 不一致。对于这种分裂,需要彻底应用单元传播。

您可以在网上找到许多关于 DP 和 DPLL 的介绍。示例:12。尝试一致且详尽地应用这些规则。