Z3 (检查sat)vs(使用smt检查sat)
在阅读了Z3和Leo的文章后,我认为Z3 (检查sat)vs(使用smt检查sat),z3,Z3,在阅读了Z3和Leo的文章后,我认为(检查sat)和(使用smt检查sat)是等效的。但是,当对我们的测试套件(230个SMTLIB2文件)运行Z3 4.3.2三次时,使用(检查sat),需要198s/192s/195s秒,而使用(使用smt检查sat),则需要275s/283s/270s秒。我还尝试了夜间构建Z3 4.4.0 d3fb5f2a4cda,两者的区别很相似 为什么会这样 更多可能相关的信息: Windows 7 x64、Z3 x64 我们所有的测试都配置了auto_config
(检查sat)
和(使用smt检查sat)
是等效的。但是,当对我们的测试套件(230个SMTLIB2文件)运行Z3 4.3.2三次时,使用(检查sat)
,需要198s/192s/195s秒,而使用(使用smt检查sat)
,则需要275s/283s/270s秒。我还尝试了夜间构建Z3 4.4.0 d3fb5f2a4cda,两者的区别很相似
为什么会这样
更多可能相关的信息:
- Windows 7 x64、Z3 x64
- 我们所有的测试都配置了
和auto_config false
smt.mbqi false
- 所有函数都使用量词和未解释的函数
- 有些使用(非线性)整数和/或实数算术
- 所有产品都大量使用推拉式挡块
编辑:我最终想做的是为一些
检查sat
调用设置超时,但不是为所有调用设置超时。好的,这在检查sat
本身是不可能的,但是使用检查sat(使用参数smt:soft\u timeout$timeout)
应该可以工作。是这样吗?我想您正在SMT2文件上运行Z3
Z3具有在未指定任何基准时确定基准逻辑的功能(例如,参见)。smt
策略是在没有其他策略适用时的回退策略。当Z3以-v:10运行时,它将显示运行的是哪个(子)策略
在最近的一段时间里,我们还遇到了一些配置参数无法传递到smt内核的问题。我们已经解决了这些问题,但当然也有可能在某个地方仍然存在bug 因此,可能是
(检查sat)
选择了比smt
更专业(更高效)的解算器,因此运行时间上存在差异?也请看我编辑的问题。是的,可能是,这取决于基准中使用的内容。你有没有试过(重置)(设置选项:超时或:软超时…[东西](检查sat)?很好!出于某种原因,我认为在第一次断言完成后,您无法更改选项,但在每次检查sat
之前设置:timeout
,似乎效果很好(:soft\u timeout
被拒绝,因为该选项显然已重命名为:timeout
)。使用reset
也可能不是那么容易,因为它也会重置符号声明(我使用:global decls
使符号声明在pops中生存),而且它似乎会重置推送pop堆栈。是的,目前这两个选项名称有点不一致。我们决定删除soft_timeout选项,但尚未在代码的所有部分都删除。看起来好像在Z3的当前主分支中有潜在的关联fyi,可以使用(使用默认值检查sat)
获得您想要的效果。看见