我正在尝试使用以下方法通过Z3的Java API读取常见的SMTLib2文件:
BoolExpr parseSMTLIB2String (String str, Symbol[] sortNames, Sort[] sorts, Symbol[] declNames, FuncDecl[] decls)
问题在于它似乎只读取断言而忽略了其余的断言。因此,无法根据文件中定义的排序添加新断言。排序是未知的,并且断言的添加失败。
有没有办法做到这一点,我想念?
如果没有,似乎我应该直接生成SMTLib2格式而不是使用API。
感谢您的考虑。
答案 0 :(得分:1)
这是正确的,这个函数返回一个表达式,它是文件中所有断言的结合,忽略(几乎)所有其他文件内容。没有读取SMT2命令的功能,因为这通常在Z3之外完成。
也就是说,parseSMTLIB2String
采用参数sorts
,后者可以通过SMT2文件中后面引用的排序来填充。可以使用此选项,使SMT2文件和其他基础结构引用相同的排序。