在本节中,我们将为命题逻辑开发一种演算。到目前为止,我们有一个语言,即一组公式,我们已经研究了语义和公式或子句集的一些性质。现在,我们将引入一条推理规则,即消解规则,它允许从给定的子句推导出新的子句。
一个子句 是子句 和 的消解式,如果存在文字 和 ,并且
其中
注意,存在一种特殊情况,如果我们从两个文字构造消解式,即 和 可以被消解并产生空集。这个空的消解式用特殊符号 表示。
表示一个不可满足的公式。我们定义一个包含空子句的子句集为不可满足的,
接下来,我们将研究消解规则和整个演算的性质。以下引理说明了消解规则单次应用的正确性。
如果 是一组子句,而 是 的一个消解式,那么
证明:令 是 的一个赋值;因此它也是 的一个赋值。假设 :因此,对于 中的所有子句 ,我们都有 。 和 的消解式 看起来像
其中 且 。现在有两个情况
- : 从 和 中,我们可以得出 因此 .
- : 从 中我们可以得出 因此 。引理的相反方向是显而易见的。
令 是子句集,并且
那么
如果我们将迭代 Res 运算符的过程理解为从给定集合中推导出新子句的过程,特别是推导出可能为空的子句,我们必须问,在哪些情况下我们能得到空子句,反之,如果我们得到空子句,这意味着什么。以下两个定理将研究这些性质。
令 为一组子句。如果 ,则 不可满足。
证明:从 中我们可以得出结论, 是通过两个子句 和 采用归结推理得出的。因此,存在一个 使得 并且 ,因此 不可满足。从定理(归结推理引理)中我们可以得出结论,,因此 不可满足。
令 为一组有限子句。如果 不可满足,则 .
证明: 对公式集中原子公式数量 进行归纳。当 时,我们有 ,因此 。
假设 固定,并且对于每个包含 个原子公式的不可满足子句集 ,都有 。
假设有一个包含原子公式 的子句集 。接下来我们将构造两个子句集 和
- 是通过从 中删除每个子句中所有 以及包含 的所有子句而得到的。这种变换显然对应于用 解释原子公式 ,
- 是从类似的变换中得出的,其中 的出现和包含 的子句都被删除了,因此 被解释为 .
让我们证明, 和 都是不可满足的:假设原子公式 的一个赋值 是 的模型。因此,赋值 是 的模型,这导致了矛盾。类似的构造表明 也是不可满足的。因此,我们可以使用归纳假设得出结论: 和 。因此,存在一个子句序列
使得 成立 或 是两个子句 和 的消解式,其中 。对于 也有类似的序列。
现在我们将重新引入之前删除的文字 和 到这两个序列中。
- 子句 是从 中原始子句删除 而得到的,再次被修改为 。这将导致一个序列
其中 要么是 ,要么是 。
- 在第二个序列中,我们引入 ,使得 要么是 ,要么是 。
在以上任何情况下,我们都得到 ,最多经过一次使用 和 的消解步骤。
基于正确性和完备性定理,我们给出了一个决定命题公式可满足性的过程。
如果 是一个有限的子句集,那么存在一个 使得
到目前为止,我们一直在处理子句集。在接下来的内容中,我们会发现,讨论消解规则应用序列是有帮助的。
从一组子句中推导出一个子句,是一个序列,满足以下条件:
- 并且
从 中推导出空子句 被称为 的一个反驳。
例子 我们想要证明公式 是 的一个逻辑结论。为此,我们对 取反并证明 的不可满足性。
为此,您可以使用本书中的交互式内容,以多种形式
- 使用交互式真值表来证明不可满足性,或者
- 使用交互式 CNF 变换将公式转换为 CNF,然后
- 使用以下交互式解析。
计算 对于所有 和,对于以下子句集
哪一个公式是可满足的,或者哪一个是不可满足的?
指出 S 中所有子句的消解式,其中
证明:两个子句 和 的消解式 是 和 的逻辑结论。注意:使用“结论”的定义。
设 是一个公式集, 是一个公式。证明
当且仅当 不可满足。
计算 ,其中 以及
通过提供一个反证,证明以下公式集 是不可满足的。
使用消解规则证明 是子句集 的一个推理。
使用消解规则证明 是一个重言式。