跳至内容
Topos Uranos

摘要

语义学曾许诺一些判定不可满足性而无须遍历整张真值表的方法;本课给出其中最主要的一种。一个公式集合被写成一个子句集合,每个子句是文字的有穷集合,所用的或者是合取范式,或者,为了避免其指数增长,是带有新变元的定义子句,它们保持可满足性。在子句上只作用一条规则,即归结规则:由一个含有某文字的子句和另一个含有其相反文字的子句,推出两者去掉这一对后的并。反驳是一个到达空子句的推导。可靠性(若有反驳,则该集合不可满足)通过对推导长度的归纳来证明,反驳完备性(若一个有穷集合不可满足,则有反驳)通过对变元个数的归纳来证明,即逐个消去变元;借助紧致性定理,完备性推广到无穷集合。由此得到一种判定后承的方法,并与真值表加以比较,同时介绍可满足性问题,以及两种可以快速判定的情形:霍恩子句和二文字子句。

学习目标

  1. 用合取范式或带有新变元的定义子句,把一个公式集合表示为一个子句集合,并论证这种表示保持可满足性和后承。
  2. 构造归结反驳,并用它们判定后承和不可满足性,避免典型错误,例如在一步之中消去两个互补对。
  3. 通过对推导长度的归纳证明归结的可靠性,通过消去变元证明其反驳完备性,并借助紧致性定理将其推广到无穷集合。
  4. 解释可满足性问题、它已知的代价以及可以快速判定的情形(霍恩子句和二文字子句),并把归结与真值表加以比较。

关于命题逻辑的语义学的一课表明,有效性和可满足性可以用真值表判定,其代价随每个变元翻一番,并预告了无须遍历真值表的方法。关于语义后承与语义等价的一课把每个后承归结为一个不可满足性:Γ⊨φ\Gamma \models \varphi 当且仅当 Γ∪{¬φ}\Gamma \cup \{\neg\varphi\} 不可满足。关于范式以及关于范式算法的两课给每个公式一个合取形式,其有效性一眼可见,但其可满足性却看不出来。若是如此,就还缺少一个直接作用于子句本身、判定子句合取之不可满足性的程序。这个程序就是归结,由约翰·艾伦·鲁宾逊于 1965 年在马丁·戴维斯和希拉里·普特南(1960)思想的基础上提出;它是今天判定含有数百万变元之公式的可满足性的程序的核心。演绎单元的系统与语义学的关系由关于可靠性与完备性以及关于紧致性定理的两课研究;与该系统不同,归结并不推演出结论:它反驳集合。本课证明它这样做是可靠且完备的。

与前面各课一样,pp、qq、rr、ss 和 tt 表示变元 v1v_1 至 v5v_5;不带下标的字母 vv 以及 ww 表示赋值;V(φ)V(\varphi) 是 φ\varphi 的变元集合。

子句与子句集合

回忆关于范式的一课:文字是一个变元或一个变元的否定;一个文字 ℓ\ell 的相反文字记作 ℓ∗\ell^{*},是同一变元、符号相反的文字;两个相反的文字构成一个互补对。由文字的否定引理,v(ℓ∗)=1−v(ℓ)v(\ell^{*}) = 1 - v(\ell) 对每个赋值 vv 都成立。在那里子句是文字的析取;在这里宜于忘掉次序和重复(它们不改变值),只保留集合。

子句是文字的有穷集合。没有文字的子句称为空子句,记作 □\Box。赋值 vv 满足子句 CC,记作 v⊨Cv \models C,是指 CC 中某个文字取值 11(在 vv 中);否则,vv 反驳它。只有一个文字的子句称为单元子句。一个子句的变元构成集合 V(C)V(C);一个子句集合 SS 的变元构成集合 V(S)V(S),即前者的并。一个赋值满足子句集合 SS,记作 v⊨Sv \models S,是指它满足其中的每个子句;若某个赋值满足 SS,则称它是可满足的,否则称它是不可满足的。最后,若 SS 是子句集合而 CC 是子句,S⊨CS \models C 表示每个满足 SS 的赋值都满足 CC。

v⊨C  ⇔  (∃ℓ∈C)  v(ℓ)=1,v⊨S  ⇔  (∀C∈S)  v⊨Cv \models C \;\Leftrightarrow\; (\exists \ell \in C)\; v(\ell) = 1, \qquad v \models S \;\Leftrightarrow\; (\forall C \in S)\; v \models C

由定义得出两种极端情形,宜于确定下来。空子句没有文字;因此,它没有文字取值 11,也没有赋值满足它:□\Box 不可满足,包含它的每个集合也不可满足。反之,空的子句集合没有需要满足的子句,每个赋值都满足它。二者不可混淆:{□}\{\Box\} 不可满足,而 ∅\emptyset 被所有赋值满足。

引理子句及其析取

设 C={ℓ1,…,ℓk}C = \{\ell_1, \ldots, \ell_k\} 是非空子句,其文字以任意次序、不重复地写出。对每个赋值 vv,v⊨Cv \models C 当且仅当 v(⋁j=1kℓj)=1v\left( \bigvee_{j=1}^{k} \ell_j \right) = 1。特别地,CC 的文字以任意次序、允许重复构成的所有析取彼此等价。此外,CC 被所有赋值满足当且仅当它含有一个互补对。

证明

  1. v(⋁j=1kℓj)=1  ⇔  (∃j≤k)  v(ℓj)=1v\left( \bigvee_{j=1}^{k} \ell_j \right) = 1 \;\Leftrightarrow\; (\exists j \leq k)\; v(\ell_j) = 1

    由 nn 个公式之析取的值引理(在关于广义德摩根律与分配律的一课中证明),该析取取值 11 当且仅当它的某一项取值 11。

  2. v(⋁j=1kℓj)=1  ⇔  v⊨Cv\left( \bigvee_{j=1}^{k} \ell_j \right) = 1 \;\Leftrightarrow\; \resaltar{v \models C}

    某个 ℓj\ell_j 取值 11,就是 CC 的某个文字取值 11,也就是 vv 满足 CC。这个条件不依赖于次序和重复,因为它只问有哪些文字。

  3. (∀v)  v⊨C  ⇔  (∃ℓ)  ℓ∈C,  ℓ∗∈C(\forall v)\; v \models C \;\Leftrightarrow\; (\exists \ell)\; \ell \in C, \; \ell^{*} \in C

    由简单合取式与子句引理(关于范式的一课),文字的析取有效当且仅当它含有一个互补对;由上所述,这对 CC 同样成立。

含有互补对的子句称为重言子句:它不施加任何条件,可以从任何集合中去掉而不改变其模型。把子句写成集合并非记号上的任性。若要由 (p∨q)(p \vee q) 和 (p∨¬q)(p \vee \neg q) 得到 pp,析取给出 (p∨p)(p \vee p),它等价于 pp,却不是同一个公式;用集合则有 {p}∪{p}={p}\{p\} \cup \{p\} = \{p\},重复文字的合并自动发生。

例题满足一个子句集合

设 S={{p,q},{¬p,r},{¬q}}S = \{ \{p, q\}, \{\neg p, r\}, \{\neg q\} \}。子句 {¬q}\{\neg q\} 要求 v(q)=0v(q) = 0;于是 {p,q}\{p, q\} 要求 v(p)=1v(p) = 1,于是 {¬p,r}\{\neg p, r\} 要求 v(r)=1v(r) = 1。赋值 11 给 pp 和 rr、赋值 00 给其余变元的那个赋值满足 SS,而且这是在 V(S)={p,q,r}V(S) = \{p, q, r\} 上唯一的可能。若添加子句 {¬r}\{\neg r\},则没有赋值满足扩大后的集合:它不可满足,尽管它不含 □\Box。

v(q)=0  ⇒  v(p)=1  ⇒  v(r)=1v(q) = 0 \;\Rightarrow\; v(p) = 1 \;\Rightarrow\; v(r) = 1