在本节中,我们将为命题逻辑开发一种演算。到目前为止,我们有一个语言,即一组公式,我们已经研究了语义和公式或子句集的一些性质。现在,我们将引入一条推理规则,即消解规则,它允许从给定的子句推导出新的子句。
一个子句
是子句
和
的消解式,如果存在文字
和
,并且
其中 
注意,存在一种特殊情况,如果我们从两个文字构造消解式,即
和
可以被消解并产生空集。这个空的消解式用特殊符号
表示。
表示一个不可满足的公式。我们定义一个包含空子句的子句集为不可满足的,
接下来,我们将研究消解规则和整个演算的性质。以下引理说明了消解规则单次应用的正确性。
如果
是一组子句,而
是
的一个消解式,那么 
证明:令
是
的一个赋值;因此它也是
的一个赋值。假设
:因此,对于
中的所有子句
,我们都有
。
和
的消解式
看起来像
其中
且
。现在有两个情况
: 从
和
中,我们可以得出
因此
.
: 从
中我们可以得出
因此
。引理的相反方向是显而易见的。
令
是子句集,并且
那么


如果我们将迭代 Res 运算符的过程理解为从给定集合中推导出新子句的过程,特别是推导出可能为空的子句,我们必须问,在哪些情况下我们能得到空子句,反之,如果我们得到空子句,这意味着什么。以下两个定理将研究这些性质。
令
为一组子句。如果
,则
不可满足。
证明:从
中我们可以得出结论,
是通过两个子句
和
采用归结推理得出的。因此,存在一个
使得
并且
,因此
不可满足。从定理(归结推理引理)中我们可以得出结论,
,因此
不可满足。
令
为一组有限子句。如果
不可满足,则
.
证明: 对公式集中原子公式数量
进行归纳。当
时,我们有
,因此
。
假设
固定,并且对于每个包含
个原子公式的不可满足子句集
,都有
。
假设有一个包含原子公式
的子句集
。接下来我们将构造两个子句集
和 
是通过从
中删除每个子句中所有
以及包含
的所有子句而得到的。这种变换显然对应于用
解释原子公式
,
是从类似的变换中得出的,其中
的出现和包含
的子句都被删除了,因此
被解释为
.
让我们证明,
和
都是不可满足的:假设原子公式
的一个赋值
是
的模型。因此,赋值
是
的模型,这导致了矛盾。类似的构造表明
也是不可满足的。因此,我们可以使用归纳假设得出结论:
和
。因此,存在一个子句序列
使得
成立
或
是两个子句
和
的消解式,其中
。对于
也有类似的序列。
现在我们将重新引入之前删除的文字
和
到这两个序列中。
- 子句
是从
中原始子句删除
而得到的,再次被修改为
。这将导致一个序列
其中
要么是
,要么是
。
- 在第二个序列中,我们引入
,使得
要么是
,要么是
。
在以上任何情况下,我们都得到
,最多经过一次使用
和
的消解步骤。
基于正确性和完备性定理,我们给出了一个决定命题公式可满足性的过程。
如果
是一个有限的子句集,那么存在一个
使得
到目前为止,我们一直在处理子句集。在接下来的内容中,我们会发现,讨论消解规则应用序列是有帮助的。
从一组子句中推导出一个子句
,是一个序列
,满足以下条件:
并且

从
中推导出空子句
被称为
的一个反驳。
例子 我们想要证明公式
是
的一个逻辑结论。为此,我们对
取反并证明
的不可满足性。
为此,您可以使用本书中的交互式内容,以多种形式
- 使用交互式真值表来证明不可满足性,或者
- 使用交互式 CNF 变换将公式转换为 CNF,然后
- 使用以下交互式解析。
计算
对于所有
和
,对于以下子句集




哪一个公式是可满足的,或者哪一个是不可满足的?
指出 S 中所有子句的消解式,其中 
证明:两个子句
和
的消解式
是
和
的逻辑结论。注意:使用“结论”的定义。
设
是一个公式集,
是一个公式。证明
当且仅当
不可满足。
计算
,其中
以及
通过提供一个反证,证明以下公式集
是不可满足的。
使用消解规则证明
是子句集
的一个推理。
使用消解规则证明
是一个重言式。