从4.3.2改为4.4后,我经常处于UNKNOWN状态,我首先得到了SATISFIABLE或UNSATISFIABLE

时间:2015-07-22 15:14:07

标签: z3

我的方案如下:

  • 首先,我遵循乐观的假设,一切顺利;所以我检查断言而不要求不满核心(只使用Assert)。
  • 当我在其中一个测试中获得状态UNSATISFIABLE时,我改变策略并从一开始就使用AssertAndTrack来获得完整的不满核心。

对于版本4.3.2,这非常有效,但在切换到4.4(稳定和最新)之后,Z3经常返回状态UNKNOWN(即使是在没有AssertAndTrack的情况下在4.4中传送SATISFIABLE的检查)。

是否有人可以给我一个提示如何解决问题或如何进一步分析问题呢?

由于

基督教

2 个答案:

答案 0 :(得分:1)

我使用了

的语法
AssertAndTrack(BoolExpr constraint, BoolExpr p) 
懒惰的方式:

 AssertAndTrack(constraint, constraint)

并且总是直接将冲突的约束作为反馈!

从版本4.4开始显然不再可能:第二个参数必须是另一个BoolExpr!我不知道这里的规则是什么,但现在我使用标签和字典来获得反馈,一切正常。

答案 1 :(得分:1)

对于assert-and-track的第二个参数,你需要传递一个命题原子或一个否定。在以前的版本中没有完全检查。这可能是您看到不同行为的原因的解释。