§E15.12NP 完全性と Cook–Levin の定理

最終更新

NP 完全性は、NP に属するすべての言語を一つの言語へ多項式時間で変換することができるという性質である。Cook–Levin の定理は、Boolean 論理式の充足可能性問題 SAT がこの性質をもつことを示す。本記事では、SAT と連言標準形を定義し、非決定性 Turing 機械の受理計算を有限な計算表として表す。計算表の各行が正当な次配置であるという条件を局所的な CNF 節へ変換し、受理計算と充足割当の対応を両方向に証明する。

1 Boolean 論理式と SAT

変数記号をz1,z2,…z_1,z_2,\ldotsとする。式は有限文字列として符号化し、変数の添字と括弧を含む符号長を式の長さとする。

定義 1.1. Boolean 論理式 (Boolean formula) は、変数ziz_i、定数0,10,1、否定¬\neg、論理和∨\lor、論理積∧\landから有限回の構成で得られる式である。式に現れる変数への割当 (truth assignment) は、各変数へ00または11を対応させる写像であり、演算

¬0=1,¬1=0,a∨b=max⁡{a,b},a∧b=min⁡{a,b}\neg 0=1,\quad \neg1=0,\quad a\lor b=\max\{a,b\},\quad a\land b=\min\{a,b\}

によって式の値を定める。値が11となる割当が存在する式を充足可能 (satisfiable) という。

変数または変数の否定をリテラル (literal) という。リテラルの有限個の論理和を節 (clause) といい、節の有限個の論理積である式を連言標準形 (conjunctive normal form)(CNF)という。

正しく符号化された充足可能な Boolean 論理式全体の言語を

SAT\mathsf{SAT}

とする。不正な式の符号はSAT\mathsf{SAT}に含めない。

CNF の節に含めるリテラル数には上限を置かない。特に、本記事は各節を高々三リテラルに制限する 3SAT を扱わない。

命題 1.2.

SAT∈NP\mathsf{SAT}\in\mathsf{NP}

である。

証明. 入力φ\varphiが正しい Boolean 論理式の符号でなければ拒否する。正しい式なら、φ\varphiに現れる相異なる変数を出現順に列挙する。証明書を各変数の値を表すビット列とし、列挙した変数数と同じ長さであることを確認する。

検証器は構文木の葉から根へ値を計算する。各変数葉には証明書の対応するビットを置き、各否定・論理和・論理積の頂点では子の値から一回の Boolean 演算で値を得る。変数名を表へ登録して参照する処理を単純な逐次探索で実装しても、式の符号長をmmとすればO(m2)O(m^2)時間で終わる。証明書長は式に現れる変数数以下であり、高々mmである。

φ\varphiが充足可能なら、その充足割当を証明書にすれば検証器は受理する。検証器が受理したなら、証明書が定める割当の下で構文木の根の値が11であるため、φ\varphiは充足可能である。§E15.11 定理 3.1によりSAT∈NP\mathsf{SAT}\in\mathsf{NP}である。▨

2 NP 困難性と NP 完全性

定義 2.1. 言語BBがNP 困難 (NP-hard) であるとは、任意の言語A∈NPA\in\mathsf{NP}について

A≤pBA\le_{\mathrm p}B

が成り立つことをいう。BBが NP 困難かつB∈NPB\in\mathsf{NP}であるとき、BBをNP 完全 (NP-complete) という。

NP 困難性だけでは、対象言語自身が NP に属することを要求しない。NP 完全性では、NP への所属と NP の全言語からの帰着を別々に確認する。

命題 2.2.BBが NP 完全でB∈PB\in\mathsf Pならば、

P=NP\mathsf P=\mathsf{NP}

である。

証明.§E15.11 命題 1.4によりP⊆NP\mathsf P\subseteq\mathsf{NP}である。任意のA∈NPA\in\mathsf{NP}をとる。BBの NP 困難性からA≤pBA\le_{\mathrm p}Bであり、B∈PB\in\mathsf Pと§E15.11 命題 4.2からA∈PA\in\mathsf Pである。したがってNP⊆P\mathsf{NP}\subseteq\mathsf Pであり、二つのクラスは等しい。▨

3 有界計算表

Cook–Levin の帰着では、帰着元の言語ごとに非決定性機械NNを一つ固定する。入力xxだけが帰着関数の入力であり、NNの状態集合、テープアルファベット、遷移規則は式サイズに対する定数として扱われる。

NNを一方向無限の単テープ非決定性 Turing 機械とする。§E15.11 命題 1.3により、NP の定義で用いた読取り専用入力テープと作業テープのモデルから、この標準単テープモデルへ変更しても多項式時間性と受理分枝の存在は保たれる。

長さnnの入力上の全分枝がp(n)p(n)段以内に停止するとする。

T(n)=max⁡{p(n),n,1}T(n)=\max\{p(n),n,1\}

と置く。固定多項式ppの値を二進筆算で求めてn,1n,1と比較することにより、T(n)T(n)はnnから多項式時間で計算することができる。また、

T(n)≤p(n)+n+1T(n)\le p(n)+n+1

であるため、T(n)T(n)はnnの多項式で上から抑えられる。受理または拒否で早く停止した配置には、記号、ヘッド位置、状態を変えない仮想的な停止後遷移を加える。この規約は受理分枝の有無を変えず、すべての分枝をちょうどT(n)T(n)段の配置列へ延長する。

テープアルファベットをΓ\Gamma、状態集合をQQとし、

A=Γ∪(Q×Γ)\mathcal A=\Gamma\cup(Q\times\Gamma)

をセル記号集合とする。a∈Γa\in\Gammaはヘッドがないセルの内容を表し、(q,a)∈Q×Γ(q,a)\in Q\times\Gammaは状態がqqでヘッドがそのセルを走査し、セル内容がaaであることを表す。

時刻ttと位置iiが0≤t,i≤T=T(n)0\le t,i\le T=T(n)を満たす格子を考える。初期ヘッドは位置00にあり、一段で高々一マス動くため、時刻TTまでの実際の計算が位置TTより右へ到達することはない。

定義 3.1 (計算表変数). 各0≤t,i≤T0\le t,i\le Tとa∈Aa\in\mathcal Aに対して Boolean 変数

Xt,i,aX_{t,i,a}

を置く。Xt,i,a=1X_{t,i,a}=1は、時刻tt、位置iiのセル記号がaaであることを表す。

さらに、NNの有限な遷移規則集合をR\mathcal Rとし、各0≤t<T0\le t<Tとd∈Rd\in\mathcal Rに対して変数

Ct,dC_{t,d}

を置く。Ct,d=1C_{t,d}=1は、時刻ttからt+1t+1への遷移で規則ddを選ぶことを表す。停止後の仮想的な自己遷移もR\mathcal Rに含める。これらの Boolean 変数を総称して 計算表変数 (computation-tableau variable) という。

遷移選択変数を時刻ごとに一つ置くことにより、非決定的な二つの規則を隣接セルが別々に選ぶ誤った計算表を排除する。

4 CNF 制約の構成

有限集合の変数u1,…,umu_1,\ldots,u_mのうちちょうど一つを真にする条件は、CNF

(u1∨⋯∨um)∧⋀1≤r<s≤m(¬ur∨¬us)(u_1\lor\cdots\lor u_m) \land \bigwedge_{1\le r<s\le m}(\neg u_r\lor\neg u_s)

で表すことができる。この形式を以下で繰り返し用いる。

4.1 セルとヘッドの一意性

各(t,i)(t,i)について、a∈Aa\in\mathcal AにわたるXt,i,aX_{t,i,a}のうちちょうど一つが真であるという節を加える。また、各時刻ttについて

{Xt,i,(q,a):0≤i≤T, q∈Q, a∈Γ}\{X_{t,i,(q,a)}:0\le i\le T,\ q\in Q,\ a\in\Gamma\}

のうちちょうど一つが真であるという節を加える。後者は、各行にヘッドと状態の印がちょうど一つ存在することを保証する。

4.2 初期配置

入力x=x0⋯xn−1x=x_0\cdots x_{n-1}に対し、時刻00の各セルを単位節で固定する。n>0n>0なら位置00を(q0,x0)(q_0,x_0)、位置1,…,n−11,\ldots,n-1をそれぞれxix_i、位置n,…,Tn,\ldots,Tを空白記号⊔\sqcupとする。n=0n=0なら位置00を(q0,⊔)(q_0,\sqcup)とし、残りを空白にする。

4.3 遷移規則の一意性と適用可能性

各0≤t<T0\le t<Tについて、d∈Rd\in\mathcal RにわたるCt,dC_{t,d}のうちちょうど一つが真であるという節を加える。規則ddの左辺が状態qqと走査記号aaでない場合には、各位置iiについて

¬Xt,i,(q,a)∨¬Ct,d\neg X_{t,i,(q,a)}\lor\neg C_{t,d}

を加える。各行にはヘッド印が一つだけ存在するため、真に選ばれた規則はその配置へ適用することができる規則に限られる。

4.4 局所更新

規則ddを固定する。位置iiの次のセル記号は、時刻ttの位置i−1,i,i+1i-1,i,i+1の三つのセル記号とddだけから一意に定まる。実際、ヘッドが三セルの外にあれば中央セルは変化しない。ヘッドが中央にあれば、書込み記号と移動方向に従って中央の印を消すか残す。ヘッドが左隣から右へ、または右隣から左へ移る場合には、中央セルへ新状態の印を付ける。位置00で左移動を命じた場合には、ヘッドは位置00にとどまる。

この局所更新関数を

Fd ⁣:A3⟶AF_d\colon\mathcal A^3\longrightarrow\mathcal A

と書く。規則ddが三セル内のヘッド印へ適用することができない組や、複数のヘッド印を含む組には、FdF_dの値を任意に定めて全域関数にする。実際の行ではヘッド印と規則の適用可能性を別の節が保証するため、適用不能な組に割り当てた任意の値は充足可能性に影響しない。

左端の外側にはセル記号集合A\mathcal Aに属さない固定境界記号◃\triangleleftを置く。左端専用の局所更新関数

FdL ⁣:A2⟶AF_d^{\mathrm L}\colon\mathcal A^2\longrightarrow\mathcal A

を、現在の位置0,10,1のセル記号から位置00の次のセル記号を返す関数として定める。この関数では、位置00で左移動を命じられたヘッドを位置00にとどめる。適用することができない組には値を任意に定めて全域関数にする。t<Tt<Tではヘッド位置が高々ttであるため、位置T+1T+1はまだ訪問されていない。そこで、位置TTの右隣には固定空白記号を置いてFdF_dを用いる。

各0≤t<T0\le t<T、1≤i<T1\le i<T、d∈Rd\in\mathcal R、および三つのセル記号a−1,a0,a+1∈Aa_{-1},a_0,a_{+1}\in\mathcal Aに対して、含意

Ct,d∧Xt,i−1,a−1∧Xt,i,a0∧Xt,i+1,a+1 ⟹ Xt+1,i,Fd(a−1,a0,a+1)C_{t,d}\land X_{t,i-1,a_{-1}}\land X_{t,i,a_0}\land X_{t,i+1,a_{+1}} \ \Longrightarrow\ X_{t+1,i,F_d(a_{-1},a_0,a_{+1})}

を CNF の一つの節

¬Ct,d∨¬Xt,i−1,a−1∨¬Xt,i,a0∨¬Xt,i+1,a+1∨Xt+1,i,Fd(a−1,a0,a+1)\neg C_{t,d}\lor \neg X_{t,i-1,a_{-1}}\lor \neg X_{t,i,a_0}\lor \neg X_{t,i+1,a_{+1}}\lor X_{t+1,i,F_d(a_{-1},a_0,a_{+1})}

として加える。左端i=0i=0では、各a0,a+1∈Aa_0,a_{+1}\in\mathcal Aに対して

¬Ct,d∨¬Xt,0,a0∨¬Xt,1,a+1∨Xt+1,0,FdL(a0,a+1)\neg C_{t,d}\lor \neg X_{t,0,a_0}\lor \neg X_{t,1,a_{+1}}\lor X_{t+1,0,F_d^{\mathrm L}(a_0,a_{+1})}

を加える。右端i=Ti=Tでは、各a−1,a0∈Aa_{-1},a_0\in\mathcal Aに対して

¬Ct,d∨¬Xt,T−1,a−1∨¬Xt,T,a0∨Xt+1,T,Fd(a−1,a0,⊔)\neg C_{t,d}\lor \neg X_{t,T-1,a_{-1}}\lor \neg X_{t,T,a_0}\lor X_{t+1,T,F_d(a_{-1},a_0,\sqcup)}

を加える。各行のセル記号が一意であるため、実際の三セルの値に対応する節だけが次行の値を強制する。

4.5 受理条件

時刻TTに受理状態の印が存在するという一つの節

⋁0≤i≤Ta∈ΓXT,i,(qacc,a)\bigvee_{\substack{0\le i\le T\\a\in\Gamma}} X_{T,i,(q_{\mathrm{acc}},a)}

を加える。停止後の自己遷移によって、時刻TTで受理状態にあることは、時刻TT以前に受理したことと同値である。

以上のすべての節の論理積を

ΦN,x\Phi_{N,x}

とする。

5 計算表と充足割当の同値性

補題 5.1. 時刻ttとt+1t+1の二行がセル・ヘッドの一意性を満たし、時刻ttで選ばれた規則ddが唯一のヘッド印へ適用可能であるとする。この二行がすべての局所更新節を満たすことと、第二行が規則ddによる第一行の正しい次配置であることは同値である。

証明. 第二行が正しい次配置なら、内点1≤i<T1\le i<Tのセル記号はFd(ai−1,ai,ai+1)F_d(a_{i-1},a_i,a_{i+1})、左端のセル記号はFdL(a0,a1)F_d^{\mathrm L}(a_0,a_1)、右端のセル記号はFd(aT−1,aT,⊔)F_d(a_{T-1},a_T,\sqcup)である。したがって、前件が真になる局所更新節の後件も真であり、他の局所更新節は前件の少なくとも一つのリテラルが偽である。よってすべての節が満たされる。

逆に、すべての局所更新節が満たされるとする。内点1≤i<T1\le i<Tでは、一意性によって第一行の位置i−1,i,i+1i-1,i,i+1の実際のセル記号ai−1,ai,ai+1a_{i-1},a_i,a_{i+1}が一つずつ定まる。選択規則もddに一意に定まるため、実際の三セル記号と選択規則ddを前件とする節ではすべての否定リテラルが偽になり、

Xt+1,i,Fd(ai−1,ai,ai+1)=1X_{t+1,i,F_d(a_{i-1},a_i,a_{i+1})}=1

でなければならない。同じ議論を左端では実際の二セルa0,a1a_0,a_1とFdLF_d^{\mathrm L}に、右端では実際の二セルaT−1,aTa_{T-1},a_TとFd(aT−1,aT,⊔)F_d(a_{T-1},a_T,\sqcup)に適用する。第二行の各位置におけるセル記号も一意であるため、第二行の唯一のセル記号は対応する局所更新関数が指定した記号に等しい。対応する等式がすべての位置で成り立つので、第二行は規則ddによる正しい次配置である。▨

定理 5.2. 任意の入力xxについて、

N が x を受理する⟺ΦN,x は充足可能である.N\text{ が }x\text{ を受理する} \quad\Longleftrightarrow\quad \Phi_{N,x}\text{ は充足可能である}.

証明.NNがxxを受理するとする。受理分枝を一つ選び、停止後の自己遷移によって長さTTまで延長する。各時刻と位置について、その計算表に実際に現れるセル記号に対応するXXだけを真にする。各時刻で実際に選ばれた遷移規則に対応するCCだけを真にする。

各セルには一つの記号があり、各配置には一つのヘッドがあるため、一意性制約を満たす。時刻00は初期配置制約を満たし、選んだ規則は実際に適用した規則なので適用可能性制約を満たす。連続する二行は正しい一段遷移であるため、補題 5.1により局所更新制約を満たす。分枝は時刻TTまでに受理し、その後は受理配置にとどまるので受理節も満たす。したがってΦN,x\Phi_{N,x}は充足可能である。

逆に、ΦN,x\Phi_{N,x}を満たす割当が存在するとする。セル一意性により、各(t,i)(t,i)にはセル記号が一つ定まり、ヘッド一意性により各行は状態とヘッド位置を一つもつ配置を表す。初期配置節により第00行はN(x)N(x)の初期配置である。

各t<Tt<Tでは遷移選択制約により規則dtd_tが一つ定まる。適用可能性節によりdtd_tは第tt行の状態と走査記号へ適用することができる。補題 5.1により、第t+1t+1行はdtd_tによる第tt行の正しい次配置である。ttに関する帰納法によって、全行が初期配置から始まる一つの実在する計算分枝をなす。受理節により最終行の状態はqaccq_{\mathrm{acc}}であるため、この分枝はxxを受理する。▨

6 式サイズと帰着の計算時間

補題 6.1.NNを固定すると、ΦN,x\Phi_{N,x}の変数数、節数、符号長、およびΦN,x\Phi_{N,x}を出力する時間は、T(∣x∣)T(|x|)の多項式である。

証明.∣A∣|\mathcal A|と∣R∣|\mathcal R|は固定機械NNだけに依存する定数である。セル変数は

(T+1)2∣A∣=O(T2)(T+1)^2|\mathcal A|=O(T^2)

個であり、遷移選択変数はT∣R∣=O(T)T|\mathcal R|=O(T)個である。

セル記号の一意性には各セル当たり定数個の節しか要らないため、節数はO(T2)O(T^2)である。ヘッドの存在には各行一つ、ヘッドの一意性には各行でO(T2)O(T^2)個の二リテラル節を用いるため、全体でO(T3)O(T^3)個である。遷移選択、初期配置、適用可能性、および局所更新の節数は、各時刻・位置と固定有限集合を走査して作るのでO(T2)O(T^2)個である。受理条件は一つの長い節であり、リテラル数はO(T)O(T)である。

したがって節とリテラルの総数はO(T3)O(T^3)である。添字t,it,iを二進表記する変数名にはO(log⁡(T+2))O(\log(T+2))ビットを要するため、式全体の符号長は

O(T3log⁡(T+2))O\bigl(T^3\log(T+2)\bigr)

である。

帰着機械は入力長nnから固定多項式T(n)T(n)を計算し、上で列挙した順に変数名と節を書き出す。各節の生成には添字に関する多項式時間しか要らず、出力長自体もTTの多項式である。T(n)T(n)はnnの多項式なので、出力時間と出力長はいずれもnnの多項式である。▨

7 Cook–Levin の定理

定理 7.1 (Cook–Levin の定理). 充足可能性問題SAT\mathsf{SAT}は NP 完全である。

証明.命題 1.2により、SAT∈NP\mathsf{SAT}\in\mathsf{NP}である。

任意の言語A∈NPA\in\mathsf{NP}をとる。§E15.11 定義 1.2により、AAを受理する多項式時間非決定性 Turing 機械NNが存在する。NNを固定し、入力xxに対して

f(x)=⟨ΦN,x⟩f(x)=\langle\Phi_{N,x}\rangle

と定める。補題 6.1により、ffは多項式時間で計算される。定理 5.2により、

x∈A⟺N が x を受理する⟺ΦN,x は充足可能である⟺f(x)∈SAT.x\in A \Longleftrightarrow N\text{ が }x\text{ を受理する} \Longleftrightarrow \Phi_{N,x}\text{ は充足可能である} \Longleftrightarrow f(x)\in\mathsf{SAT}.

したがってA≤pSATA\le_{\mathrm p}\mathsf{SAT}である。A∈NPA\in\mathsf{NP}は任意であったため、SAT\mathsf{SAT}は NP 困難である。NP への所属と合わせて、SAT\mathsf{SAT}は NP 完全である。▨

例 7.2 (小さな CNF の充足割当). CNF

(z1∨z2)∧(¬z1∨z2)(z_1\lor z_2)\land(\neg z_1\lor z_2)

を考える。割当(z1,z2)=(0,1)(z_1,z_2)=(0,1)では二つの節がともに真になり、式全体が真になる。(1,0)(1,0)では第二節が偽になる。

計算表の符号化でも、各節は同じように許されない局所選択を排除する。一意性節は二つのセル記号を同時に選ぶ割当を排除し、局所更新節は前の三セルと選択規則が定まったときに誤った次セルを選ぶ割当を排除する。個々の節は局所的であるが、すべての節の論理積が計算表全体の整合性を保証する。

9 演習

問題 9.1.

  1. 命題 1.2の検証器について、変数名が二進添字で符号化される場合にも証明書長が入力長以下になる理由を説明せよ。
  2. 各時刻で遷移選択変数Ct,dC_{t,d}を一つに定めず、各セルが独立に非決定的規則を選ぶと、正当な計算分枝に対応しない表が生じ得る理由を説明せよ。
  3. 補題 5.1の逆向きの証明で、セル記号の一意性が必要な箇所を特定せよ。
  4. ヘッドの一意性を素朴な二変数節で表した場合にO(T3)O(T^3)個の節を要することを計算せよ。節数がO(T3)O(T^3)であっても帰着が多項式時間である理由を述べよ。
  5. 早く受理した配置を停止後の自己遷移で延長する規約が、受理分枝の有無を変えないことを証明せよ。
解答 (演習の要点).
  1. 証明書は、式に現れる相異なる変数それぞれに対する一ビットである。各変数は式の符号の中で少なくとも一文字を占めるので、相異なる変数の個数は符号長mm以下である。したがって証明書長もmm以下であり、入力長の多項式である。二進添字を用いる符号では一つの変数が複数文字を占めるため、変数の個数はさらに小さくなる。
  2. 一つの配置から次の配置への遷移は、ただ一つの規則によって定まる。セルごとに独立に規則を選ぶことを許すと、ある位置は規則ddの局所更新に従い、別の位置は規則d′d'の局所更新に従う行が現れる。たとえば、ddがヘッドの右移動を、d′d'が左移動を命じる場合、次の行のヘッド印の位置はddとd′d'のどちらの配置とも一致しない。局所条件はすべて満たされていても、その行はNNのどの一段遷移の結果でもない。
  3. 二箇所で用いる。第一に、第一行の位置i−1,i,i+1i-1,i,i+1の記号がそれぞれ一つに定まることを用いて、否定リテラルがすべて偽になる局所更新節をちょうど一つ特定する箇所である。一意性がなければ、複数の三つ組に対応する節が同時に前件を満たし、互いに異なる後件を強制することがあり得る。第二に、第二行の位置iiの記号が一つに定まることを用いて、強制されたXt+1,i,Fd(⋯ )=1X_{t+1,i,F_d(\cdots)}=1からその位置の記号がFd(⋯ )F_d(\cdots)に等しいと結論する箇所である。
  4. 各行のヘッド印の候補は、位置0≤i≤T0\le i\le Tと(q,a)∈Q×Γ(q,a)\in Q\times\Gammaの組であり、∣Q∣∣Γ∣|Q||\Gamma|が定数なのでO(T)O(T)個である。そのうち二つを選ぶ組はO(T2)O(T^2)個であり、行はT+1T+1個あるから、全体でO(T3)O(T^3)個の二変数節を要する。T(n)T(n)はnnの多項式であるからO(T3)O(T^3)もnnの多項式であり、各節の書き出しに要する時間も添字に関する多項式である。したがって帰着関数は多項式時間で計算される。
  5. 停止後の自己遷移は記号、ヘッド位置、状態のいずれも変えない。したがって、時刻t0≤Tt_0\le Tで受理状態に到達した分枝は時刻TTまで受理状態にとどまり、延長後の分枝は時刻TTで受理状態にある。逆に、延長後の分枝が時刻TTで受理状態にあるとする。自己遷移は状態を変えないので、受理状態に初めて入る時刻t0t_0が存在し、時刻t0t_0までの配置列は自己遷移を含まない。よって、それは元の機械の受理分枝である。ゆえに、延長の前後で受理分枝の有無は変わらない。

▨

参考文献

  1. Stephen A. Cook, The Complexity of Theorem-Proving Procedures, in: Proceedings of the Third Annual ACM Symposium on Theory of Computing, Association for Computing Machinery, 1971, pp. 151–158.Boolean 充足可能性の NP 完全性の証明を参考にした。
  2. Sanjeev Arora and Boaz Barak, Computational Complexity: A Modern Approach, Cambridge University Press, Cambridge, 2009.計算表による Cook–Levin の定理の証明を参考にした。
  3. Michael Sipser, Introduction to the Theory of Computation, 3rd ed., Cengage, Boston, 2013.計算履歴を Boolean 論理式へ符号化する構成を参考にした。

前提記事