Z3 SAT求解器的XOR子句

时间:2013-01-20 00:31:56

标签: z3 xor conjunctive-normal-form

我使用Z3来解决可满足性问题,包括几百个XOR子句,每个子句有22个输入。要编写DIMACS格式的XOR子句,我使用的是Tseitin编码。我的转换将XOR分解为较小的CNF子句,每个子句最多包含五个文字。到目前为止,Z3无法设计SAT解决方案。

我可以/应该做些什么来改进我的编码?

我已经看过高斯消除,但这可能没有帮助,因为XOR表达式没有相同的输入变量。

1 个答案:

答案 0 :(得分:1)

Z3有两个SAT求解器引擎,你可以使用它来启用更高效的引擎 战略框架。例如,请参阅教程Z3 - strategies

有一节说明了位向量公式策略的使用:

 (declare-const x (_ BitVec 16))
 (declare-const y (_ BitVec 16))
 (assert (= (bvor x y) (_ bv13 16)))
 (assert (bvslt x y))
 (check-sat-using (then simplify solve-eqs bit-blast sat))
 (get-model)

也就是说,生成相对容易 使用XOR的基于CDCL的SAT求解器的实例。 例如:

Randal E. Bryant: A View from the Engine Room: Computational Support for Symbolic Model Checking. 25 Years of Model Checking 2008: 145-149

Z3更高效的坐标求解器(由上面的例子调用)有一些 用于检测和传播xors(等价)的数据结构。