用于smt2文件的Java API push和pop

时间:2015-07-17 16:18:57

标签: z3

我已经生成了一个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文件中定义的多个范围?

非常感谢任何具体的例子。

1 个答案:

答案 0 :(得分:1)

不,没有办法做到这一点。解析器函数可以读取输入文件,但它们忽略所有SMT命令,即输出始终只是一组断言,没有别的。

在您处理文件的用例中,建议的过程是将文件传输到Z3,方法是直接提供文件名或将它们连接到stdin。