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

本文介绍了证明复杂性在命题逻辑中的概念,探讨了证明长度作为衡量证明质量的指标以及它与计算复杂性理论的关联。证明复杂性是SAT问题的基础,并与NP和coNP的等价性相关。文章还讨论了证明系统的定义、多项式模拟和最优证明系统,以及这些概念对P=?NP问题的影响。

证明复杂性介绍

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)))就可以表示成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值