“切割平面证明系统把CNF的布尔变量解释为整数 $x i\in{0,1}$。子句中正文字 $x i$ 贡献 $x i$,负文字 $\neg x i$ 贡献 $1 x i$;“至少一个文字为真”…”
形式陈述
在命题逻辑中,文字是命题变量
范式定理:每个命题公式都与某个 CNF 公式逻辑等价。构造性证明分三步:消去
直觉
CNF 是一份必须全部满足的约束清单。外层合取要求每条子句成立,内层析取只要求至少一个文字为真;一个子句失败,恰好意味着其中所有文字为假。例如
CNF 的永真性容易逐子句检查:每条子句都必须包含某对
例子与边界
边界之一是规模:逐层分配可能指数爆炸,当
工程上可用Tseitin 转换:为每个内部子公式引入新变量,用短子句固定相应门的双向定义,并额外用单位子句断言根变量为真。根本身若只是文字,就直接断言该文字。对有界元数的公式或电路节点,输出规模与原表示线性相关。但保证随之减弱——Tseitin 转换通常不保证扩充变量上的逐点逻辑等价,而保证等可满足:新公式可满足当且仅当原公式可满足,其满足赋值投影回原变量恰给原公式的模型。两种保证不可混用:需要在所有赋值下逐点一致时(如电路等价性验证的规格端)等可满足的替身不能顶替等价的原式。
推论与应用
CNF 是布尔可满足性生态的标准输入格式:可满足性问题以 CNF 形态成为 Cook–Levin 定理中第一个 NP 完全问题,限制子句长度后的 3-SAT 则是复杂性归约网络的枢纽——任意 CNF 可经引入新变量拆分长子句改写为等可满足的 3-CNF。证明论方向,归结(resolution)证明系统只操作 CNF 子句,其证明长度下界是证明复杂性理论的经典课题。此外,逻辑程序设计中的 Horn 子句(至多一个正文字的子句)是 CNF 的可高效判定片段,硬件验证与规划问题的编码流水线普遍以 Tseitin 式转换落地为 CNF。
参考资料
- Kenneth H. Rosen, Discrete Mathematics and Its Applications, 8th ed., McGraw-Hill, 2019,§1.3, propositional equivalences and normal forms。
- Herbert B. Enderton, A Mathematical Introduction to Logic, 2nd ed., Academic Press, 2001,§1.5, Exercise 9, conjunctive normal form。