【计算复杂性理论】证明复杂性(二):归结(Resolution)与扩展归结(Extended Resolution)证明系统

往期文章:

归结证明系统是一种非常简单、非常优雅的证明系统,它在SAT求解和自动定理证明中有广泛应用。

在这篇文章中,我们规定输入是子句集,也就是一些子句的集合,它们和合取范式是等价的。合取范式的子句组成的集合就是子句集;子句集可满足等价于对应的合取范式可满足。

一、基础定义

为了方便表示文字 l l l及其否定,我们定义 l ε = { l , ε = 1 ¬ l , ε = 0 l^{\varepsilon}=\begin{cases}l,&\varepsilon=1\\\neg l,&\varepsilon=0\end{cases} lε={ l,¬l,ε=1ε=0。当 l l l被赋值为 ε \varepsilon ε时, l ε = 1 l^\varepsilon=1 lε=1

在演算式证明系统中,证明是由证明步骤(proof steps)(也叫证明行,proof lines)组成的。证明的每个步骤可能是一个公式,一系列公式或具有某种形式的公式,具体取决于演算的规则。定义 k ( π ) \mathbf{k}(\pi) k(π)为证明 π \pi π的步骤数(行数);证明系统 P P P中永真式 α \alpha α最短证明的步骤数记作 k P ( α ) \mathbf{k}_P(\alpha) kP(α)

二、归结证明系统

归结证明系统的每一行是一个子句(即简单析取式) C : l 1 ∨ l 2 ∨ ⋯ ∨ l w C:l_1\lor l_2\lor\cdots\lor l_w C:l1l2lw,常写作集合 { l 1 , l 2 , ⋯   , l w } \{l_1,l_2,\cdots,l_w\} { l1,l2,,lw}。子句 C ∪ { l } C\cup\{l\} C{ l}简写作 C , l C,l C,l。归结证明系统只有一条规则,即归结规则: C , l D , ¬ l ‾ C ∪ D \underline{C,l\quad D,\neg l}\\C\cup D C,lD,¬lCD比如你有两个子句 a ∨ b ∨ l a\lor b\lor l abl b ∨ ¬ l ∨ c b\lor\neg l\lor c b¬lc,那么你就可以得到子句 a ∨ b ∨ c a\lor b\lor c abc

归结规则是可靠的,因为 ( C ∨ l ) ∧ ( D ∨ ¬ l ) ⊨ C ∨ D (C\lor l)\land(D\lor\neg l)\models C\lor D (Cl)(D¬l)CD。可以这么理解:若 C ∨ l C\lor l Cl成立,则 C ∨ D ∨ l C\lor D\lor l CDl成立;若 D ∨ ¬ l D\lor\neg l D¬l成立,则 C ∨ D ∨ ¬ l C\lor D\lor\neg l CD¬l成立;将这两个推论结合得到 C ∨ D C\lor D CD成立。

归结是一个反驳证明系统(refutation proof system):它不是用来证明一个公式是永真式的,而是证明一个公式不可满足。归结从输入的几个子句开始,不断应用归结规则推出新的子句,最后得到空子句 ∅ \emptyset 就说明输入的合取范式是不可满足的(合取范式就是一些子句的合取)。

定义1 C \mathcal{C} C是一个子句集。 C \mathcal{C} C的一个归结反驳是一系列子句 D 1 , D 2 , ⋯   , D k D_1,D_2,\cdots,D_k D1,D2,,Dk,满足:

  • 对于任意 i ≤ k i\le k ik D i D_i Di要么属于 C \mathcal{C} C,要么是从 D u D_u Du D v D_v Dv通过归结规则推出来的;
  • D k = ∅ D_k=\emptyset Dk=

此时,归结反驳的步数就是 k k k

下面我们来证明归结证明系统的完备性(completeness),即每个不可满足的子句集都有一个归结反驳。

定理2 C \mathcal{C} C是一个不可满足的子句集(即合取范式的各个子句组成的集合),则存在对 C \mathcal{C} C的一个归结反驳。

证明:设 C \mathcal{C} C涉及 n n n个变量,令 p p p是其中任意一个变量。我们可以把 C \mathcal{C} C分成四部分:

  • C 0 , 0 = { D ∈ C ∣ D 不含 p 或 ¬ p } \mathcal{C}_{0,0}=\{D\in \mathcal{C}|D\text{不含}p\text{或}\neg p\} C0,0={ DCD不含p¬p}
  • C 1 , 0 = { D ∈ C ∣ D 含 p 但不含 ¬ p } \mathcal{C}_{1,0}=\{D\in \mathcal{C}|D\text{含}p\text{但不含}\neg p\} C1,0={ DCDp但不含¬p}
  • C 0 , 1 = { D ∈ C ∣ D 不含 p 但含 ¬ p } \mathcal{C}_{0,1}=\{D\in \mathcal{C}|D\text{不含}p\text{但含}\neg p\} C0,1={ DCD不含p但含¬p}
  • C 1 , 1 = { D ∈ C ∣ D 含 p 和 ¬ p } \mathcal{C}_{1,1}=\{D\in \mathcal{C}|D\text{含}p\text{和}\neg p\} C1,1={ DCDp¬p}(这种情况不用考虑,因为 p ∨ ¬ p ⇔ 1 p\lor\neg p\Leftrightarrow 1 p¬p1自动满足)

R ( u , v ) R(u,v) R(u,v)代表 u u u v v v归结所得的子句。令 H = { R ( u , v ) ∣ u ∈ C 1 , 0 , v ∈ C 0 , 1 } \mathcal{H}=\{R(u,v)|u\in\mathcal{C}_{1,0},v\in\mathcal{C}_{0,1}\} H={ R(u,v)uC1,0,vC0,1},也就是只含 p p p和只含 ¬ p \neg p ¬p的子句归结所得的所有子句的集合。那么 C 0 , 0 ∪ H \mathcal{C}_{0,0}\cup \mathcal{H} C0,0H是不可满足的。这是因为,倘若一个赋值满足了 C 0 , 0 ∪ H \mathcal{C}_{0,0}\cup \mathcal{H} C0,0H中的每个子句,那么它就会满足 C 0 , 1 \mathcal{C}_{0,1} C0,1的全部子句或者 C 1 , 0 \mathcal{C}_{1,0} C1,0的全部子句。否则的话,如果它不满足 C 0 , 1 \mathcal{C}_{0,1} C0,1中的一个子句 u ∨ ¬ p u\lor\neg p u¬p也不满足 C 1 , 0 \mathcal{C}_{1,0} C1,0中的一个子句 v ∨ p v\lor p vp,那么它也不会满足 R ( u ∨ ¬ p , v ∨ p ) = u ∨ v R(u\lor\neg p,v\lor p)=u\lor v R(u¬p,vp)=uv。所以说 C 0 , 1 \mathcal{C}_{0,1} C0,1 C 1 , 0 \mathcal{C}_{1,0} C1,0中至少有一个是全部满足的。此时,我们在这个赋值的基础上设置 p p p的值,使得:如果 C 0 , 1 \mathcal{C}_{0,1} C0,1全部满足,则令 p = 1 p=1 p=1使得 C 1 , 0 \mathcal{C}_{1,0} C1,0也全部满足;如果 C 1 , 0 \mathcal{C}_{1,0} C1,0全部满足,则令 p = 0 p=0 p=0使得 C 0 , 1 \mathcal{C}_{0,1} C0,1也全部满足。这样, C 0 , 0 \mathcal{C}_{0,0} C0,0 C 0 , 1 \mathcal{C}_{0,1} C0,1 C 1 , 0 \mathcal{C}_{1,0} C1,0都全部满足,使得 C \mathcal{C} C全部满足,这与 C \mathcal{C} C不可满足矛盾。因此 C 0 , 0 ∪ H \mathcal{C}_{0,0}\cup \mathcal{H} C0,0H是不可满足的。

C 0 , 0 ∪ H \mathcal{C}_{0,0}\cup \mathcal{H} C0,0H的每个子句都是从 C \mathcal{C} C中直接或应用一次归结得到的,它相比 C \mathcal{C} C少了一个变量。重复进行消去变量的过程,总能消去所有变量并得到空子句 ∅ \emptyset 。这样我们就证明了归结的完备性。

三、宽度和大小

一个子句 D D D的大小, ∣ D ∣ |D| D,也被称为子句 D D D的宽度(width),记作 w ( D ) \mathbf{w}(D) w(D),它也就是 D D D中文字的个数。对于子句集 C \mathcal{C} C,定义其宽度 w ( C ) = max ⁡ D ∈ C w ( D ) \mathbf{w}(C)=\max\limits_{D\in\mathcal{C}}\mathbf{w}(D) w(C)=DCmaxw(D),即其中宽度最大的子句的宽度。一个归结证明 π \pi π的宽度 w ( π ) \mathbf{w}(\pi) w(π)定义为 π \pi π中出现的宽度最大的子句的宽度。定义 w R ( C ) \mathbf{w}_R(\mathcal{C}) wR(C)为子句集 C \mathcal{C} C宽度最小的证明的宽度,即 w R ( C ) = min ⁡ π w ( π ) \mathbf{w}_R(\mathcal{C})=\min\limits_{\pi}\mathbf{w}(\pi) wR(C)=πminw(π)

为什么要研究证明的宽度呢?这是因为,对于一个宽度为 w w w的证明,其行数(即步骤数)是有上界的:它不会超过所有宽度至多为 w w w的子句的个数。如果我们要求子句中 p p p ¬ p \neg p ¬p不得同时出现,则宽度为 w w w的子句的个数为 2 w C n w 2^w C_{n}^{w} 2wCnw,其中 n n n是变量个数。我们接下来将会看到,一个短的归结证明可以被转化为一个窄的归结证明(即宽度较小的归结证明)。如果我们能证明某个子句集的证明宽度有下界,那么就能证明其证明的行数也有下界。

我们称一个部分赋值为限制(restriction)。它是对某些变量的赋值。对于文字 l l l,布尔值 ε ∈ { 0 , 1 } \varepsilon\in\{0,1\} ε{ 0,1}和子句 C C C,我们定义 C C C在赋值 l = ε l=\varepsilon l=ε限制下的结果为子句 C ↾ l = ε : = { C , 若 l 和 ¬ l 都没有在 C 中出现 1 , 若 l 在 C 中出现 C ∖ { l ¬ ε } , 若 l ¬ ε 在 C 中出现(这就是 C 和 l ε 归结的结果 C\upharpoonright l=\varepsilon:=\begin{cases} C,&\text{若}l\text{和}\neg l\text{都没有在}C\text{中出现}\\ 1,&\text{若}l\text{在}C\text{中出现}\\ C\setminus\{l^{\neg\varepsilon}\},&\text{若}l^{\neg\varepsilon}\text{在}C\text{中出现(这就是}C\text{和}l^\varepsilon\text{归结的结果} \end{cases} Cl=ε:= C,1,C{ l¬ε},l¬l都没有在C中出现lC中出现l¬εC中出现(这就是Clε归结的结果比如,子句 C = a ∨ b ∨ c C=a\lor b\lor c C=abc在赋值 a = 1 a=1 a=1下变成 1 1 1(因为它直接被满足了),在赋值 a = 0 a=0 a=0下变成 b ∨ c b\lor c b

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值