概要
蟻本で 2-SAT のアルゴリズムを最初に見たとき、私はその正当性について何ら疑問を抱きませんでした。
これは私の頭がよく回ったからではなく、単に行間に気づいていなかったからということに最近気づきましたので、反省を兼ねて記録します。
反例のようなもの (反例ではない)
まず に辺を張る部分を考えます。
そもそも であり、 へ辺を張るだけで十分なように思われます。
(これがまずい理由がわかる方はこの記事を読む意味がありません、申し訳ありません)
のみからなる 2-SAT のグラフを書いてみます。
だけに辺を張ると、例えば以下のような順序のトポロジカルソートが考えられます。
の真偽を決めてみます。 なので であり、同様に となります。
ところがこの割り当ては を満たしていません。
これは「 から に到達可能なら 」が必要条件であって、十分条件ではないことに起因しています。
トポロジカルソートを一つ選んだ時対応する割り当てが定まることから、その割り当てが全体で整合することは (直ちには) 導かれません。
一方で にも辺を張るとこのようなことは発生しません。
裏を返せば 2-SAT の正統性の証明は、明示的あるいは暗黙的に「 の辺があるなら の辺がある」事実を使用していることになります。
証明
トポロジカルソートして大小で真偽を割り当てたとき、それが全体で整合することを示します。
不整合を仮定すると、 なる であって の辺を持つものが存在します。
このとき です。
また、 の真偽の割り当てから 及び が分かります。
ここで より の辺が存在しますが、 と矛盾します。
よって割り当ては整合します。
まとめ
理解したつもりは怖い。思考の短絡には気を付けましょう