子句之间同时满足,子句内部择一满足

变量p或其否定¬p称为文字;p∨¬q是子句,(p∨¬q)∧(q∨r)则是CNF。赋值必须使每个子句至少有一个真文字,不能因为某一子句已满足就忽略其余。子句宽度统计其中的文字数,不等于公式的变量数或子句总数。

同一种CNF外形可以承载不同难度的限制。每个子句至多两个文字得到2-CNF;每个子句至多一个正文字得到霍恩公式;3-CNF则允许至多三个文字。限制的是各自不同的结构,不能互相替换。

参考:[1] [2]

直接分配与辅助变量

逻辑分配律可以把a∨(b∧c)改成(a∨b)∧(a∨c),在原变量上保持等价。但反复分配会复制子公式,不能据此保证转换后长度仍与输入线性相关。实际求解常为子公式或电路门引入新变量,避免重复展开同一结构。

例如以z表示a∧b,可用(¬z∨a)∧(¬z∨b)∧(z∨¬a∨¬b)约束三者,再在需要整个子公式成立时加入z。原公式的满足赋值可以扩展为新公式的满足赋值;反过来,新公式的满足赋值限制到原变量后也满足原公式。

参考:[1] [2]

保持可满足不等于所有赋值逐一相同

加入新变量后,不能不加说明就把新旧公式称为同一变量空间中的逻辑等价式。编码所需的保证通常是可满足性双向保持,且能从模型提取原变量的值。比较证明或求解结果时,必须说明辅助变量与原子公式的对应。

CNF本身也不保证高效。一般CNF可满足性是NP完全问题,甚至宽度至多三也足够表达这种难度;约束传播只消除当前被迫的部分选择,遇到一般公式仍可能需要分支。统一格式帮助算法工作,并没有消除搜索问题。

参考:[1] [2]