(check-sat)vs(check-sat-using smt)

时间:2015-02-19 09:52:41

标签: z3

在阅读了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,差异很相似。

为什么会这样?

可能相关的更多信息:

  • Windows 7 x64,Z3 x64
  • 我们所有的测试都配置了auto_config falsesmt.mbqi false
  • 全部使用量词和未解释的函数
  • 一些使用(非线性)int和/或实数算术
  • 大量使用push-pop块

编辑:我最终想要做的是为某些 check-sat来电设置超时,但不是全部。 AFAIK,check-sat本身无法做到这一点,但check-sat-using (using-params smt :soft_timeout $timeout)应该有效。是吗?

1 个答案:

答案 0 :(得分:2)

我假设您在SMT2文件上运行Z3?

Z3具有在没有指定时确定基准逻辑的工具(参见例如default_tactic.cpp)。当没有其他策略适用时,smt策略是后备。当Z3以-v:10运行时,它将显示运行哪个(子)-tactic。

在最近的过去,我们也遇到了一些配置参数问题,而不是通过smt内核。我们已经解决了这些问题,但当然可能还存在一个错误。