2月に冬のLAに参加してこれまで5,6年くらい常に取り組みようやく身を結んだ共同研究を発表してきました.
2月のLAではD2辺りからずっと取り組んでいた個人的未解決問題がある程度解決できたことについて発表させていただきます。
— Nobutaka Shimizu (@knewknowl) December 22, 2023
自分の発表には全く関係ないことですが, LAに参加していてValiant--Vaziraniの定理がいまいち知名度がないということを初めて認識しました. これまでもこの定理をブログ記事にしたいと常々思っていたので重い腰をあげて解説しようと思います.
充足可能性判定問題 (SAT)とUSAT
n個の変数x_1,\dots,x_nを持つ論理関数\phi\colon\{0,1\}^n\to\{0,1\}が与えられたときに\phi(x)=1を満たすxが存在するかを問う問題を充足可能性判定問題(SAT)と言います (ここでは論理式は回路として与えられると思ってください. CNFでもOKです.).
一般に充足可能性判定問題は解の存在性を判定するだけです. では特殊ケースとして「充足割当が高々一つしか存在しないことが保証されている論理関数」に対するSATは効率的に解けるのでしょうか?
このような判定問題をUSAT (unique SAT)と言います. 厳密にはUSATは約束問題です. すなわち, 与えられた論理関数\phiが以下で定義される二つの集合U_{\mathrm{yes}},U_{\mathrm{no}}のどちらに属するかを判定する問題です:
\begin{align*} &U_{\mathrm{yes}} = \{\phi\colon \phi\text{ has a unique satisfying assignment}\},\\ &U_{\mathrm{no}} = \{\phi\colon \phi\text{ has no satisfying assignments}\}. \end{align*}
与えられた\phiがこの二つの集合どちらにも属していない場合はYES/NOどちらを答えても正解としてみなします. U_{\mathrm{yes}}, U_{\mathrm{no}}はdisjointですがU_{\mathrm{yes}}\cup U_{\mathrm{no}}は必ずしも入力全体の集合になるわけではありません. yesインスタンス全体とnoインスタンス全体の和集合が入力全体になる決定問題を判定問題と呼び, そうとは限らない決定問題を計算量理論では約束問題 (promise problem)といいます (約束問題は判定問題を特殊ケースとして含んでいます). 細かい注意ですが, \mathsf{P}とか\mathsf{NP}は判定問題の計算量クラスなので「\mathrm{USAT}\in\mathsf{P}」という主張は文法がおかしく, 正しくは 「\mathrm{USAT}\in\mathsf{prP}」です (promise P).
Valiant--Vaziraniの定理
Valiant--Vaziraniの定理とは乱択を許したときにUSATがSATに帰着できることを主張する定理です. 例えばその帰結として
USATが多項式時間で解ける \Rightarrow SATが乱択多項式時間で解ける
が得られますので, USATはいわば"乱択NP困難" (これはofficialな用語ではない!)ということになります. ValiantはPAC学習を定義したりマッチング数え上げの#P困難性を証明した方で, Vaziraniは近似アルゴリズムの本で有名なVaziraniです. どちらも非常に偉大な方です. 原著論文はこちらです.
- \phi\in \mathrm{SAT} ならば, \Pr[R(\phi)\in U_{\mathrm{yes}}]\ge \frac{1}{p(n)}.
- \phi\not\in\mathrm{SAT} ならば, 確率1でR(\phi)\in U_{\mathrm{no}}.
仮にUSATが多項式時間アルゴリズムAで解けたとしましょう. このアルゴリズムAを定理1のアルゴリズムRと組み合わせることで以下のようにしてSATを解くことができます:
- 与えられた論理関数\phiを入力としてRを走らせ, 別の論理関数\phi'を得る.
- \phi'を入力としてAを走らせ, YESを出力したらそのままYESを出力する.
- そうでなければステップ1に戻る. これを100p(n)回繰り返しても終わらない場合はNOを出力する.
証明のアイデア
- \phi\colon\{0,1\}^n\to\{0,1\}を与えられた論理関数とする.
- 適切に設定されたパラメータmに対し, f\colon\{0,1\}^n\to\{0,1\}^mを一様ランダムな関数とする (すなわち, 各x\in\{0,1\}^nに対してf(x)は独立一様ランダムなmビット文字列を出力する関数.
- \phi'(x) = \phi(x) \land \langle f(x)=1^m \rangleとする. ここで\langle E \rangleは事象Eの指示関数とする.
ペア独立性
\begin{align*} \Pr[X_i = x_i \text{ for all }i\in [n]]=\prod_{i\in [n]}\Pr[X_i=x_i] \end{align*}
を意味します. 独立という代わりに相互に独立(mutually indepedent)であると言うこともあります.
\begin{align*} \Pr[X_i=x_i\text{ and }X_j=x_j]=\Pr[X_i=x_i]\Pr[X_j=x_j] \end{align*}
が成り立つとき, X_1,\dots,X_nはペア独立 (pairwise independent) であると言います. pairwise independenceにはこれといったスタンダードな和訳は(私の知る限り)ないと思いますが, ここではこちらのページから拝借しております. なお, 上の定義ではi\neq jとしていることに注意してください.
ペア独立ハッシュ関数
ハッシュ関数と聞くとPythonの辞書などを想起されますが, 計算量の文脈ではハッシュ関数と言ったらある分布に従って生成されたランダムな関数を指すものと思ってください.
ランダムな関数f\colon\{0,1\}^n\to\{0,1\}^mに対し, 2^n個の確率変数f(0^n),\dots,f(1^n)がペア独立であるとき, fはペア独立ハッシュ関数であると言います.
単にfがペア独立ハッシュ関数であると言った場合は単にペア独立性だけを指しますが, しばしば, 任意に固定したx\in\{0,1\}^nに対してf(x)の分布は一様ランダムであることが多いです.
例えば, 証明のアイデアで考えた「各x\in\{0,1\}^nに対し独立一様ランダムなmビット文字列をf(x)として出力する関数」はペア独立ハッシュ関数です. この例は生成に指数長のランダムシードを要しますが, よりrandomness-efficientなものも構成できます.
ランダムな直線
有限体\mathbb{F}=\mathbb{F}_{2^n}上の関数を考えます. ここでは\mathbb{F}_{2^n}の厳密な定義を理解しておく必要はありません. 掛け算と足し算ができて, 非ゼロな元では割り算ができて, これらの演算がnに関する多項式時間でできて, しかも|\mathbb{F}_{2^n}|=2^nになっているので\{0,1\}^nと一対一対応がある, という事実だけを使います. 一様ランダムにa,b\sim\mathbb{F}をサンプリングしてランダム関数f\colon \mathbb{F}\to\mathbb{F}を
f(x) = ax+b
で定めます. 有限体を\mathbb{F}_{2^n}\cong \{0,1\}^nで同一視するとfはnビット文字列からnビット文字列への関数とみなせます.
証明. 任意のx_1\neq x_2\in \mathbb{F}とy_1,y_2\in\mathbb{F}に対して
\Pr[f(x_1)=y_1 \text{ and }f(x_2)=y_2] = \Pr[f(x_1)=y_1]\Pr[f(x_2)=y_2]
を示せば良いです. f(x_i)=y_i (i=1,2)という等式を行列を用いて表すと
\begin{bmatrix} x_1 & 1 \\ x_2 & 1 \\ \end{bmatrix} \begin{bmatrix} a \\ b \end{bmatrix} = \begin{bmatrix} y_1 \\ y_2 \end{bmatrix}
となります. ヴァンデルモンドの行列式から係数行列は正則なので, [a\,b]^{\top}はある特定のベクトルになっていなければならず, a,b\sim\mathbb{F}は一様ランダムなのでこれが起こる確率は1/|\mathbb{F}|^2となります.
一方で\Pr[f(x_i)=y_i]=1/|\mathbb{F}|なので, 確かに(f(x))_{x\in \mathbb{F}}はペア独立であることが確認されました. (証明終)
補題2で構成したペア独立ハッシュ関数はnビット文字列からnビット文字列への写像でしたが, 出力のnビットのうち最初のmビットだけを取り出した (m\le n) 文字列を出力するようにすれば, 値域を\{0,1\}^mにしつつペア独立になるようにできます.
証明. 確率変数(f(x))_{x\in\{0,1\}^n}がペア独立であることを利用して(f'(x))_{x\in\{0,1\}^n}がペア独立であることを示します. ペア独立性の定義から, 任意のx_1\neq x_2\in\{0,1\}^nとy_1,y_2\in\{0,1\}^mに対して
\Pr[f'(x_1)=y_1\text{ and }f'(x_2)=y_2]=\Pr[f'(x_1)=y_1]\Pr[f'(x_2)=y_2]
が成り立つことを示せばよいです.
文字列y\in\{0,1\}^mに対して, 先頭mビットがyになるようなnビット文字列の全体をS(y)\subseteq\{0,1\}^nとします. f'(x)はf(x)の先頭m文字を取り出すことから, f'(x)=y \iff f(x)\in S(y)です. 従って
\begin{align*} \Pr[f'(x_1)=y_1\text{ and }f'(x_2)=y_2] &= \sum_{z_1\in S(y_1),z_2\in S(y_2)} \Pr[f(x_1)=z_1\text{ and }f(x_2)=z_2] \\ &= \sum_{z_1\in S(y_1),z_2\in S(y_2)} \Pr[f(x_1)=z_1]\Pr[f(x_2)=z_2] & & \text{pairwise independence of $f$} \\ &= \Pr[f(x_1) \in S(y_1)]\Pr[f(x_2)\in S(y_2)] \\ &= \Pr[f'(x_1)=y_1]\Pr[f'(x_2)=y_2] \end{align*}
より主張が得られます. (証明終)
補題2,3を組み合わせると, 以下の命題が成り立つことがわかります.
Valiant--Vaziraniの定理の証明
いよいよ定理1を証明します. \phi\colon\{0,1\}^n\to\{0,1\}を与えられた論理関数とし, 以下の帰着を考えます:
- m\sim\{1,\dots,n\}を一様ランダムに選ぶ.
- f\colon\{0,1\}^n\to\{0,1\}^mを補題4で保証されるペア独立ハッシュとする.
- \phi'(x)=\phi(x)\land \langle f(x)=1^m\rangleで定義される論理関数\phi'を出力する.
ステップ3では, Cook-Levinの定理の証明からコンピュータで計算できるアルゴリズムはその内部(レジスタや読み込みテープの位置など)の動きを回路で表現できることを用います. すなわち, 補題4ではx\mapsto f(x)は多項式時間で計算できるので, この計算を回路で表現することによってBoolean関数x\mapsto \langle f(x)=1^m\rangleをnに関する多項式サイズの回路で表現することができます (SATを考えると, このようにペア独立ハッシュ関数の計算過程を表現できるというuniversalityが役にたつというわけです!). 従って\phi\mapsto \phi'を計算する上記の乱択アルゴリズムは多項式時間アルゴリズムです.
正当性の証明
\phi'の正当性を証明します. 与えられた論理関数\phiが充足不可能ならば\phi'を充足する割当も存在しません. 従って\phiが充足可能であるときに\phi'が充足可能である確率を評価すればよいです.
\phiが充足可能であるとし, 1\le N \le 2^nを\phiの充足割当の個数とします. 充足割当が非常に多く, 例えばN\ge 2^{n-3}を満たすならば一様ランダムなx\sim\{0,1\}^nに対して\phi(x)=1かどうかをチェックすれば\phiの充足可能性が簡単に解けて, \phiが充足可能ならば定数1を\phi'として出力すればよいので, N\le 2^{n-3}を仮定します.
m\sim[n]が一様ランダムに選ばれているので, 確率1/nで
\begin{align} 2^{m-3}\le N \le 2^{m-2} \end{align}
を満たします. 以後はmが(1)を満たすと仮定して議論を進めます.
\phiの充足割当の全体をa_1,\dots,a_N (a_i\in\{0,1\}^n) とし, 確率変数X_i=\langle f(a_i)=1^m \rangleを考えると, X=\sum_{i\in[N]} X_iは\phi'の充足割当の個数に等しいです. ですので \Pr[X=1]\ge 1/\mathrm{poly}(n)を示すのが目標です. Nとmの関係(1)より, 1/8 \le \mathbb{E}[X] \le 1/4です.
任意のx\in\{0,1\}^nに対して\Pr[f(x)=1^m]=1/2^mなので, \mathbb{E}[X]=N/2^mを満たします. 従って
\begin{align*} \Pr[X=1] &= \Pr[\exists i,X_i=1\text{ and }\forall j\neq i,X_j=0] \\ &= \sum_i \Pr[X_i=1\text{ and }\forall j\neq i,X_j=0] \\ &= \sum_i \Pr[\forall j\neq i,X_j=0\,|\,X_i=1]\Pr[X_i=1] \\ &= \sum_i (1-\Pr[\exists j\neq i,X_j=1\,|\,X_i=1])\Pr[X_i=1] \\ &\ge \sum_i \Pr[X_i=1] (1-\sum_{j\neq i} \Pr[X_j=1\,|\,X_i=1]\Pr[X_i=1]) \\ &= \sum_{i}\Pr[X_i=1]-\sum_{i\neq j} \Pr[X_i=1]\Pr[X_j=1] & & \text{pairwise independence}\\ &\ge \mathbb{E}[X] - \mathbb{E}[X]^2 \\ &\ge \frac{1}{8} - \frac{1}{16} & & \text{(1)}\\ &\ge \frac{1}{16} \end{align*}
を得ます. mが一様ランダムなので, (1)が成り立つ確率は1/nです. 従って, \phiが充足可能のときに\phi'\in U_{\mathrm{yes}}となる確率は少なくとも\frac{1}{16n}となります. (証明終)
グラフ問題に対するペア独立性の応用
Valiant--Vaziraniの定理はSATに対してペア独立な関数を制約に加えることによって解の個数を減らすという帰着でしたが, 似たようなアイデアに基づいてグラフ上の部分グラフ数え上げ問題に対して解の個数を減らす帰着を与えることができます (ただし帰着後の問題は元の問題とは違う問題になってしまう).
次の二つの問題を考えます:
- 与えられたグラフG=(V,E)が三角形を含むかどうかを判定せよ (\mathrm{TRI})
- 有限体\mathbb{F}_qに対し, 各辺e\in Eが\mathbb{F}_qの元を重みとして持つ辺重みグラフ\tilde{G}を考え, 辺重みの総和が0になるような三角形(以後はゼロ三角形と呼ぶ) の存在性を判定せよ (\mathrm{ZWT}_q)
この事実を確認するために, 相異なる二つの三角形T\neq T'を考えます. TとT'が辺を共有しない場合はX_TとX_{T'}は独立です. 仮にこの二つの三角形が辺を共有していたとしても, T\neq T'より共有している辺の本数は必ず1本になり, これ以外の辺の重みは独立に決まるのでX_TとX_{T'}は独立になります.