【计算复杂性理论】证明复杂性(Proof Complexity)(一):简介

证明复杂性介绍

1. 问题引入

我们知道,勾股定理有超过350种证明。[1]上中学的时候,我们只需要能给出一个证明就可以了;但是怎么衡量证明的好坏呢?一般来讲,我们倾向于认为简洁的、优雅的证明是好的。那这个又怎么体现呢?我们可以用证明的长度来衡量它的简洁程度。写出来最短的证明就是最简洁的,而简洁的证明一般更容易理解,因此也是最好的。

但是,即使是同一种证明,每个人写出来的长度也可能有所不同。那么怎么能让同一种证明有一种固定的写法呢?这就是证明论(Proof Theory)要研究的内容了。在证明论中,证明(即形式化的证明,formal proof)被定义为包含一些符号的字符串,它必须满足一些明确的规则并证明一个定理,而这个定理也是由符号组成的字符串表达的。[2]那么,证明就不能随便写出来,而是必须根据规则来写,从而保证同一种证明方法写出来的证明是完全一样的。这样,我们就可以通过衡量证明的长度来评价证明的好坏了。

写出证明的过程需要用到数理逻辑。一般的定理是用一阶逻辑写出来的,不过我们在这篇文章中不讨论一阶逻辑,而是讨论命题逻辑(propositional logic)。命题逻辑最基本的单位是命题变量(布尔变量),也就是只能取 1 1 1(true)或 0 0 0(false)的变量。变量可以由连接词(connective)连接起来,形成命题公式。赋值(assignment)就是给每个变量一个值,这样一个命题公式就有了一个确定的值。一个文字(literal)就是一个命题变量或它的否定。如果一个布尔公式在所有赋值下的值都是 1 1 1,那么称它为永真式(tautology)。

如果一个布尔公式在某一赋值下的值为 1 1 1,则称其为可满足的(satisfiable)。否则,若它在任何赋值下的值都为 0 0 0,则称其为不可满足的(unsatisfiable)。

我们说一个公式集合 T T T蕴含公式 α \alpha α,记作 T ⊨ α T\models\alpha Tα,就是说任何使 T T T中每个公式都为真的赋值都使 α \alpha α为真。如果公式 α \alpha α β \beta β满足 β ⊨ α \beta\models\alpha βα,就相当于 ¬ β ∨ α \neg\beta\lor\alpha ¬βα是永真式。两个公式 α \alpha α β \beta β是逻辑等价的当且仅当 β ⊨ α \beta\models\alpha βα α ⊨ β \alpha\models\beta αβ

证明复杂性一般研究的是命题逻辑中永真式的证明长度。这和计算复杂性理论有什么关系呢?一方面,我们的最终目的是让计算机自动寻找证明,所以这就涉及到了计算复杂性。另一方面,计算机想要找到一个证明所花费的时间首先至少是证明的长度,如果短证明不存在,那么计算机所花费的时间也注定是很长的。因此,研究短证明是否存在,是研究计算机自动寻找证明的前提条件。

证明复杂性是SAT求解的基石。我们知道,一个算法如果能判定一个布尔表达式是否满足,必须在它不可满足的时候给出对于它不可满足的证明。你可能会问,一个判定算法只要正确地判定布尔表达式是否可满足就可以了,为什么还要给出证明呢?因为,如果算法确实是正确的,那么它判定某个布尔表达式不可满足的事实就是一个证明。所以,想要设计出能够判定可满足性的算法,就必须让算法能够给出不可满足性的证明。对公式 A A A不可满足性的证明,就是对 ¬ A \neg A ¬A是永真式的证明,因此证明的长度SAT算法复杂度的下界。如果某些不可满足的公式只有指数级长度的证明(即最短证明的长度是公式长度的指数函数),那么SAT求解器证明它不可满足至少要花费指数级的时间,也就是说SAT求解器的最坏运行时间是指数级别的,从而我们可以判断SAT问题没有多项式时间的算法,进而证明 P ≠ N P \mathsf{P}\ne\mathsf{NP} P=NP

那么是不是所有的永真式都有短证明(一般说短证明就是多项式大小的证明)呢?这仍是一个未解决的问题,而且这个问题实际上就是 N P = ? c o N P \mathsf{NP}\overset{?}{=}\mathsf{coNP} NP=?coNP问题的另一种说法。我们以后将会看到这一点。

2. 一些定义

我们可以把一个命题公式表示成一个树形结构,比如公式 ¬ ( ¬ ( a ∨ b ) ∧ ( a ∨ ( c ∧ ¬ d ) ) ) \neg(\neg(a\lor b)\land(a\lor(c\land\neg d))) ¬(¬(ab)(a(c¬d)))就可以表示成

a
b
a
c
d

树的结点个数称为公式的大小,比如上面这个公式的大小就是 12 12 12

我们接下来给出逻辑深度(logical depth)的概念。一个公式 α \alpha α的逻辑深度 l d p ( α ) l\mathrm{dp}(\alpha) ldp(α)按如下方式定义:

  • 变量和常数的逻辑深度为 0 0 0
  • 对于一个 k k k元连接词 ∘ \circ ,公式 ∘ ( β 1 , ⋯   , β k ) \circ(\beta_1,\cdots,\beta_k) (β1,,βk)的逻辑深度为 1 + max ⁡ i l d p ( β i ) 1+\max\limits_{i}l\mathrm{dp}(\beta_i) 1+imaxldp(βi)

比如我们上面给出树形结构的那个公式的逻辑深度是 5 5 5

我们还需要替换(substitution)的概念。考虑一个公式 α \alpha α,它涉及到的变量为 v 1 , v 2 , ⋯   , v n v_1,v_2,\cdots,v_n v1,v2,,vn,对变量的一个替换 σ \sigma σ就是从每个变量 v i v_i vi到一个公式 β i \beta_i βi的映射,记作 σ ( α ) \sigma(\alpha) σ(α)。比如对公式 α = a ∨ ( b ∧ c ) \alpha=a\lor(b\land c) α=a(bc),进行替换 σ : a ↦ b , b ↦ b ∨ c , c ↦ a \sigma:a\mapsto b,b\mapsto b\lor c,c\mapsto a σ:ab,bbc,ca得到的结果 σ ( α ) \sigma(\alpha) σ(α)就是 b ∨ ( ( b ∨ c ) ∧ a ) b\lor((b\lor c)\land a) b((bc)a)

3. 证明系统

有没有办法自动验证证明的正确性呢?对于咱们一般写出来的证明,这很难实现;但这里我们讨论的形式化的证明是必须满足一定的规则的,对于这样的证明我们往往能够设计一个算法来验证证明的正确性。这样的验证算法(verifier)接受两个字符串:一个是要证明的命题,一个是对命题的证明,算法检查这个证明到底能否证明给定的命题,如果能则接受,如果不能则拒绝。一般要求验证算法不会拒绝正确的证明,也不会接受不正确的证明。而且,这个算法必须是多项式时间的。接下来,我们引入证明系统的形式化定义。

定义1(Cook-Reckhow[4]) 一个函数命题证明系统(function propositional proof system)是一个多项式时间可计算的函数 P : { 0 , 1 } ∗ → { 0 , 1 } ∗ P:{\{0,1\}}^*\to{\{0,1\}}^* P:{ 0,1}{ 0,1},其值域恰好是所以永真式构成的集合 T A U T \mathrm{TAUT} TAUT。一个字符串 w w w如果是的 P ( w ) = α P(w)=\alpha P(w)=α,则称 w w w α \alpha α的一个 P P P-证明。

事实上, P P P的定义域就是证明的集合,值域就是永真式的集合。 w w w被映射到 α \alpha α,就表明 w w w α \alpha α的一个证明;如果有字符串映射到 α \alpha α,则说明 α \alpha α有证明。要求 P P P的值域恰好是 T A U T \mathrm{TAUT} TAUT,就是说: P P P的值域不能比 T A U T \mathrm{TAUT} TAUT大(即不是永真式就不能有证明),也不能比 T A U T \mathrm{TAUT} TAUT小(必须所有永真式都有证明)。

P P P是一个证明系统, α \alpha α是一个命题公式。定义 s P ( α ) = { min ⁡ P ( π ) = α ∣ π ∣ , α ∈ T A U T ∞ , α ∉ T A U T \mathbf{s}_P(\alpha)=\begin{cases}\min\limits_{P(\pi)=\alpha}|\pi|,&\alpha\in\mathrm{TAUT}\\\infty,&\alpha\notin\mathrm{TAUT}\end{cases} sP(α)= P(π)=αminπ,,αTAUTα/TAUT,直观地讲这就是 α \alpha α在证明系统 P P P中最短证明的长度。定义一个证明系统 P P P是有多项式上界(p-bounded)的,当且仅当存在常数 c ≥ 1 c\ge 1 c1使得对于所有永真式 α \alpha α,都有 s P ( α ) ≤ ( ∣ α ∣ + c ) c \mathbf{s}_P(\alpha)\le{(|\alpha|+c)}^c sP(α)(α+c)c[4]。(这里括号里加 c c c是为了应对 ∣ α ∣ = 1 |\alpha|=1 α=1的情况;也可以写成 s P ( α ) = O ( ∣ α ∣ c ) \mathbf{s}_P(\alpha)=O\left({|\alpha|}^c\right) sP(α)=O(αc)。)

回想以下, T A U T \mathrm{TAUT} TAUT c o N P \mathsf{coNP} coNP完全问题(见【计算理论】复杂性类coNP
)。我们有如下定理:

定理2(Cook-Reckhow Theorem[4] N P = c o N P \mathsf{NP}=\mathsf{coNP} NP=coNP当且仅当存在具有多项式上界的证明系统。

证明提要:设有形式语言 L ⊆ { 0 , 1 } ∗ L\subseteq{\{0,1\}}^* L{ 0,1},若对于任意 x ∈ L x\in L xL,总存在一个长度不超过 ∣ x ∣ |x| x的多项式的证明来见证 x ∈ L x\in L xL这个事实,那么 L ∈ N P L\in\mathsf{NP} LNP。因为 T A U T \mathrm{TAUT} TAUT c o N P \mathsf{coNP} coNP完全的,所以 N P = c o N P \mathsf{NP}=\mathsf{coNP} NP=coNP等价于 T A U T ∈ N P \mathrm{TAUT}\in\mathsf{NP} TAUTNP,这就是说每个永真式都有一个长度为多项式级别的证明,那也就等价于存在具有多项式上界的证明系统。

一个目前还未解决的重要的问题是: N P = c o N P \mathsf{NP}=\mathsf{coNP} NP=coNP吗?也就是,是否存在具有多项式上界的证明系统?

上面我们介绍了具有多项式上界的证明系统,接下来我们介绍比较两个证明系统的方式:多项式模拟。

定义3[4] P P P Q Q Q是两个命题证明系统。一个多项式时间可计算的函数 f : { 0 , 1 } ∗ → { 0 , 1 } ∗ f:{\{0,1\}}^*\to{\{0,1\}}^* f:{ 0,1}{ 0,1} P P P Q Q Q的一个多项式模拟(p-simulation),当且仅当对于所有字符串 w w w,都有 Q ( w ) = P ( f ( w ) ) Q(w)=P(f(w)) Q(w)=P(f(w))

怎么理解呢?设 Q ( w ) = α Q(w)=\alpha Q(w)=α,即 w w w是对永真式 α \alpha α在证明系统 Q Q Q中的证明。那么,函数 f f f就是把 Q Q Q系统中的证明 w w w转化为了 P P P系统中的证明 f ( w ) f(w) f(w),使得 f ( w ) f(w) f(w) P P P系统中仍然是对 α \alpha α的证明。如果这样的函数 f f f存在,那也就是说每个 Q Q Q中的证明 w w w在系统 P P P中都有一个长度不超过 ∣ w ∣ |w| w的多项式的证明,因此系统 P P P的效力不弱于 Q Q Q。我们把 P P P Q Q Q有多项式模拟记作 P ≥ p Q P\ge_p Q PpQ。如果 P ≥ p Q P\ge_p Q PpQ Q ≥ p P Q\ge_p P QpP都成立,则称 P P P Q Q Q是多项式等价的,记作 P ≡ p Q P\equiv_p Q PpQ

定义证明系统 P P P是多项式最优(p-optimal)的,当且仅当 P P P多项式模拟其他所有证明系统 Q Q Q。说 P P P是最优(optimal)的,当且仅当对所有的证明系统 Q Q Q,存在 c ≥ 1 c\ge 1 c1,使得对于所有的永真式 α \alpha α,都有 s Q ( α ) ≤ s P ( α ) c \mathbf{s}_Q(\alpha)\le{\mathbf{s}_P(\alpha)}^c sQ(α)sP(α)c。相比于多项式最优,最优的定义不要求“多项式模拟”,即不要求多项式时间可计算的函数 f f f的存在性,因此是更松的条件。

下面的几个问题也是著名的未解决的问题:

  • 最优性问题:是否存在多项式最优,或者至少是最优的证明系统?
  • 证明搜索问题:是否存在的一个最优的确定性算法,使得对于任意永真式 τ \tau τ,都可以在证明系统 P P P中找到 τ \tau τ的一个证明?这个算法找到的证明长度和最短证明长度的关系是什么呢?算法的复杂度怎样呢?

如果存在具有多项式上界的证明系统,则 N P = c o N P \mathsf{NP}=\mathsf{coNP} NP=coNP;如果我们还可以在多项式时间内把每个永真式的证明找出来,则 P = N P \mathsf{P}=\mathsf{NP} P=NP。所以,研究证明复杂性对 P = ? N P \mathsf{P}\overset{?}{=}\mathsf{NP} P=?NP问题的解决具有重要意义。

参考文献

[1] Beetle, Ralph Dennison and Elisha Scott Loomis. “The Pythagorean Proposition.” (1968).
[2] Buss, Samuel R. “An Introduction to Proof Theory.” (2010).
[3] Krajícek, Jan. “Proof complexity.” Mathematics and Computation (2019). 这是这篇文章主要的参考文献。
[4] Cook, Stephen A. and Robert A. Reckhow. “The Relative Efficiency of Propositional Proof Systems.” Logic, Automata, and Computational Complexity (1979).

猜你喜欢

转载自blog.csdn.net/qaqwqaqwq/article/details/131465510
今日推荐