我的申请人原本是SAT问题。现在,我尝试做一些需要使用一些int变量的扩展。所以问题就变成了SMT问题。但是在使用z3解决它时遇到了性能问题。由于int变量是有界的(小于100),因此将其转换为纯SAT问题是可行的。
有谁知道如何在z3 c ++界面中应用此策略?
或者我可以使用z3首先将SMT约束转换为SAT公式
尝试其他SAT求解器?
提前谢谢。
答案 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。