在阅读了Z3的strategies guide和Leo的this answer之后,我预计(check-sat)
和(check-sat-using smt)
是等效的。但是,当我们的测试套件(230个SMTLIB2文件)运行Z3 4.3.2三次时,(check-sat)
需要198s / 192s / 195s秒,而(check-sat-using smt)
需要275s / 283s / 270s秒。我也试过夜间构建Z3 4.4.0 d3fb5f2a4cda,差异很相似。
为什么会这样?
可能相关的更多信息:
auto_config false
和smt.mbqi false
编辑:我最终想要做的是为某些 check-sat
来电设置超时,但不是全部。 AFAIK,check-sat
本身无法做到这一点,但check-sat-using (using-params smt :soft_timeout $timeout)
应该有效。是吗?
答案 0 :(得分:2)
我假设您在SMT2文件上运行Z3?
Z3具有在没有指定时确定基准逻辑的工具(参见例如default_tactic.cpp)。当没有其他策略适用时,smt
策略是后备。当Z3以-v:10运行时,它将显示运行哪个(子)-tactic。
在最近的过去,我们也遇到了一些配置参数问题,而不是通过smt内核。我们已经解决了这些问题,但当然可能还存在一个错误。