Z3 Java API。读取SMTLib2并执行它

时间:2017-08-28 08:14:14

标签: java z3

我正在尝试使用以下方法通过Z3的Java API读取常见的SMTLib2文件:

BoolExpr parseSMTLIB2String (String str, Symbol[] sortNames, Sort[] sorts, Symbol[] declNames, FuncDecl[] decls)

问题在于它似乎只读取断言而忽略了其余的断言。因此,无法根据文件中定义的排序添加新断言。排序是未知的,并且断言的添加失败。

有没有办法做到这一点,我想念?

如果没有,似乎我应该直接生成SMTLib2格式而不是使用API​​。

感谢您的考虑。

1 个答案:

答案 0 :(得分:1)

这是正确的,这个函数返回一个表达式,它是文件中所有断言的结合,忽略(几乎)所有其他文件内容。没有读取SMT2命令的功能,因为这通常在Z3之外完成。

也就是说,parseSMTLIB2String采用参数sorts,后者可以通过SMT2文件中后面引用的排序来填充。可以使用此选项,使SMT2文件和其他基础结构引用相同的排序。