1 Boolean 論理式と SAT
変数記号をz1,z2,…とする。式は有限文字列として符号化し、変数の添字と括弧を含む符号長を式の長さとする。
定義 1.1. Boolean 論理式 (Boolean formula) は、変数zi、定数0,1、否定¬、論理和∨、論理積∧から有限回の構成で得られる式である。式に現れる変数への割当 (truth assignment) は、各変数へ0または1を対応させる写像であり、演算
¬0=1,¬1=0,a∨b=max{a,b},a∧b=min{a,b}によって式の値を定める。値が1となる割当が存在する式を充足可能 (satisfiable) という。
変数または変数の否定をリテラル (literal) という。リテラルの有限個の論理和を節 (clause) といい、節の有限個の論理積である式を連言標準形 (conjunctive normal form)(CNF)という。
正しく符号化された充足可能な Boolean 論理式全体の言語を
SATとする。不正な式の符号はSATに含めない。
CNF の節に含めるリテラル数には上限を置かない。特に、本記事では各節のリテラル数を高々三に制限した問題 3SAT を扱わない。
命題 1.2.
SAT∈NPである。
証明. 入力φが正しい Boolean 論理式の符号でなければ拒否する。正しい式なら、φに現れる相異なる変数を出現順に列挙する。証明書を各変数の値を表すビット列とし、列挙した変数数と同じ長さであることを確認する。
検証器は構文木の葉から根へ値を計算する。各変数葉には証明書の対応するビットを置き、各否定・論理和・論理積の頂点では子の値から一回の Boolean 演算で値を得る。変数名を表へ登録して参照する処理を単純な逐次探索で実装しても、式の符号長をmとすればO(m2)時間で終わる。証明書長は式に現れる変数数以下であり、高々mである。
φが充足可能なら、その充足割当を証明書にすれば検証器は受理する。検証器が受理したなら、証明書が定める割当の下で構文木の根の値が1であるため、φは充足可能である。§E18.11 定理 3.1によりSAT∈NPである。▨
2 NP 困難性と NP 完全性
定義 2.1. 言語BがNP 困難 (NP-hard) であるとは、任意の言語A∈NPについて
A≤pBが成り立つことをいう。Bが NP 困難かつB∈NPであるとき、BをNP 完全 (NP-complete) という。
NP 困難性の定義には、対象の言語自身が NP に属するという条件は含まれない。言語が NP 完全であることを示すときは、NP への所属と NP の全言語からの帰着を別々に確認する。
命題 2.2.Bが NP 完全でB∈Pならば、
P=NPである。
証明.§E18.11 命題 1.4によりP⊆NPである。任意のA∈NPをとる。Bの NP 困難性からA≤pBであり、B∈Pと§E18.11 命題 4.2からA∈Pである。したがってNP⊆Pであり、二つのクラスは等しい。▨
3 有界計算表
Cook–Levin の帰着では、帰着元の言語ごとに非決定性機械Nを一つ固定する。入力xだけが帰着関数の入力であり、Nの状態集合、テープアルファベット、遷移規則は式サイズに対する定数として扱われる。
Nを一方向無限の単テープ非決定性 Turing 機械とする。§E18.11 命題 1.3により、NP の定義で用いた読取り専用入力テープと作業テープのモデルから、この標準単テープモデルへ変更しても多項式時間性と受理分枝の存在は保たれる。
長さnの入力上の全分枝がp(n)段以内に停止するとする。
T(n)=max{p(n),n,1}
と置く。固定多項式pの値を二進筆算で求めてn,1と比較することにより、T(n)はnから多項式時間で計算することができる。また、
T(n)≤p(n)+n+1
であるため、T(n)はnの多項式で上から抑えられる。受理または拒否で早く停止した配置には、記号、ヘッド位置、状態を変えない仮想的な停止後遷移を加える。この規約のもとで、受理分枝の有無は変わらず、すべての分枝はちょうどT(n)段の配置列へ延長される。
テープアルファベットをΓ、状態集合をQとし、
A=Γ∪(Q×Γ)
をセル記号集合とする。a∈Γはヘッドがないセルの内容を表し、(q,a)∈Q×Γは状態がqでヘッドがそのセルを走査し、セル内容がaであることを表す。
時刻tと位置iが0≤t,i≤T=T(n)を満たす格子を考える。初期ヘッドは位置0にあり、一段で高々一マス動くため、時刻Tまでの実際の計算が位置Tより右へ到達することはない。
定義 3.1 (計算表変数). 各0≤t,i≤Tとa∈Aに対して Boolean 変数
Xt,i,aを置く。Xt,i,a=1は、時刻t、位置iのセル記号がaであることを表す。
さらに、Nの有限な遷移規則集合をRとし、各0≤t<Tとd∈Rに対して変数
Ct,dを置く。Ct,d=1は、時刻tからt+1への遷移で規則dを選ぶことを表す。停止後の仮想的な自己遷移もRに含める。これらの Boolean 変数を総称して 計算表変数 (computation-tableau variable) という。
遷移選択変数を時刻ごとに一つ置くことにより、隣接するセルの更新に別々の非決定的な規則を用いた誤った計算表を排除する。
4 CNF 制約の構成
有限集合の変数u1,…,umのうちちょうど一つを真にする条件は、CNF
(u1∨⋯∨um)∧1≤r<s≤m⋀(¬ur∨¬us)
で表すことができる。この形式を以下で繰り返し用いる。
4.1 セルとヘッドの一意性
各(t,i)について、a∈AにわたるXt,i,aのうちちょうど一つが真であるという節を加える。また、各時刻tについて
{Xt,i,(q,a):0≤i≤T, q∈Q, a∈Γ}
のうちちょうど一つが真であるという節を加える。後者の節により、各行にヘッドと状態の印がちょうど一つ存在することが保証される。
4.2 初期配置
入力x=x0⋯xn−1に対し、時刻0の各セルを単位節で固定する。n>0なら位置0を(q0,x0)、位置1,…,n−1をそれぞれxi、位置n,…,Tを空白記号⊔とする。n=0なら位置0を(q0,⊔)とし、残りを空白にする。
4.3 遷移規則の一意性と適用可能性
各0≤t<Tについて、d∈RにわたるCt,dのうちちょうど一つが真であるという節を加える。規則dの左辺が状態qと走査記号aでない場合には、各位置iについて
¬Xt,i,(q,a)∨¬Ct,d
を加える。各行にはヘッド印が一つだけ存在するため、真に選ばれた規則はその配置へ適用することができる規則に限られる。
4.4 局所更新
規則dを固定する。位置iの次のセル記号は、時刻tの位置i−1,i,i+1の三つのセル記号とdだけから一意に定まる。実際、ヘッドが三セルの外にあれば中央セルは変化しない。ヘッドが中央にあれば、書込み記号と移動方向に従って中央の印を消すか残す。ヘッドが左隣から右へ、または右隣から左へ移る場合には、中央セルへ新状態の印を付ける。位置0で左移動を命じた場合には、ヘッドは位置0にとどまる。
この局所更新関数を
Fd:A3⟶A
と書く。規則dが三セル内のヘッド印へ適用することができない組や、複数のヘッド印を含む組には、Fdの値を任意に定めて全域関数にする。実際の行ではヘッド印と規則の適用可能性が別の節により保証されるため、適用不能な組に割り当てた任意の値は充足可能性に影響しない。
左端の外側にはセル記号集合Aに属さない固定境界記号◃を置く。左端専用の局所更新関数
FdL:A2⟶A
を、現在の位置0,1のセル記号から位置0の次のセル記号を返す関数として定める。この関数では、位置0で左移動を命じられたヘッドを位置0にとどめる。適用することができない組には値を任意に定めて全域関数にする。t<Tではヘッド位置が高々tであるため、位置T+1はまだ訪問されていない。そこで、位置Tの右隣には固定空白記号を置いてFdを用いる。
各0≤t<T、1≤i<T、d∈R、および三つのセル記号a−1,a0,a+1∈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)
を 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)
として加える。左端i=0では、各a0,a+1∈Aに対して
¬Ct,d∨¬Xt,0,a0∨¬Xt,1,a+1∨Xt+1,0,FdL(a0,a+1)
を加える。右端i=Tでは、各a−1,a0∈Aに対して
¬Ct,d∨¬Xt,T−1,a−1∨¬Xt,T,a0∨Xt+1,T,Fd(a−1,a0,⊔)
を加える。各行のセル記号が一意であるため、前件が真になる節は実際の三セルの値に対応する節だけであり、次行の値はその節によって定まる。
4.5 受理条件
時刻Tに受理状態の印が存在するという一つの節
0≤i≤Ta∈Γ⋁XT,i,(qacc,a)
を加える。停止後の自己遷移によって、時刻Tで受理状態にあることは、時刻T以前に受理したことと同値である。
以上のすべての節の論理積を
ΦN,x
とする。
5 計算表と充足割当の同値性
補題 5.1. 時刻tとt+1の二行がセル・ヘッドの一意性を満たし、時刻tで選ばれた規則dが唯一のヘッド印へ適用可能であるとする。この二行がすべての局所更新節を満たすことと、第二行が規則dによる第一行の正しい次配置であることは同値である。
証明. 第二行が正しい次配置なら、内点1≤i<Tのセル記号はFd(ai−1,ai,ai+1)、左端のセル記号はFdL(a0,a1)、右端のセル記号はFd(aT−1,aT,⊔)である。したがって、前件が真になる局所更新節の後件も真であり、他の局所更新節は前件の少なくとも一つのリテラルが偽である。よってすべての節が満たされる。
逆に、すべての局所更新節が満たされるとする。内点1≤i<Tでは、一意性によって第一行の位置i−1,i,i+1の実際のセル記号ai−1,ai,ai+1が一つずつ定まる。選択規則もdに一意に定まるため、実際の三セル記号と選択規則dを前件とする節ではすべての否定リテラルが偽になり、
Xt+1,i,Fd(ai−1,ai,ai+1)=1でなければならない。同じ議論を左端では実際の二セルa0,a1とFdLに、右端では実際の二セルaT−1,aTとFd(aT−1,aT,⊔)に適用する。第二行の各位置におけるセル記号も一意であるため、第二行の唯一のセル記号は対応する局所更新関数が指定した記号に等しい。対応する等式がすべての位置で成り立つので、第二行は規則dによる正しい次配置である。▨
定理 5.2. 任意の入力xについて、
N が x を受理する⟺ΦN,x は充足可能である.
証明.Nがxを受理するとする。受理分枝を一つ選び、停止後の自己遷移によって長さTまで延長する。各時刻と位置について、その計算表に実際に現れるセル記号に対応するXだけを真にする。各時刻で実際に選ばれた遷移規則に対応するCだけを真にする。
各セルには一つの記号があり、各配置には一つのヘッドがあるため、一意性制約を満たす。時刻0は初期配置制約を満たし、選んだ規則は実際に適用した規則なので適用可能性制約を満たす。連続する二行は正しい一段遷移であるため、補題 5.1により局所更新制約を満たす。分枝は時刻Tまでに受理し、その後は受理配置にとどまるので受理節も満たす。したがってΦN,xは充足可能である。
逆に、ΦN,xを満たす割当が存在するとする。セル一意性により、各(t,i)にはセル記号が一つ定まり、ヘッド一意性により各行は状態とヘッド位置を一つもつ配置を表す。初期配置節により第0行はN(x)の初期配置である。
各t<Tでは遷移選択制約により規則dtが一つ定まる。適用可能性節によりdtは第t行の状態と走査記号へ適用することができる。補題 5.1により、第t+1行はdtによる第t行の正しい次配置である。tに関する帰納法によって、全行が初期配置から始まる一つの実在する計算分枝をなす。受理節により最終行の状態はqaccであるため、この分枝はxを受理する。▨
6 式サイズと帰着の計算時間
補題 6.1.Nを固定すると、ΦN,xの変数数、節数、符号長、およびΦN,xを出力する時間は、T(∣x∣)の多項式である。
証明.∣A∣と∣R∣は固定機械Nだけに依存する定数である。セル変数は
(T+1)2∣A∣=O(T2)個であり、遷移選択変数はT∣R∣=O(T)個である。
セル記号の一意性には各セル当たり定数個の節しか要らないため、節数はO(T2)である。ヘッドの存在には各行一つ、ヘッドの一意性には各行でO(T2)個の二リテラル節を用いるため、全体でO(T3)個である。遷移選択、初期配置、適用可能性、および局所更新の節数は、各時刻・位置と固定有限集合を走査して作るのでO(T2)個である。受理条件は一つの長い節であり、リテラル数はO(T)である。
したがって節とリテラルの総数はO(T3)である。添字t,iを二進表記する変数名にはO(log(T+2))ビットを要するため、式全体の符号長は
O(T3log(T+2))である。
帰着機械は入力長nから固定多項式T(n)を計算し、上で列挙した順に変数名と節を書き出す。各節の生成には添字に関する多項式時間しか要らず、出力長自体もTの多項式である。T(n)はnの多項式なので、出力時間と出力長はいずれもnの多項式である。▨
7 Cook–Levin の定理
定理 7.1 (Cook–Levin の定理). 充足可能性問題SATは NP 完全である。
証明.命題 1.2により、SAT∈NPである。
任意の言語A∈NPをとる。§E18.11 定義 1.2により、Aを受理する多項式時間非決定性 Turing 機械Nが存在する。Nを固定し、入力xに対して
f(x)=⟨ΦN,x⟩と定める。補題 6.1により、fは多項式時間で計算される。定理 5.2により、
x∈A⟺N が x を受理する⟺ΦN,x は充足可能である⟺f(x)∈SAT.したがってA≤pSATである。A∈NPは任意であったため、SATは NP 困難である。NP への所属と合わせて、SATは NP 完全である。▨
例 7.2. CNF
(z1∨z2)∧(¬z1∨z2)を考える。割当(z1,z2)=(0,1)では二つの節がともに真になり、式全体が真になる。(1,0)では第二節が偽になる。
計算表の符号化でも、各節により同じように許されない局所選択が排除される。一意性節により二つのセル記号を同時に選ぶ割当が排除され、局所更新節により前の三セルと選択規則が定まったときに誤った次セルを選ぶ割当が排除される。個々の節は局所的であるが、すべての節の論理積により計算表全体の整合性が保証される。
8 演習
問題 8.1.
- 命題 1.2の検証器について、変数名が二進添字で符号化される場合にも証明書長が入力長以下になる理由を説明せよ。
- 変数u1,…,um(m≥2)について、「CNF 制約の構成」の節の冒頭の CNF を満たす割当はu1,…,umのちょうど一つを真にする割当に限ることを示し、その節の個数を求めよ。また、新しい変数s1,…,sm−1を用いた CNF
(¬u1∨s1)∧(¬um∨¬sm−1)∧1<r<m⋀((¬ur∨sr)∧(¬sr−1∨sr)∧(¬ur∨¬sr−1))
について、u1,…,umへの割当がこの CNF を満たす割当へ拡張されることと、真であるurが高々一つであることが同値であることを示し、節の個数を求めよ。
- 規則dが、状態qで記号aを読むとbを書き、ヘッドを右へ動かして状態q′へ移る規則であるとする。c,e,f∈Γについて、局所更新関数の値Fd(c,(q,a),e)、Fd((q,a),c,e)、Fd(c,e,(q,a))、Fd(c,e,f)を求めよ。さらに、ヘッド印を位置h(1≤h≤T−2)にただ一つもつ行にFdを各内点で適用して得る行が、規則dによる正しい次配置であることを確かめよ。
- ヘッドの一意性を素朴な二変数節で表した場合にO(T3)個の節を要することを計算せよ。節数がO(T3)であっても帰着が多項式時間である理由を述べよ。
- 早く受理した配置を停止後の自己遷移で延長する規約が、受理分枝の有無を変えないことを証明せよ。
解答 (演習の要点).
-
証明書は、式に現れる相異なる変数それぞれに対する一ビットである。各変数は式の符号の中で少なくとも一文字を占めるので、相異なる変数の個数は符号長m以下である。したがって証明書長もm以下であり、入力長の多項式である。二進添字を用いる符号では一つの変数が複数文字を占めるため、変数の個数はさらに小さくなる。
-
第一の節u1∨⋯∨umは少なくとも一つが真であることと同値であり、各節¬ur∨¬usはur,usがともに真ではないことと同値である。後者がすべてのr<sで成り立つことは真である変数が高々一つであることと同値であるから、CNF を満たす割当はちょうど一つを真にする割当に限る。節の個数は1+(2m)=1+m(m−1)/2である。
次に第二の CNF を考える。真であるurが高々一つであるとし、srを「あるj≤rでujが真」のとき1、そうでないとき0と定める。¬ur∨srはurが真ならばsr=1であることから成り立ち、¬sr−1∨srはsがrについて単調であることから成り立つ。¬ur∨¬sr−1(1<r≤mでr=mの節も含む)は、urが真ならばj<rでujは偽でありsr−1=0であることから成り立つ。逆に、拡張した割当が CNF を満たし、i<jについてui,ujがともに真であると仮定する。¬ui∨siによりsi=1であり、¬sr−1∨srをr=i+1,…,j−1に順に用いるとsj−1=1である。するとj<mならば節¬uj∨¬sj−1、j=mならば節¬um∨¬sm−1が偽になり矛盾する。よって真であるurは高々一つである。節の個数は2+3(m−2)=3m−4である。第一の CNF の(2m)個の二変数節をこの CNF と節u1∨⋯∨umで置き換えると、ちょうど一つの条件を3m−3個の節で表すことができ、(4)のヘッドの一意性は各行O(T)個、全体でO(T2)個の節で表される。
-
「局所更新」の節で定めた規則による。Fd(c,(q,a),e)=bである。ヘッドが中央にあり、右へ動くので中央の印を消して書込み記号bを残す。Fd((q,a),c,e)=(q′,c)である。ヘッドが左隣から右へ移るので、中央セルの内容cに新状態の印を付ける。Fd(c,e,(q,a))=eである。ヘッドは右隣にあり、右へ動くので中央セルへは来ない。Fd(c,e,f)=eである。ヘッドが三セルの外にあるので中央セルは変化しない。
位置hにだけヘッド印(q,a)をもち、他の位置jにテープ記号ajをもつ行を考える。1≤h≤T−2であるから、位置h−1,h,h+1はいずれも内点の範囲1≤i<Tか左端に入る。各内点iについて、窓(ai−1,ai,ai+1)の型は、i=hでは第一の型、i=h+1では第二の型、i=h−1では第三の型、それ以外では第四の型である。したがって次の行は、位置hがb、位置h+1が(q′,ah+1)、他の内点は元のままである。左端i=0についてはFdLを用いるが、h≥1であるからh=1の場合に位置0は右隣にヘッドをもつ型となり変化せず、h≥2でも変化しない。右端i=Tの窓(aT−1,aT,⊔)にはヘッド印が現れないので、位置Tも変化しない。この行は、位置hにbを書き、ヘッドをh+1へ動かし、状態をq′にした配置であり、規則dによる正しい次配置である。
-
各行のヘッド印の候補は、位置0≤i≤Tと(q,a)∈Q×Γの組であり、∣Q∣∣Γ∣が定数なのでO(T)個である。そのうち二つを選ぶ組はO(T2)個であり、行はT+1個あるから、全体でO(T3)個の二変数節を要する。T(n)はnの多項式であるからO(T3)もnの多項式であり、各節の書き出しに要する時間も添字に関する多項式である。したがって帰着関数は多項式時間で計算される。
-
停止後の自己遷移は記号、ヘッド位置、状態のいずれも変えない。したがって、時刻t0≤Tで受理状態に到達した分枝は時刻Tまで受理状態にとどまり、延長後の分枝は時刻Tで受理状態にある。逆に、延長後の分枝が時刻Tで受理状態にあるとする。自己遷移は状態を変えないので、受理状態に初めて入る時刻t0が存在し、時刻t0までの配置列は自己遷移を含まない。よって、それは元の機械の受理分枝である。ゆえに、延長の前後で受理分枝の有無は変わらない。
▨