CNF(合取標準形)とは何か:定義・変換・実務での応用と注意点
概要:CNF(合取標準形)とは
CNF(Conjunctive Normal Form、合取標準形)はブール論理式の表現の一つで、複数の節(clause)を論理積(AND)で結んだ形を指します。各節はリテラル(変数またはその否定)の論理和(OR)で構成されます。コンピュータサイエンスやソフトウェア検証、SATソルバーでの問題定式化など、広範な分野で基本的かつ重要な役割を持ちます。
形式的定義と簡単な例
形式的には、CNFは次のように表されます。
- 一つのCNF式は複数の節の論理積:C1 ∧ C2 ∧ ... ∧ Cn
- 各節 Ci はリテラルの論理和: (l1 ∨ l2 ∨ ... ∨ lk)
- リテラルは変数 x またはその否定 ¬x のいずれか
例: (x1 ∨ ¬x2 ∨ x3) ∧ (¬x1 ∨ x4) は CNF の典型的な式です。
CNF に変換する手順
任意のブール式は等価な CNF に変換可能ですが、直接分配則を適用すると式のサイズが爆発することがあります。一般的な変換手順は次の通りです。
- 含意(→)や同値(↔)を基本演算(∧, ∨, ¬)に置き換える。
- ド・モルガンの法則を用いて否定を変数の前に移動し、否定正規形(NNF)にする。
- 分配法則(∨を∧に分配)を用いて CNF に変換する。ただしこの方法は指数的に膨らむ可能性がある。
実務的にはサイズ増加を抑えるために Tseitin 変換(導入命題を用いる線形サイズ変換)が広く使われます。Tseitin 変換では元の部分式ごとに新しい補助変数を導入し、各補助変数と部分式との同値性を節で表現します。これにより元式と同値ではなく充足不能性に関して等価な CNF を線形サイズで得られます(SAT 問題を扱う上では十分)。
代表的な特殊形:k-CNF、Horn、2-SAT
- k-CNF:各節が高々 k 個のリテラルからなる CNF。特に 3-CNF は 3-SAT 問題の基礎。
- Horn CNF:各節に含まれる正リテラルが高々 1 個の CNF。Horn SAT は線形時間で解ける。
- 2-SAT:各節のリテラル数が最大 2 の場合、強連結成分を使うことで多項式時間(線形)で解ける。
CNF と SAT(充足可能性問題)
CNF は SAT ソルバーが扱う標準的な入力形式です。SAT(CNF-SAT)は、与えられた CNF 式を真にする変数の割り当てが存在するかを問う問題で、NP完全であることで知られます(特に 3-SAT)。しかし実務的な SAT ソルバーは高度に最適化され、現実の大規模問題を効率良く解けることが多いです。
SAT ソルバーの基本技術
主要なアルゴリズムや最適化技術は以下です。
- DPLL:分割とバックトラックを行う古典的な探索法。単位伝播(unit propagation)を用いる。
- CDCL(Conflict-Driven Clause Learning):衝突解析で学習節(学習クローズ)を生成し、バックジャンプを行う。現在の主要ソルバーはこれを採用。
- ウォッチリテラル:効率的な単位伝播を実現するデータ構造。
- 前処理(簡約)・後処理:単位節削除、純リテラル除去、節の縮退除去、変数削除など。
CNF への実務的エンコーディング技法
多くの実世界問題は直接 CNF に落とすと効率が悪くなるため、様々なエンコーディング技法が使われます。
- 基礎的なエンコーディング:論理表現をそのまま Tseitin で変換
- 順序回路や加算器を使うカーディナリティ制約のエンコーディング(逐次加算器、ソートネットワークなど)
- Pseudo-Boolean(擬似ブーリアン)や XOR 制約を特別処理するハイブリッド手法
- 対称性除去や問題固有の簡約を行ってサイズを削減
形式検証・計画・AI における応用例
CNF/SAT は多様な分野で応用されています。
- ハードウェア・ソフトウェアの形式検証(モデル検査で生成される条件を SAT に帰着)
- 自動計画(Planning as SAT):計画問題を時間ステップごとに CNF にエンコードして SAT ソルバーで解く
- 制約充足問題、テスト生成、最適化(MaxSAT)、暗号解析(暗号の特性を SAT に落とす)
- 知識表現や定理証明補助(自動定理証明器で SAT/SMT を利用)
実運用で注意すべき点
- 直接的な CNF 化は式の指数的膨張を招くことがあるため、Tseitin などの補助変数導入法を用いること。
- エンコーディング次第で SAT ソルバーの性能が大きく変わる。節のサイズ分布や対称性が重要。
- DIMACS 形式など入出力規約を守ること(ソルバー間の互換性確保)。
- 最適化問題(MaxSAT 等)や数え上げ問題(#SAT)など、CNF を用いた派生問題では異なるアルゴリズムが必要。
代表的なツール・フォーマット
- DIMACS CNF 形式:多くの SAT ソルバーが入力として採用する簡易テキスト形式。
- MiniSAT、Glucose、Lingeling、Cadical などの CDCL ベースソルバー。
- Z3 や CVC4 などの SMT ソルバーは SMT-LIB を通じて内部で CNF 化(または内部論理変換)を行う。
具体例(概念説明)
例えば式 (a → b) ∧ (b → c) を CNF に直すと、含意を置換して (¬a ∨ b) ∧ (¬b ∨ c) という CNF になります。より複雑な式は Tseitin 変換で補助変数を導入するのが実務的です。
まとめと今後の展望
CNF は理論的な基礎と豊富な実用技術の両方を持ち、SAT ソルバーの進化とともに応用領域が拡大しています。近年はSATと機械学習の融合、分散 SAT、QBF(量化ブール式)やハイブリッド解法など新しい研究領域が活発です。実務では適切なエンコーディングと前処理が性能を左右するため、問題ごとの工夫が重要です。
参考文献
Conjunctive normal form (Wikipedia)
Tseitin transformation (Wikipedia)
SAT Competition / DIMACS 形式 等 (SAT関連情報)
Handbook of Satisfiability(概説、英語)
投稿者プロフィール
最新の投稿
IT2025.12.13F10キーの完全ガイド:歴史・OS別挙動・開発者向け活用法とトラブルシューティング
IT2025.12.13F9キーの全貌:歴史・OS・アプリ別の挙動と活用テクニック
IT2025.12.13F8キーの完全ガイド:歴史・実用・トラブル対処(Windows・アプリ・開発者向け)
IT2025.12.13F7キー完全ガイド:歴史・OS別挙動・IME・アクセシビリティ・開発者向け対処法

