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

Z3 如何将SMT(包含布尔和有界int变量)约束转换为CNF,z3,Z3,我的申请人本来是SAT考试的问题。现在,我尝试做一些扩展,需要使用一些int变量。因此,该问题成为SMT问题。但是我在使用z3解决它时遇到了一个性能问题。由于int变量是有界的(小于100),因此可以将其转换为纯SAT问题 有人知道如何在Z3C++接口中应用这种策略吗? 或者我可以先使用z3将SMT约束转换为SAT公式,然后 尝试其他SAT解决方案? 提前感谢。如果您用位向量公式表示您的问题,例如QF_ABV,它将自动展平为命题公式,并使用SAT解算器求解。例如,可以将小于100的整数变量表示为

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

有人知道如何在Z3C++接口中应用这种策略吗? 或者我可以先使用z3将SMT约束转换为SAT公式,然后 尝试其他SAT解决方案?

提前感谢。

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


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

如果使用位向量,yices SMT解算器支持从SMT约束转换为SAT。在SMT问题单中使用(导出到dimacs“myfile.cnf”),并使用
--logic=QF_BV选项运行yices

谢谢你的建议!使用bv变量替换int变量后,性能明显提高。你知道有什么工具可以将包含布尔和位向量变量的约束集转换为纯SAT问题吗?好的,转换为CNF是位向量的最新技术,但我不知道有任何工具可以将转换后的CNF输出到文件中。也许你可以通过破解stp解算器来做到这一点。同时检查它的文件,我可以告诉你这不起作用<与
yices-smt2
不同,code>yices
使用yices语言而不是smtlib。我错过什么了吗?