Ladner定理
若 P ≠ N P \mathbf P\ne\mathbf{NP} P=NP,则 P ∪ N P C ≠ N P \mathbf P\cup\mathbf{NPC}\ne\mathbf{NP} P∪NPC=NP,即存在 N P I \mathbf{NPI} NPI问题。
证明
由Cook-Levin定理知 S A T \mathrm{SAT} SAT问题为 N P C \mathbf{NPC} NPC问题。
定义语言
S
A
T
H
=
{
ψ
0
11
⋯
1
⏟
n
H
(
n
)
个
1
∣
ψ
∈
S
A
T
且
∣
ψ
∣
=
n
}
\mathrm{SAT}_H=\{\psi0\underbrace{11\cdots1}_{n^{H(n)}个1}|\psi\in\mathrm{SAT}且|\psi|=n\}
SATH={ψ0nH(n)个1
11⋯1∣ψ∈SAT且∣ψ∣=n}
定义函数
H
(
n
)
=
i
,
i
<
log
log
n
且是满足以下条件的最小值:
对于任意
∣
x
∣
≤
log
n
的输入
x
,
M
i
(
x
)
在
i
∣
x
∣
i
个步骤内输出
S
A
T
H
(
x
)
。
如果上述
i
不存在,则
H
(
n
)
=
log
log
n
。
H(n)=i,\quad i<\log\log n且是满足以下条件的最小值:\\对于任意|x|\le\log n的输入x,\mathbb M_i(x)在i|x|^i个步骤内输出\mathrm{SAT}_H(x)。\\ 如果上述i不存在,则H(n)=\log\log n。
H(n)=i,i<loglogn且是满足以下条件的最小值:对于任意∣x∣≤logn的输入x,Mi(x)在i∣x∣i个步骤内输出SATH(x)。如果上述i不存在,则H(n)=loglogn。
显然
H
(
n
)
H(n)
H(n)是个非递减函数。
计算 H ( n ) H(n) H(n)的算法:
for i i i in [ 0.. log log n − 1 ] [0..\log\log n-1] [0..loglogn−1] :
for x x x with ∣ x ∣ ≤ log n |x|\le\log n ∣x∣≤logn :
模拟 M i ( x ) \mathbb M_i(x) Mi(x)的计算,使用通用图灵机 U ( i , x ) \mathbb U(i,x) U(i,x) ; O ( c C log C ) O(cC\log C) O(cClogC)
计算 S A T H ( x ) \mathrm{SAT}_H(x) SATH(x) ;
计算 S A T H ( x ) \mathrm{SAT}_H(x) SATH(x)的算法:
获得 x x x中 ψ ′ \psi' ψ′的长度 n ′ n' n′ ; n ′ ≤ ∣ x ∣ ≤ log n n'\le|x|\le\log n n′≤∣x∣≤logn
暴力判断 ψ ′ \psi' ψ′是否在 S A T \mathrm{SAT} SAT中 ; O ( 2 n ′ ) = O ( n ) O(2^{n'})=O(n) O(2n′)=O(n)
计算 H ( n ′ ) H(n') H(n′) ; T ( log n ) T(\log n) T(logn)
计算 n ′ H ( n ′ ) n'^{H(n')} n′H(n′) ; O ( ∣ n ′ ∣ H ( n ′ ) ) = O ( ( log log n ) log log n ′ ) O(|n'|^{H(n')})=O((\log\log n)^{\log\log n'}) O(∣n′∣H(n′))=O((loglogn)loglogn′)
判断 x x x中末尾的1串的长度是否为 n ′ H ( n ′ ) n'^{H(n')} n′H(n′) ; O ( n ′ H ( n ′ ) ) = O ( ( log n ) log log n ′ ) O(n'^{H(n')})=O((\log n)^{\log\log n'}) O(n′H(n′))=O((logn)loglogn′)
计算
H
(
n
)
H(n)
H(n)的时间函数
T
(
n
)
T(n)
T(n)满足
T
(
n
)
≤
(
log
log
n
)
(
2
1
+
log
n
)
(
c
C
log
C
+
O
(
n
)
+
T
(
log
n
)
+
⋯
)
其中
c
=
c
(
∣
i
∣
)
=
c
(
log
log
log
n
)
,
C
=
i
∣
x
∣
i
=
O
(
(
log
log
n
)
(
log
n
)
log
log
n
)
T(n)\le(\log\log n)(2^{1+\log n})(cC\log C+O(n)+T(\log n)+\cdots)\\ 其中c=c(|i|)=c(\log\log\log n),\quad C=i|x|^i=O((\log\log n)(\log n)^{\log\log n})
T(n)≤(loglogn)(21+logn)(cClogC+O(n)+T(logn)+⋯)其中c=c(∣i∣)=c(logloglogn),C=i∣x∣i=O((loglogn)(logn)loglogn)
总之
H
(
n
)
=
o
(
n
3
)
H(n)=o(n^3)
H(n)=o(n3)。?
引理:若 P ≠ N P \mathbf P\ne\mathbf{NP} P=NP,则 S A T H ∉ P \mathrm{SAT}_H\notin\mathbf P SATH∈/P。
假定 S A T H ∈ P \mathrm{SAT}_H\in\mathbf P SATH∈P,存在 M α \mathbb M_\alpha Mα在 c ∣ x ∣ c c|x|^c c∣x∣c步骤内判定 S A T H ( x ) \mathrm{SAT}_H(x) SATH(x),因为与 M α \mathbb M_\alpha Mα等效的图灵机编码有无限个,可以取足够大的 α > c \alpha>c α>c, M α ( x ) \mathbb M_\alpha(x) Mα(x)可以在 α ∣ x ∣ α \alpha|x|^\alpha α∣x∣α步骤内判定 S A T H ( x ) \mathrm{SAT}_H(x) SATH(x),当 n n n足够大使得 α < log log n \alpha<\log\log n α<loglogn以后,按照定义 H ( n ) = α H(n)=\alpha H(n)=α恒成立。也就是说,当 n n n足够大时, ψ ∈ S A T \psi\in\mathrm{SAT} ψ∈SAT当且仅当 ψ 0 11 ⋯ 1 ⏟ n α 个 1 ∈ S A T H \psi0\underbrace{11\cdots1}_{n^\alpha个1}\in\mathrm{SAT}_H ψ0nα个1 11⋯1∈SATH,即 S A T ≤ K S A T H \mathrm{SAT}\le_{K}\mathrm{SAT}_H SAT≤KSATH,则 S A T ∈ P \mathrm{SAT}\in\mathbf P SAT∈P,这与 P ≠ N P \mathbf P\ne\mathbf{NP} P=NP矛盾。故 S A T H ∉ P \mathrm{SAT}_H\notin\mathbf P SATH∈/P。
引理:若 P ≠ N P \mathbf P\ne\mathbf{NP} P=NP,则 S A T H ∉ N P C \mathrm{SAT}_H\notin\mathbf {NPC} SATH∈/NPC。
假定
S
A
T
H
∈
N
P
C
\mathrm{SAT}_H\in\mathbf{NPC}
SATH∈NPC,存在多项式
d
∣
φ
∣
d
d|\varphi|^d
d∣φ∣d时间内可计算的卡普规约
r
:
S
A
T
↦
S
A
T
H
r:\mathrm{SAT}\mapsto\mathrm{SAT}_H
r:SAT↦SATH,即
φ
∈
S
A
T
当且仅当
r
(
φ
)
=
ψ
0
11
⋯
1
⏟
n
H
(
n
)
个
1
∈
S
A
T
H
\varphi\in\mathrm{SAT}当且仅当r(\varphi)=\psi0\underbrace{11\cdots1}_{n^{H(n)}个1}\in\mathrm{SAT}_H
φ∈SAT当且仅当r(φ)=ψ0nH(n)个1
11⋯1∈SATH
因为
H
(
n
)
H(n)
H(n)是趋于无穷大的,存在足够大的
N
N
N,当
∣
r
(
φ
)
∣
=
∣
ψ
0
11
⋯
1
⏟
n
H
(
n
)
个
1
∣
>
N
|r(\varphi)|=|\psi0\underbrace{11\cdots1}_{n^{H(n)}个1}|>N
∣r(φ)∣=∣ψ0nH(n)个1
11⋯1∣>N
时
H
(
n
)
>
2
d
+
1
H(n)>2d+1
H(n)>2d+1且
∣
ψ
∣
>
d
|\psi|>d
∣ψ∣>d。在这种情况下
∣
ψ
∣
2
d
+
1
<
n
H
(
n
)
<
∣
r
(
φ
)
∣
≤
d
∣
φ
∣
d
<
∣
ψ
∣
∣
φ
∣
d
|\psi|^{2d+1}<n^{H(n)}<|r(\varphi)|\le d|\varphi|^d<|\psi||\varphi|^d
∣ψ∣2d+1<nH(n)<∣r(φ)∣≤d∣φ∣d<∣ψ∣∣φ∣d
得到
∣
ψ
∣
<
∣
φ
∣
|\psi|<\sqrt{|\varphi|}
∣ψ∣<∣φ∣,于是我们得到了多项式时间判定
S
A
T
(
φ
)
\mathrm{SAT(\varphi)}
SAT(φ)的递归算法:
计算 r ( φ ) r(\varphi) r(φ),判断结果是否为 ψ 0 11 ⋯ 1 ⏟ n H ( n ) 个 1 \psi0\underbrace{11\cdots1}_{n^{H(n)}个1} ψ0nH(n)个1 11⋯1的形式,若不是,拒绝 φ \varphi φ。
若 ∣ r ( φ ) ∣ > N |r(\varphi)|>N ∣r(φ)∣>N,递归调用 S A T ( ψ ) \mathrm{SAT(\psi)} SAT(ψ),否则暴力判定 ψ \psi ψ是否在 S A T \mathrm{SAT} SAT中。
设递归深度为
k
k
k,即递归
k
−
1
k-1
k−1次时依然要继续递归,则
⋯
∣
φ
∣
⏟
k
−
1
个根号
=
∣
φ
∣
2
1
−
k
>
N
N
2
k
−
1
<
∣
φ
∣
2
k
−
1
log
N
<
log
∣
φ
∣
(
k
−
1
)
log
2
+
log
log
N
<
log
log
∣
φ
∣
k
=
O
(
log
log
∣
φ
∣
)
\underbrace{\sqrt{\cdots\sqrt{|\varphi|}}}_{k-1个根号}=|\varphi|^{2^{1-k}}>N\\ N^{2^{k-1}}<|\varphi|\\ 2^{k-1}\log N<\log|\varphi|\\ (k-1)\log2+\log\log N<\log\log|\varphi|\\ k=O(\log\log|\varphi|)
k−1个根号
⋯∣φ∣=∣φ∣21−k>NN2k−1<∣φ∣2k−1logN<log∣φ∣(k−1)log2+loglogN<loglog∣φ∣k=O(loglog∣φ∣)
递归每一层都只需要多项式的时间,而递归边界暴力判定
ψ
\psi
ψ时,由于
∣
ψ
∣
≤
N
|\psi|\le N
∣ψ∣≤N,时间为常数,故
S
A
T
∈
P
\mathrm{SAT}\in\mathbf P
SAT∈P,矛盾。故
S
A
T
H
∉
N
P
C
\mathrm{SAT}_H\notin\mathbf{NPC}
SATH∈/NPC。
设L可被多项式NDTM
N
\mathbb N
N判定。构造从L到SAT的隐式对数空间可计算的Cook-Levin规约。
定理4.6
一个语言L可被一致电路族接受,当且仅当 L ∈ P L\in\mathbf P L∈P.
电路族 { C n } \{C_n\} {Cn}是一致的,当且仅当存在一个将 1 n 1^n 1n映射到 C n C_n Cn编码的隐式对数空间可计算函数。
证明
证明 ⇒ \Rightarrow ⇒:
设L可被一致电路族接受。构造一DTM M \mathbb M M,当输入是x时,调用隐式对数空间可计算函数在多项式时间内产生一个多项式大小的电路 C n C_{n} Cn,然后在多项式时间完成 C n ( x ) C_n(x) Cn(x)的计算。因此 L ∈ P L\in\mathbf P L∈P.
证明 ⇐ \Leftarrow ⇐:
设只有一条读写带的 M \mathbb M M在多项式时间t=T(n)内判定L.
用 T 0 , ⋯ , T t T_0,\cdots,T_t T0,⋯,Tt表示 M ( x ) \mathbb M(x) M(x)计算的格局序列, T i T_i Ti包含了t+1个格子里的所有符号, T i j T_{ij} Tij表示 T i T_i Ti中第j个符号,其中 0 ≤ j ≤ t + 1 0\le j\le t+1 0≤j≤t+1. 显然有 T i 0 = ⊳ T_{i0}=\rhd Ti0=⊳和 T i ( t + 1 ) = □ T_{i(t+1)}=\Box Ti(t+1)=□.
我们再将 T i j T_{ij} Tij换为一个三元组(s, h, q),其中s就是所指格子中的符号;h取布尔值,表示读写头是否指向该格;q是格局所处的状态。
第t+1个格局和第t个格局有如下的局部递推关系: T i j T_{ij} Tij可从 T ( i − 1 ) ( j − 1 ) , T ( i − 1 ) j , T ( i − 1 ) ( j + 1 ) T_{(i-1)(j-1)},T_{(i-1)j},T_{(i-1)(j+1)} T(i−1)(j−1),T(i−1)j,T(i−1)(j+1)中算出来,而且这个计算只依赖于 M \mathbb M M,不依赖于输入x,这可以用同一个电路C实现,如图所示:
电路 C i j C_{ij} Cij的输入是 C ( i − 1 ) ( j − 1 ) , C ( i − 1 ) j , C ( i − 1 ) ( j + 1 ) C_{(i-1)(j-1)},C_{(i-1)j},C_{(i-1)(j+1)} C(i−1)(j−1),C(i−1)j,C(i−1)(j+1)的输出。所有 C 0 j C_{0j} C0j直接绑定为起始格局(的二进制编码);所有的 C i 0 C_{i0} Ci0绑定为 ⊳ \rhd ⊳;所有 C i ( t + 1 ) C_{i(t+1)} Ci(t+1)绑定为 □ \Box □. 最终得到的电路可接受L中输入长度是n的串。可以用一个类似于深度优先遍历的算法将最终电路的邻接矩阵在对数空间里输出。
引理4.1
对所有 L ∈ N P L\in\mathbf{NP} L∈NP,有 L ≤ L CKT-SAT L\le_L\text{CKT-SAT} L≤LCKT-SAT.
其中CKT-SAT是电路版本的可满足性问题,即所有那些可满足的电路的集合。
x
∈
CKT-SAT
x\in\text{CKT-SAT}
x∈CKT-SAT当且仅当x是一个电路C的编码且
∃
u
∈
{
0
,
1
}
n
.
C
(
u
)
=
1
\exists u\in\{0,1\}^n.C(u)=1
∃u∈{0,1}n.C(u)=1
其中n是C所接受的输入长度。
证明
设
L
∈
N
P
L\in\mathbf{NP}
L∈NP,则存在多项式p与DTM
M
\mathbb M
M满足
x
∈
L
⇔
∃
u
∈
{
0
,
1
}
p
(
∣
x
∣
)
.
M
(
x
,
u
)
=
1
x\in L\Leftrightarrow\exists u\in\{0,1\}^{p(|x|)}.\mathbb M(x,u)=1
x∈L⇔∃u∈{0,1}p(∣x∣).M(x,u)=1
用定理4.6将
M
(
x
,
u
)
\mathbb M(x,u)
M(x,u)在对数空间规约到计算
M
(
x
,
u
)
\mathbb M(x,u)
M(x,u)的电路C,然后将输入x和C做硬链接。这给出了从L到CKT-SAT的对数规约。
引理4.2
CKT-SAT ≤ L SAT \text{CKT-SAT}\le_L\text{SAT} CKT-SAT≤LSAT.
证明
设C为输入电路。为C的每个输入、每个门、每个输出引入一个布尔变量。输入的C包含了所有门的输入编码和输出编码,可将这些编码作为相应变量的编码。若一个与门的输入为x, y,输出为z,即满足布尔公式
z
=
x
∧
y
z=x\wedge y
z=x∧y,这可等价转换为合取范式:
z
⇔
x
∧
y
=
(
z
∨
x
∧
y
‾
)
∧
(
z
‾
∨
(
x
∧
y
)
)
=
(
z
∨
x
‾
∨
y
‾
)
∧
(
z
‾
∨
x
)
∧
(
z
‾
∨
y
)
\begin{align} z\Leftrightarrow x\wedge y&=(z\vee\overline{x\wedge y})\wedge(\overline z\vee(x\wedge y))\\ &=(z\vee\overline x\vee\overline y)\wedge(\overline z\vee x)\wedge(\overline z\vee y) \end{align}
z⇔x∧y=(z∨x∧y)∧(z∨(x∧y))=(z∨x∨y)∧(z∨x)∧(z∨y)
或门和非门也同样可用合取范式表示。这些合取范式的大小是对数长的,可逐个输出。
Immerman-Szelepcsenyi 定理
P A T H ‾ ∈ N L \overline{\mathrm{PATH}}\in\mathbf{NL} PATH∈NL
证明
需设计一对数空间NTM N \mathbb N N,当输入一个可达性问题实例 ( G , s , t ) (G,s,t) (G,s,t)时, N ( G , s , t ) = 1 \mathbb N(G,s,t)=1 N(G,s,t)=1当且仅当图G中从s到t没有路径。
设图G有n个结点。显然,如果s到t有路径,从s出发n-1步内能到达t,我们逐步构建从s出发 i ∈ [ 1.. n − 1 ] i\in[1..n-1] i∈[1..n−1]步内能到达的节点集合。引入集合 C i C_i Ci和数 c i c_i ci,其定义如下:
- C i C_i Ci为从s出发i步内能到达的结点集合。显然 C 1 ⊆ C 2 ⊆ ⋯ ⊆ C n − 1 C_1\subseteq C_2\subseteq\cdots\subseteq C_{n-1} C1⊆C2⊆⋯⊆Cn−1,且以下三者等价: N ( G , s , t ) = 1 ⇔ \mathbb N(G,s,t)=1\Leftrightarrow N(G,s,t)=1⇔“s到t没有路径” ⇔ t ∉ C n − 1 \Leftrightarrow t\notin C_{n-1} ⇔t∈/Cn−1.
- c i = ∣ C i ∣ c_i=|C_i| ci=∣Ci∣为 C i C_i Ci中的节点数。
每个 C i C_i Ci的大小是线性的,故每个 c i c_i ci的长度是对数的,所以可以把固定数目的 c i c_i ci存放在工作带上。我们使用如下算法:
- 计数器初始化 c 1 = c 2 = ⋯ = c n − 1 = 0 c_1=c_2=\dots=c_{n-1}=0 c1=c2=⋯=cn−1=0;
- 计算 c 1 c_1 c1;
- 由 c i c_i ci计算 c i + 1 c_{i+1} ci+1,直至算出 c n − 2 c_{n-2} cn−2;
- 由 c n − 2 c_{n-2} cn−2判断t是否在 C n − 1 C_{n-1} Cn−1内。
第2步容易在对数空间内计算。枚举G中每个异于s的节点v,如果s到v有边,则计数器 c 1 c_1 c1自增。
第3步的计算需要知道
C
i
C_i
Ci和
C
i
+
1
C_{i+1}
Ci+1. 我们没法存下任何
C
i
C_i
Ci,但是我们能存下
c
i
c_i
ci. 在存着
c
i
c_i
ci的时候,有
N
L
\mathbf{NL}
NL中的算法来判断任一节点v是否满足
v
∈
C
i
+
1
v\in C_{i+1}
v∈Ci+1,即
j
u
d
g
e
(
v
,
i
)
=
{
1
,
v
∈
C
i
+
1
0
,
v
∈
C
i
+
1
\mathrm{judge}(v,i)=\begin{cases} 1,&v\in C_{i+1}\\ 0,&v\in C_{i+1}\\ \end{cases}
judge(v,i)={1,0,v∈Ci+1v∈Ci+1
judge(v, i)的算法如下:
def judge(v, i):
ans=0;
counter=0;
for w in G:
//猜w是否在 C i C_i Ci中
if Guess( w ∈ C i w\in C_i w∈Ci):
if not PATH(G, s, w, i): //调用 N L \mathbf{NL} NL中的可达性算法,G中s是否在i步内可达w.
//猜错了,w不在 C i C_i Ci内,停机。
halt();
if v==w or w到v有边:
// v ∈ C i v\in C_i v∈Ci或从 C i C_i Ci起v一步可达。
ans=1;
counter+=1;
if counter ≠ c i \neq c_i =ci:
//猜少了,猜的 C i C_i Ci中结点数不够,停机。
halt();
return ans;
以上算法中把 C i C_i Ci给准确地猜出来了,有且仅有一条正确猜测路径,且返回了judge(v, i)的正确结果,其余错误猜测路径全部停机。
那么 c i + 1 c_{i+1} ci+1的计算只需要简单地累加得出:
for v in G:
if judge(v, i):
c i + 1 c_{i+1} ci+1+=1;
计算出 c i + 1 c_{i+1} ci+1后把 c i c_i ci擦掉以腾出空间。
最终,我们可以计算出 c n − 2 c_{n-2} cn−2,然后调用judge(t, n-2)得到 N ( G , s , t ) \mathbb N(G,s,t) N(G,s,t)的结果。
引理4.4
图的可达性问题 P A T H ∈ N C 2 \mathrm{PATH}\in\mathbf{NC}^2 PATH∈NC2.
证明
图G用邻接矩阵A表示,其中元素 A i j = 1 ⇔ A_{ij}=1\Leftrightarrow Aij=1⇔“结点i到j有边”, A i i A_{ii} Aii恒为1.
考虑布尔矩阵自乘
A
2
A^2
A2,其中
(
A
2
)
i
j
=
⋁
k
=
1
n
(
A
i
k
∧
A
k
j
)
(A^2)_{ij}=\bigvee_{k=1}^n(A_{ik}\wedge A_{kj})
(A2)ij=k=1⋁n(Aik∧Akj)
说明
A
i
j
2
A^2_{ij}
Aij2表示结点i在2步之内可达j,由此类推得
(
A
n
−
1
)
i
j
(A^{n-1})_{ij}
(An−1)ij表示结点i在n-1步之内可达j,即i可达j. PATH问题有解,当且仅当
(
A
n
−
1
)
i
j
=
1
(A^{n-1})_{ij}=1
(An−1)ij=1.
计算 A 2 A^2 A2时,使用 n 3 n^3 n3个处理器可将所有 A i k ∧ A k j A_{ik}\wedge A_{kj} Aik∧Akj在一个并行步内算出。计算 ⋁ k = 1 n \bigvee_{k=1}^n ⋁k=1n可用快速幂思想,故可用 log n \log n logn个并行步计算所有的 ( A 2 ) i j (A^2)_{ij} (A2)ij,故 A 2 ∈ N C 1 A^2\in\mathbf{NC}^1 A2∈NC1.
计算 A n − 1 A^{n-1} An−1也可用快速幂思想,故 A n − 1 ∈ N C 2 A^{n-1}\in\mathbf{NC}^2 An−1∈NC2,故 P A T H ∈ N C 2 \mathrm{PATH}\in\mathbf{NC^2} PATH∈NC2.
引理4.5
隐式对数空间可计算函数可高效并行化。
证明
隐式对数空间可计算函数输出的每一位都可在对数空间算出来,这些位的计算当然是可并行进行的。每一位的计算可高效并行化,这是因为有两点:
- 对数空间可计算函数的格局图可用一个多项式大小的邻接矩阵表示。因为格局的大小是对数的,所以可以在对数时间里完成计算。因此,对数空间可计算函数的格局图的邻接矩阵可被高效并行地产生。
- 计算每一位的值就相当于判定图的可达性。根据引理4.4,可达性判定具有高效并行算法。
根据对数空间规约的传递性,引理4.5得证。
定理4.8
设L是 P \mathbf P P-完备的, L ∈ N C L\in\mathbf{NC} L∈NC当且仅当 P = N C \mathbf P=\mathbf{NC} P=NC.
证明
所有 P \mathbf P P中的问题都可以对数空间规约到L,由引理4.5知该规约可高效并行化。
若 L ∈ N C L\in\mathbf{NC} L∈NC,则L可高效并行地计算。对于任意 P \mathbf P P中的问题,首先将它高效并行地规约为L,再用高效并行算法判定L. 因为高效并行算法的复合依然是高效并行算法,定理4.8得证。