結論
先に結論から。
リテラル に対して、以下の条件 A, B, C は同値である。
- A:
のうち、True であるのは 1 個以下である
- B:任意の
(
) に対して、節
を充足する
- C:新たなリテラル
の値を適切に定めたとき、以下をすべて充足する
- 1:節
(
)
- 2:節
(
)
- 3:節
(
)
- 1:節
背景
リテラル のうち、True であるのは高々 1 個であるという条件を、2-SAT で記述することを考える。
なお、この条件は、 を 0-1 変数とみなしたときに、 tex: X_{0} + X_{1} + \dots + X_{N-1} \le 1] とも言い換えられる。
さて、上述の条件は、各 (
) について、節
をすべて追加することで表現できる。しかし、これでは節の個数が
となって計算量的に厳しいことがある。実は新たな変数を用意することで、節の個数を
にできる。
累積 OR を表すリテラルを用意
リテラル に対して、次のような累積 OR を表すリテラル
を用意する。
このとき、次のことが言える (再掲)。
リテラル に対して、以下の条件 A, B, C は同値である。
- A:
のうち、True であるのは 1 個以下である
- B:任意の
(
) に対して、節
を充足する
- C:新たなリテラル
の値を適切に定めたとき、以下をすべて充足する
- 1:節
(
)
- 2:節
(
)
- 3:節
(
)
- 1:節
C について、2 番目は「 は、False, False, ..., False, True, True, ..., True の形になること」を表している。
1 番目は、2 番目と組み合わせることで「ある に対して
が True であるとき、
も連鎖的に True とあること」を表している。
3 番目は、1 番目・2 番目と組み合わせることで「ある に対して
が True であるとき、
も True であり、それに伴い
は False となること」を表している。
ちゃんと証明
A ⇒ C
A を満たすとき、リテラル のうち True であるものは高々 1 個である。
リテラル がすべて False であるとき、
をすべて False にすることで、条件 B を満たす。
リテラル のみが True で、他はすべて False であるとき、
を False として
を True とすることで、条件 B を満たす。
C ⇒ A
リテラル がすべて False であるとき、節
を充足するためには、リテラル
がすべて False である必要がある。これは条件 A を満たす。
リテラル が True であるような最小の
をとってくると、
は False であり、
は True である。このとき、節
と節
をすべて充足するためには、
= True として他はすべて False とする必要がある。これは条件 A を満たす。