注意到对于某些基准测试,通过java API从z3获取查询结果真的很慢。但是,如果我只是将查询转储为smt2格式,并直接在命令行中运行z3,则只需不到一秒钟。不知道为什么?
答案 0 :(得分:1)
我注意到您的问题包含(push)
命令,删除它会显着改变性能。当Z3第一次看到(push)
时,它会切换到支持增量的不同解算器,这会对性能产生巨大影响。通过-v:15将详细程度设置为15,Z3s输出的第一行告诉您它正在使用哪个求解器,例如,当push
命令出现时,它说
(combined-solver "using solver 2 (without a timeout)")
如果不是,则表示
(combined-solver "using solver 1")
对于给定的示例,求解器2恰好更快。