在Z3中使用不同的后端解算器

时间:2017-06-19 04:11:09

标签: z3 z3py sat-solvers

我正在使用Z3 Python界面为我的实验创建公式。然后我将该公式发送给Z3求解器。如果我是正确的Z3使用自己的解算器!

如何在Z3py上使用不同的SAT / SMT求解器?

我在CBMC(C有界模型检查器)中使用它的方式:运行程序并吐出中间DIMAC表示(在文件中),然后使用该文件作为其他SAT求解器的输入。我可以在Z3中做类似的事情。谢谢。

2 个答案:

答案 0 :(得分:4)

听起来你真的应该使用解算器不可知的SMT接口而不是Z3py。已经有多次尝试创建这样的接口,对多个解算器有不同程度的支持:

绝不是一份详尽的清单。我确信还有其他一些主语言也有不同程度的成熟度。您应该选择哪一个取决于您的主机语言偏好以及每个系统提供的功能;可能差别很大。

答案 1 :(得分:2)

所有SMT求解器都支持SMT2输入格式,因此您可以对Z3和其他SMT求解器执行相同操作。 Z3py可以将Solver和Goal对象转换为符合SMT2的字符串(一些复杂的变量声明,例如某些数据类型可能会丢失)。

Z3py是Z3特定的API(顾名思义)它没有提供使用其他SMT求解器的方法。