PSPACE完全性学习笔记

本节所需的前置知识

定义1:令M是一个在所有输入上都停机的确定型图灵机。M的空间复杂度定义为函数 f :   N → N f:\ N\rightarrow N f: NN,其中 f ( n ) f\left(n\right) f(n)是M在任何长为n的输入上扫描带子方格的最大数。若空间复杂度为 f ( n ) f\left(n\right) f(n),则称M在空间 f ( n ) f\left(n\right) f(n)内运行。如果M是对所有输入在所有分支都停机的非确定型图灵机,则M的空间复杂度定义为对任何长为n的输入,在任何计算分支上所扫描的带子方格的最大数。

定义2:令 f : N → R + f:N\rightarrow R^+ f:NR+为一个函数。空间复杂度类 S P A C E ( f ( n ) ) SPACE\left(f\left(n\right)\right) SPACE(f(n)) N S P A C E ( f ( n ) ) NSPACE\left(f\left(n\right)\right) NSPACE(f(n))定义为:

S P A C E ( f ( n ) ) = SPACE\left(f\left(n\right)\right)= SPACE(f(n))={L|L是被 O ( f n ) O(f_n) O(fn)空间的确定型图灵机判定的语言}

N S P A C E ( f ( n ) ) = NSPACE\left(f\left(n\right)\right)= NSPACE(f(n))={L|L是被 O ( f n ) O(f_n) O(fn)空间的非确定型图灵机判定的语言}

引理3:设M是有q个状态和g个带子符号的LBA。对于长为n的带子,则M恰有 q n g n qng^n qngn个不同的格局。

  • 推论:如果M在 f ( n ) f\left(n\right) f(n)的空间内运行, ω \omega ω是长为n的输入,则M在 ω \omega ω上的格局数是 n 2 O ( f ( n ) ) n2^{O\left(f\left(n\right)\right)} n2O(f(n)),若 f ( n ) ≥ log ⁡ n f\left(n\right)\geq\log{n} f(n)logn,则 n 2 O ( f ( n ) ) = 2 O ( f ( n ) ) n2^{O\left(f\left(n\right)\right)}=2^{O\left(f\left(n\right)\right)} n2O(f(n))=2O(f(n))

定理4:(萨维奇定理)对于任何函数 f : N → R + f:N\rightarrow R^+ f:NR+,其中 f ( n ) ≥ n f\left(n\right)\geq n f(n)n,有:
N S P A C E ( f ( n ) ) ⊆ S P A C E ( f 2 ( n ) ) NSPACE\left(f\left(n\right)\right)\subseteq SPACE\left(f^2\left(n\right)\right) NSPACE(f(n))SPACE(f2(n))

第一部分:PSPACE类与PSPACE完全性

定义5:PSPACE是可以被确定型图灵机在多项式空间内判定的语言类,NPSPACE是可以被非确定型图灵机在多项式空间内判定的语言类,EXPSPACE是可以被确定型图灵机在指数空间内判定的语言类。

P S P A C E = ⋃ k S P A C E ( n k ) , N P S P A C E = ⋃ k N S P A C E ( n k ) , E X P S P A C E = ⋃ k S P A C E ( 2 n k ) PSPACE=\bigcup_{k} S P A C E\left(n^k\right),NPSPACE=\bigcup_{k} N S P A C E\left(n^k\right),EXPSPACE=\bigcup_{k} S P A C E\left(2^{n^k}\right) PSPACE=kSPACE(nk),NPSPACE=kNSPACE(nk),EXPSPACE=kSPACE(2nk)

根据萨维奇定理的结论可知,NPSPACE类和PSPACE类等价,因为任何多项式的平方仍然是多项式。对于一个图灵机,如果它的时间复杂度为 T ( n ) T\left(n\right) T(n),那么其空间复杂度至多为 T ( n ) T\left(n\right) T(n),这是因为每一步计算最多访问一个格子,这个结论对确定型图灵机和非确定型图灵机都成立。注意到多项式空间图灵机M如果判定语言L,则交换M的接受状态和拒绝状态可以得到 M ′ M^\prime M判定 L ‾ \overline{L} L,所以可知PSPACE关于补运算封闭, c o N P ⊆ P S P A C E coNP\subseteq PSPACE coNPPSPACE。除此之外,根据引理3的推论,我们知道对于空间复杂度 O ( f ( n ) ) O\left(f\left(n\right)\right) O(f(n))的图灵机,其存在一个格局数上限为 2 O ( f ( n ) ) 2^{O\left(f\left(n\right)\right)} 2O(f(n)),由于一个可判定的图灵机运行时间不能超过其格局总数(这是LBA部分的结论,如果超过则已经进入循环),空间复杂度 O ( f ( n ) ) O\left(f\left(n\right)\right) O(f(n))的图灵机时间复杂度不超过 2 O ( f ( n ) ) 2^{O\left(f\left(n\right)\right)} 2O(f(n)),这是 E X P T I M E ( ∪ k T I M E ( 2 n k ) ) EXPTIME(\cup_kTIME\left(2^{n^k}\right)) EXPTIMEkTIME(2nk)的范畴。

因此,我们可以导出目前学习的复杂度类的关系如下:

P ⊆ N P ⊆ P S P A C E ( N P S P A C E ) ⊆ E X P T I M E P\subseteq NP\subseteq PSPACE\left(NPSPACE\right)\subseteq EXPTIME PNPPSPACE(NPSPACE)EXPTIME

P ⊆ c o N P ⊆ P S P A C E ( N P S P A C E ) ⊆ E X P T I M E P\subseteq coNP\subseteq PSPACE\left(NPSPACE\right)\subseteq EXPTIME PcoNPPSPACE(NPSPACE)EXPTIME

我们可以证明时间层次定理,其表述为对于任何时间可构造函数 t : N → N t:N\rightarrow N t:NN,存在语言A,在时间 O ( t ( n ) ) O\left(t\left(n\right)\right) O(t(n))内可判定但在时间 o ( t ( n ) l o g t ( n ) ) o\left(\frac{t\left(n\right)}{logt\left(n\right)}\right) o(logt(n)t(n))内不可判定,由此可得 P ⫋ E X P T I M E P⫋EXPTIME PEXPTIME。因此,可以确定这些类的关系式间至少有一个真包含。目前学界普遍认为这四种类关系全为真包含。


复杂度关系图

第二部分:一个PSPACE完全的实例——TQBF问题。

定义6:对于一个语言A,称它为PSPACE完全当且仅当其属于PSPACE类并且PSPACE类中的每一个语言B都可以多项式时间归约到B,即 B ≤ p A B\le_pA BpA。如果仅满足 B ≤ p A B\le_pA BpA,则成A为PSPACE难。

这里存在一个值得注意的点是,我们要求的是多项式时间归约而非多项式空间规约。其主要原因是担心在使用多项式空间归约时,完全问题的容易解法不一定能导出其它归约到它的问题的容易解法。因此,在定义一个复杂度类时,规约模型必须比用来定义类本身的模型更加受限。

一个经典的PSPACE完全问题是TQBF问题(True Quantified Boolean Formula),其的定义是 T Q B F = { < ϕ > ∣ ϕ TQBF=\{<\phi>|\phi TQBF={<ϕ>ϕ是真的全量词化的布尔公式}。这里面存在几个新的定义,在SAT问题中我们定义了形如 ϕ = ( x ∨ y ) ∧ ( x ‾ ∨ y ) \phi=\left(x\vee y\right)\land\left(\overline{x}\vee y\right) ϕ=(xy)(xy)的布尔公式,在其中添加量词实际上就是对某个变量添加约束:

∃ \exists 是存在量词, ∃ x ϕ \exists x\phi xϕ的意思是对于变量x的某个值 ( 0 / 1 ) (0/1) 0/1,语句 ϕ \phi ϕ为真。

∀ \forall 是全称量词, ∀ x ϕ \forall x\phi xϕ的意思是对于变量x的全体值,语句 ϕ \phi ϕ全为真。

因此,我们可以称所有带量词的布尔公式为量词化布尔公式。除此之外,还称 ∃ x \exists x x ∀ x \forall x x中的x受到该量词约束,x本身还存在取值的域,一个例子是对于 ∃ x [ 2 x = 5 ] \exists x\left[2x=5\right] x[2x=5] x ∈ R x\in R xR x ∈ Z x\in Z xZ时前者为真后者为假。量词本身作用的范围是量化变量后的第一对括弧出现的语句段,该段称为辖域,如果所有量词的辖域都是其后所有语句部分(即所有量词都在最前面),则称这种语句为前束范式。值得注意的是,每个带量词的布尔公式都可以转化为与其等价的具有前束范式形式的量词化布尔公式。一个例子如下: ϕ = ∀ x ∃ y ( x ∨ y ) \phi=\forall x\exists y\left(x\vee y\right) ϕ=xy(xy)

如果一个量词化布尔公式所有变量都出现在某一量词的辖域内,则该公式为全量词化的(有时也称句子)。换言之,公式中每个变量都是受约束的。这种公式可以判断其真假性。

定理7:TQBF是PSPACE完全的。

证明分为两步,首先证明 T Q B F ∈ P S P A C E : TQBF\in PSPACE: TQBFPSPACE:

给定一个判定全量词化布尔公式 ϕ \phi ϕ的算法A:
A= “对于输入的全量词化布尔公式 < ϕ > <\phi> <ϕ>

  • 检查整条公式,如果整个公式不含量词,则其为一个常数运算表达式,计算其的值,如为真则接受,如为假则拒绝。
  • ϕ \phi ϕ可以表示为 ∃ x ψ \exists x\psi xψ,则在 ψ \psi ψ上递归调用算法A。首先用0替换x,然后再重新用1替换x,如果这两种替换有一个结果是接受的,则接受,否则拒绝。
  • ϕ \phi ϕ可以表示为 ∀ x ψ \forall x\psi xψ,则在 ψ \psi ψ上递归调用算法A。首先用0替换x,然后再重新用1替换x,如果这两种替换的两个结果都是接受的,则接受,否则拒绝。”

算法A可以判定全量词化布尔公式,又发现该公式递归层数恰为变量的个数,而每一层又只需要存储当前层变量被替换为0还是1,所以空间复杂度为 O ( N v a r ) O\left(N_{var}\right) O(Nvar),其中 N v a r N_{var} Nvar是公式中变量个数。因此,算法A可以在线性空间内运行。
证明的第二步就是证明对于任意一个图灵机M在 n k n^k nk空间内判定的语言A,有 A ≤ p T Q B F A\le_pTQBF ApTQBF。换言之, 我们所设计的多项式时间归约g可以满足 ω ∈ A ⟺ g ( ω ) ∈ T Q B F \omega\in A\Longleftrightarrow g\left(\omega\right)\in TQBF ωAg(ω)TQBF。对于 ω ∈ A \omega\in A ωA,我们可以得到M在 ω \omega ω上的接受计算历史,其为从 c s t a r t c_{start} cstart c a c c e p t c_{accept} caccept的有限序列。根据引理3的推论我们有以下两个重要结论:

  • ∀ ω ∈ A \forall\omega\in A ωA,可以得到M在 ω \omega ω上的一个长不超过 2 d n k 2^{dn^k} 2dnk的接受计算历史。
  • ∀ ω ∉ A \forall\omega\notin A ω/A,可以得到M在 ω \omega ω上的一个长不超过 2 d n k 2^{dn^k} 2dnk的拒绝计算历史。

类似SAT的P完全性证明,我们可以设计一个 d n k × 2 d n k dn^k\times2^{dn^k} dnk×2dnk的格局表:
image

现在设定对应格局的符号c,它对应一组布尔变量 { c i , s ∣ i = 1 , 2 , … , n k + 1 , s ∈ Q ∪ Γ ∪ ⊔   } \{c_{i,s}|i=1,2,\ldots,n^k+1,s\in Q\cup\Gamma\cup\sqcup\ \} {ci,si=1,2,,nk+1,sQΓ },对于某个变量指派不同的真假值可以表示具体的格局。如对于格局 101 q 2 10 ⊔ ⊔ … 101q_210\sqcup\sqcup\ldots 101q210可以表示为布尔公式 ψ c i = c 1 , 1 ∧ c 2 , 0 ∧ c 3 , 1 ∧ c 4 , q 2 ∧ c 5 , 1 ∧ c 6 , 0 ∧ c 7 ⊔ … ∧ c 0 , 0 ‾ … \psi_{c_i}=c_{1,1}\land c_{2,0}\land c_{3,1}\land c_{4,q_2}\land c_{5,1}\land c_{6,0}\land c_{7\sqcup}\ldots\land\overline{c_{0,0}}\ldots ψci=c1,1c2,0c3,1c4,q2c5,1c6,0c7c0,0

如果这里仅仅采用类似于库克-列文定理的策略,设计 ϕ = ϕ c e l l ∧ ϕ s t a r t ∧ ϕ m o v e ∧ ϕ a c c e p t \phi=\phi_{cell}\land\phi_{start}\land\phi_{move}\land\phi_{accept} ϕ=ϕcellϕstartϕmoveϕaccept,变量总数会变为 O ( 2 d n k ) O\left(2^{dn^k}\right) O(2dnk),因为格局表的大小变大了。但是注意到这样设计的布尔公式不存在量词,所以需要设计一个包含量词限制的布尔公式,从而使得 ϕ \phi ϕ的长度下降。

构造公式 ϕ c 1 , c 2 , t \phi_{c_1,c_2,t} ϕc1,c2,t其表示图灵机M至多用t步从 c 1 c_1 c1走到 c 2 c_2 c2,那么我们现在需要判定的是 ϕ c s t a r t , c a c c e p t , 2 d n k \phi_{c_{start},c_{accept},2^{dn^k}} ϕcstart,caccept,2dnk

首先设计 ϕ c 1 , c 2 , ≤ 1 \phi_{c_1,c_{2,}\le1} ϕc1,c2,1,其包含两种部分,首先是 ϕ c 1 , c 2 , 0 \phi_{c_1,c_{2,}0} ϕc1,c2,0,这只需要检查所有变量是否包含相同布尔值就可以了。
ϕ c 1 , c 2 , 0 = ⋀ 1 ≤ i ≤ n k + 1 , s ∈ c [ ( c 1 i , s ∧ c 2 i , s ) ∨ ( c 1 i , s ‾ ∧ c 2 i , s ‾ ) ] \phi_{c_1,c_{2,}0}=\bigwedge_{1\le i\le n^k+1,s\in c}\left[\left(c_{1i,s}\land c_{2i,s}\right)\vee\left(\overline{c_{1i,s}}\land\overline{c_{2i,s}}\right)\right] ϕc1,c2,0=1ink+1,sc[(c1i,sc2i,s)(c1i,sc2i,s)]
对于 ϕ c 1 , c 2 , 1 \phi_{c_1,c_{2,}1} ϕc1,c2,1,我们需要检查是否是一步迁移,其可以表示为:
ϕ c 1 , c 2 , 1 = ⋁ ( p , a , q , b , D ) ∈ δ [ ψ c 1 → c 2 ( p , a , q , b , D ) ] \phi_{c_1,c_{2,}1}=\bigvee_{\left(p,a,q,b,D\right)\in\delta}\left[\psi_{c_1\rightarrow c_2}^{\left(p,a,q,b,D\right)}\right] ϕc1,c2,1=(p,a,q,b,D)δ[ψc1c2(p,a,q,b,D)]
其中 ψ c 1 → c 2 ( p , a , q , b , D ) \psi_{c_1\rightarrow c_2}^{\left(p,a,q,b,D\right)} ψc1c2(p,a,q,b,D)表示这一步是通过迁移 δ ( p , a ) = ( q , b , D ) \delta\left(p,a\right)=\left(q,b,D\right) δ(p,a)=(q,b,D)得来的,其表达为:
ψ c 1 → c 2 ( p , a , q , b , D ) = ⋁ 1 ≤ j ≤ n k Ψ c 1 → c 2 j , ( p , a , q , b , D ) \psi_{c_1\rightarrow c_2}^{\left(p,a,q,b,D\right)}=\bigvee_{1\le j\le n^k}\Psi_{c_1\rightarrow c_2}^{j,\left(p,a,q,b,D\right)} ψc1c2(p,a,q,b,D)=1jnkΨc1c2j,(p,a,q,b,D)
Ψ c 1 → c 2 j , ( p , a , q , b , R ) \Psi_{c_1\rightarrow c_2}^{j,\left(p,a,q,b,R\right)} Ψc1c2j,(p,a,q,b,R)需要枚举的是当前状态p的位置,枚举得到一个位置后检查带头向右转移是否正确,其它位置是否不变(同理可以导出 Ψ c 1 → c 2 j , ( p , a , q , b , L ) \Psi_{c_1\rightarrow c_2}^{j,\left(p,a,q,b,L\right)} Ψc1c2j,(p,a,q,b,L)):
Ψ c 1 → c 2 j , ( p , a , q , b , R ) = c 1 j , p ∧ c 1 j + 1 , a ∧ c 2 j , b ∧ c 2 j + 1 , q ∧ ⋀ 1 ≤ i ≤ n k + 1 , i ≠ j . j + 1 , s ∈ c [ ( c 1 i , s ∧ c 2 i , s ) ∨ ( c 1 i , s ‾ ∧ c 2 i , s ‾ ) ] \Psi_{c_1\rightarrow c_2}^{j,\left(p,a,q,b,R\right)}=c_{1j,p}\land c_{1j+1,a}\land c_{2j,b}\land c_{2j+1,q}\land\bigwedge_{1\le i\le n^k+1,i\neq j.j+1,s\in c}\left[\left(c_{1i,s}\land c_{2i,s}\right)\vee\left(\overline{c_{1i,s}}\land\overline{c_{2i,s}}\right)\right] Ψc1c2j,(p,a,q,b,R)=c1j,pc1j+1,ac2j,bc2j+1,q1ink+1,i=j.j+1,sc[(c1i,sc2i,s)(c1i,sc2i,s)]

那么对于t>1,我们就可以引入量词并进行递归:一个最简单的想法是设计为:
ϕ c 1 , c 2 , t = ∃ m [ ϕ c 1 , m , t 2 ∨ ϕ m , c 2 , t 2 ] \phi_{c_1,c_2,t}=\exists m\left[\phi_{c_1,m,\frac{t}{2}}\vee\phi_{m,c_2,\frac{t}{2}}\right] ϕc1,c2,t=m[ϕc1,m,2tϕm,c2,2t]
这种设计下的 ϕ c 1 , c 2 , t \phi_{c_1,c_2,t} ϕc1,c2,t是正确的,它本质是枚举了中间格局,随后进行递归,但是如果计算公式长度会发现这个公式太长了。注意到递归会停止在 ϕ c 1 , c 2 , ≤ 1 \phi_{c_1,c_{2,}\le1} ϕc1,c2,1,根据上文的设计,得这一层的长度为 L = O ( n 2 k ) L=O\left(n^{2k}\right) L=O(n2k)。注意到递归每一次分裂得到两个子公式,逻辑上会递归 l o g ( 2 d n k ) ∼ d n k log\left(2^{dn^k}\right)\sim dn^k log(2dnk)dnk层,最终会得到 2 d n k × L 2^{dn^k}\times L 2dnk×L那么长的公式,这是指数级别的,不可行。
可以再引入存在量词 ∀ ¬ \forall¬ ¬来解决这个问题:
ϕ c 1 , c 2 , t = ∃ m ∀ ( c 3 , c 4 ) ∈ { ( c 1 , m ) , ( m , c 2 ) } [ ϕ c 3 , c 4 , t 2 ] \phi_{c_1,c_2,t}=\exists m\forall\left(c_3,c_4\right)\in\{\left(c_1,m\right),\left(m,c_2\right)\}\left[\phi_{c_3,c_4,\frac{t}{2}}\right] ϕc1,c2,t=m(c3,c4){(c1,m),(m,c2)}[ϕc3,c4,2t]
这种书写方式本质是把原本递归产生的两个子公式“折叠”成了一个子公式。通过 ∀ ( c 3 , c 4 ) ∈ { ( c 1 , m ) , ( m , c 2 ) } \forall\left(c_3,c_4\right)\in\{\left(c_1,m\right),\left(m,c_2\right)\} (c3,c4){(c1,m),(m,c2)},就表明了格局c_3和c_4可以取c_1,m或者m,c_2,从而实现了用一个子公式表达上文两个子公式的效果。此时我们不妨令 f ( t ) 为 ϕ c 1 , c 2 , t f\left(t\right)为\phi_{c_1,c_2,t} f(t)ϕc1,c2,t的长度,可以列出如下的递推式:
f ( t ) = f ( t − 1 ) + O ( n k ) = f ( 0 ) + t × O ( n k ) = L + t × O ( n k ) f\left(t\right)=f\left(t-1\right)+O\left(n^k\right)=f\left(0\right)+t\times O\left(n^k\right)=L+t\times O\left(n^k\right) f(t)=f(t1)+O(nk)=f(0)+t×O(nk)=L+t×O(nk)
从而有
f ( d n k ) = O ( n 2 k ) + d n k × O ( n k ) = O ( n 2 k ) f\left(dn^k\right)=O\left(n^{2k}\right)+dn^k\times O\left(n^k\right)=O\left(n^{2k}\right) f(dnk)=O(n2k)+dnk×O(nk)=O(n2k)
因此可以得到 ϕ c s t a r t , c a c c e p t , 2 d n k \phi_{c_{start},c_{accept},2^{dn^k}} ϕcstart,caccept,2dnk的长度为 O ( n 2 k ) O\left(n^{2k}\right) O(n2k)的。
接着我们再设计布尔公式 ψ s t a r t ( c ) 和 ψ a c c e p t ( c ) \psi_{start}\left(c\right)和\psi_{accept}(c) ψstart(c)ψaccept(c)用来判断起始格局和接受格局,最后就能得到我们所需要的全量化布尔公式:
g ( ω ) = ∃ c ∃ d [ ψ s t a r t ( c ) ∧ ψ a c c e p t ( d ) ∧ ϕ c , d , 2 d n k ] g\left(\omega\right)=\exists c\exists d\left[\psi_{start}\left(c\right)\land\psi_{accept}\left(d\right)\land\phi_{c,d,2^{dn^k}}\right] g(ω)=cd[ψstart(c)ψaccept(d)ϕc,d,2dnk]
对于 ψ s t a r t ( c ) 和 ψ a c c e p t ( c ) \psi_{start}\left(c\right)和\psi_{accept}(c) ψstart(c)ψaccept(c),它们本质和 ϕ c 1 , c 2 , 0 \phi_{c_1,c_{2,}0} ϕc1,c2,0一样是检查检查所有变量是否包含相同布尔值,也就是 O ( n k ) O\left(n^k\right) O(nk)的,所以对于函数 g : ω → g ( ω ) g:\omega\rightarrow g\left(\omega\right) g:ωg(ω)它的复杂度为 O ( n 2 k ) O\left(n^{2k}\right) O(n2k),因此g是一个从A到TQBF的多项式时间归约。
从而有 A ≤ p T Q B F A\le_pTQBF ApTQBF,第一步又证明了 T Q B F ∈ P S P A C E TQBF\in PSPACE TQBFPSPACE,综上可得TQBF是PSPACE完全的。

PSPACE完全性学习笔记_第1张图片
PSPACE完全性学习笔记_第2张图片

你可能感兴趣的:(算法)