今天的又蓝又白,结果看上去灰蒙蒙的。

# HALT 的不可判定性

Theorem: 下述语言是不可判定的:

LHALT={α,x    Mα  halts  on  input  x}L_{HALT}=\{\langle \alpha,x\rangle\;|\;M_\alpha\;halts\;on\;input\;x\}

证明:使用对角线方法(Diagonalization),即考虑M(M)M(\langle M\rangle) 的情况,着手证明。

首先,考虑下列函数:

UC(x)={0if  Mx(x)  halts  and  output  11otherwiseUC(x)=\begin{cases} 0 & if\;M_x(x)\;halts\;and\;output\;1\\ 1 &otherwise \end{cases}

那么先证明下述语言是不可判定的:

LUC={x    UC(x)=1}L_{UC}=\{x\;|\;UC(x)=1\}

反设存在一个图灵机MM 判定LUCL_{UC},那么我们考虑MM 在输入M\langle M\rangle 上会怎样:

  • M(M)M(\langle M\rangle) 停机了。

    • M(M)=0M(\langle M\rangle)=0,由于MM 判定LUCL_{UC},故MLUC\langle M\rangle\notin L_{UC},即UC(M)=0UC(\langle M\rangle)=0

      根据UCUC 函数的定义,UC(M)=0UC(\langle M\rangle)=0 当且仅当M(M)M(\langle M\rangle) “halts and output 1”,矛盾。

    • M(M)=1M(\langle M\rangle)=1,由于MM 判定LUCL_{UC},故MLUC\langle M\rangle\in L_{UC},即UC(M)=1UC(\langle M\rangle)=1

      根据UCUC 函数的定义,UC(M)=1UC(\langle M\rangle)=1 当且仅当M(M)M(\langle M\rangle) 不停机或者输出 0。由于假设M(M)M(\langle M\rangle) 停机了,故M(M)=0M(\langle M\rangle)=0,矛盾。

  • M(M)M(\langle M\rangle) 不停机,与 “MM 判断LUCL_{UC}” 矛盾,即有输入M\langle M\rangle 导致MM 无法判断。

证毕。

这个定理我的理解其实是 “任何尝试去判定LUCL_{UC} 的图灵机MM,都一定会存在某个输入input=Minput=\langle M\rangle,使得MM 不停机,故无法判断它。”

下面我们证明LHALTL_{HALT} 的不可判定性。其实证明本质是,一旦我们可以提前得知是否停机,我们就可以判定LUCL_{UC},而LUCL_{UC} 的不可判定性也恰恰来自于是否停机。

反设存在一个图灵机MM 判定LHALTL_{HALT},那么我们可以构造一个图灵机MM' 去判定LUCL_{UC}

  • 对于输入xx,使用M(x,x)M(\langle x,x\rangle) 去判定Mx(x)M_x(x) 是否停机。
    • 若不停机,则MM' 直接输出 1。
    • 若停机,则让MM' 去模拟MxM_x,并输出与Mx(x)M_x(x) 相反的结果。

很显然,上述图灵机MM' 判定了LUCL_{UC},矛盾。

故证毕。

# Cook-Levin Theorem: Boolean Circuit 的通用性

Theorem (Cook-Levin):

CIRCUITSATNPCompleteCIRCUIT-SAT\in NP-Complete

Proof:首先CIRCUITSATNPCIRCUIT-SAT\in NP 是显而易见的,所以我们证明的重点在于,LNP,LmpCIRCUITSAT\forall L\in NP,L\leq_m^p CIRCUIT-SAT

这个定理初看非常困难,因为要证明LNP\forall L\in NP。但实际上,根据NPNP 问题的定义,实际上就是要证明图灵机向 Boolean Circuit 的规约。

考虑LNPL\in NP,故存在一个判定图灵机VV,使得xL,y,V(x,y)=1\forall x\in L,\exists y,V(x,y)=1

直观地理解,要判定x?Lx\in ? L,实际上就是要知道是否存在一个yy 满足V(x,y)=1V(x,y)=1,其实就对应了可满足问题是否存在一个yy 满足 Circuit 的输出是 1,而这个 Circuit 就对应了VV,它的输入是x,yx,y,前者是已知的,后者是可以自由 assign 的。


我们不妨假设x=1011x=1011,看一下如何构造一个 Circuit CC,使得xLCx\in L\Leftrightarrow C is satisfiable.

首先,我们知道存在一个yy 和图灵机VV,使得VVO(T(n))O(T(n)) 时间内输出V(x,y)=1V(x,y)=1。那么我们考虑VV 的每一步,VV 每操作一步,关键的信息就是:读写头位置 + 带子上的内容。而我们把读写头位置 + 带子上的内容编码成一个二进制串,譬如0@1110@111 就表示,带子上内容为 “0111”,读写头指向 "@" 右侧的字符。

那么我们考虑把图灵机的每一步操作,都等价为一层的 Circuit:

1

其中有一个重要论断:tape 上某个单元格的内容,在一步操作后会变成什么,只和上一步该单元格附近的单元格内容和图灵机的转移函数有关。注意,其实也与读写头位置有关,但是读写头位置被编进了 tape 的内容。

注意,核心就在于 “附近”,实际上是常数个,严格来说应为 4 个。故只需要n4=O(n)n-4=O(n) 个数的 circuit(上图中的小方块),就可以模拟单步的图灵机操作。

注意,任意的{0,1}4{0,1}4\{0,1\}^4\rightarrow\{0,1\}^4 函数都可以用常数个 Boolean 门来模拟。如果需要 "@" 符号,可以使用替换字符集的编码技巧,在此不具体讨论。

故实际上,上右图中的 circuit 结构,只跟图灵机VV 的转移函数有关,而且这个 circuit 模拟了图灵机的行为。

我们把 circuit 输入的左侧部分改为xx,就可以通过 circuit 是否可满足,来判断是否存在yy,使得V(x,y)=1V(x,y)=1 了。

故实际上,给定LNPL\in NP 的一个判断图灵机VV,我们就可以构造一个 circuit。然后对于输入xx,将 circuit 的左侧改为xx,那么此时xLx\in L 就等价于 circuit 的可满足性了,完毕。

显然地,circuit 的复杂性在O(T(n)2)O(T(n)^2) 级别,也没有到指数复杂性。

# P=NPEXP=NEXPP=NP\Rightarrow EXP=NEXP 的证明技巧: Padding

Theorem:

P=NPEXP=NEXPP=NP\Rightarrow EXP=NEXP

Proof:假设P=NPP=NPEXPNEXPEXP\subseteq NEXP 是显然的,我们着手证明NEXPEXPNEXP\subseteq EXP

对于LNEXPL\in NEXP,我们人为地构造一个语言:

Lpad={x,12xk    xL}L_{pad}=\{\langle x,1^{2^{|x|^k}}\rangle\;|\;x\in L\}

其实就是对LL 中的字符串,后面加一个长度为2xk2^{|x|^k},全为 1 的 padding。kk 对证明不是很重要。

我们可以证明,padding 后的这个语言LpadNPL_{pad}\in NP。假设存在一个非确定性图灵机MM 去判定LL

我们构造一个图灵机MM' 去判定LpadL_{pad}

  1. 对于输入yy,判断yy 的形式是否满足y=x,12xky=\langle x,1^{2^{|x|^k}}\rangle,若不是,则拒绝。

    n=y=O(2xk)n=|y|=O(2^{|x|^k}),那么这一步需要的复杂度为O(poly(n))O(poly(n))

  2. 提取出xx,然后去模拟非确定性图灵机MM。并输出MM 的结果。由于LNEXPL\in NEXP,故MM 所需步骤为O(poly(x)2xk)=O(poly(logn)n)O(poly(|x|)2^{|x|^k})=O(poly(logn)\cdot n),对于MM' 来说,就是多项式级别。

故综上,LpadNPL_{pad}\in NP。因为P=NPP=NP,故LpadPL_{pad}\in P,故存在一个确定型图灵机MM^* 判定LpadL_{pad}。下面我们证明LEXPL\in EXP

构造这样一个图灵机:

  1. 对于输入xx,先 pad 2xk2^{|x|^k} 个 1。这一步复杂度为O(2xk)O(2^{|x|^k})
  2. 模拟MM^* 去判定xx。这一步复杂度也为指数级。

综上,LEXPL\in EXP。证毕