如何将SMT(包含布尔和有界int变量)约束转换为CNF

时间:2014-05-09 15:09:07

标签: z3

我的申请人原本是SAT问题。现在,我尝试做一些需要使用一些int变量的扩展。所以问题就变成了SMT问题。但是在使用z3解决它时遇到了性能问题。由于int变量是有界的(小于100),因此将其转换为纯SAT问题是可行的。

有谁知道如何在z3 c ++界面中应用此策略? 或者我可以使用z3首先将SMT约束转换为SAT公式 尝试其他SAT求解器?
提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果您在位向量公式中表示问题,例如QF_ABV,它将自动展平为命题公式,并使用SAT求解器求解。例如,您可以将不到100个整数变量表示为7位的位向量。

除了位向量之外,从SMT到SAT的转换不会提升您的性能(否则SMT将不存在)。因为SAT求解器仅擅长于案例分析和理论特定的决策程序,例如基于单纯形的线性算法算法在求解约束方面效率更高。

答案 1 :(得分:0)

如果使用Bitvectors,则SMT求解器支持从SMT约束转换为SAT。在SMT问题表中使用(export-to-dimacs" myfile.cnf")并使用--logic=QF_BV option运行yices。