我已经生成了一个smt2文件,该文件已经由Z3(4.3)通过Z3 Java API成功读取(解析)。现在我想知道如何让Z3开始解决多个范围内的公式(推送和弹出)。 smt2文件包含push和pop命令列表。
我知道你可以使用solver.push()和solver.pop()来做到这一点,但这里的问题是文件中已经生成了范围,我没有使用Z3内部API来制作这些公式和范围。我只需要将整个smt2文件提供给Z3并执行多次求解(只有这部分我需要Z3 API)。通过简单地调用solver.check()方法,Z3似乎完全忽略了smt2文件中间的所有范围,并且只给出了最后一个(check-sat)命令的模型。
那么有没有办法调用Z3 API(Java)来执行一系列求解现有smt2文件中定义的多个范围?
非常感谢任何具体的例子。
答案 0 :(得分:1)
不,没有办法做到这一点。解析器函数可以读取输入文件,但它们忽略所有SMT命令,即输出始终只是一组断言,没有别的。
在您处理文件的用例中,建议的过程是将文件传输到Z3,方法是直接提供文件名或将它们连接到stdin。