是否有可能使用Z3 API(例如Python API)来保存求解器的当前状态,包括求解器学到的东西(在SAT求解中我们会说&# 34;学习条款")在SMT2格式的文件中?
因为我希望能够将解算器的状态保存在临时文件中以便以后继续解决,以便有时间了解我应该对它进行哪些进一步的查询。
非常感谢...
答案 0 :(得分:1)
SMT2没有保存给定求解器状态的规定,毫无疑问它将从求解器到求解器有很大的不同。但是,每个求解器可能有不同的机制,但它绝对不是SMTLib2格式。
由于您的问题完全针对Z3,因此我建议您在https://github.com/Z3Prover/z3/issues上询问它们是否有任何有趣的内容。但据我所知,目前这是不可能的。
答案 1 :(得分:0)
最后Levent是对的:)
以下是来自Z3 github网站的Nikolaj Bjorner的一些观察结果。
" 解算器的状态不能完全序列化为SMT2格式。 您可以根据当前断言将解算器打印为smt2格式, 但未学习从句/单元在Solver对象上使用 sexpr()方法。"
...
"我们没有揭示打印内部状态的方法。您可以中断解算器,然后克隆使用"翻译"方法并使用内部打印实用程序访问已翻译的求解器状态。您必须稍微更改代码才能达到此状态。 解算器上的打印功能无法访问任何解算器的内部状态,而是查看声明的公式并打印它们。 我不会翻译学习的词条。例如,smt_context.cpp第176行中的代码被禁用,因为它对任何性能增强都没有帮助。类似地,sat_solver中的复制代码不会复制学习的子句,即使它保留了学习的单元文字和二进制子句。"
您可以在此link看到Nicolaj的上述评论。