从 4.3.2 更改为 4.4 后,我经常在我首先获得 SATISFIABLE 或 UNSATIFIABLE 的地方获得状态 UNKNOWN

After changing from 4.3.2 to 4.4 I get often status UNKNOWN where I got SATISFIABLE or UNSATISFIABLE first

我的场景如下:

对于 4.3.2 版,这可以完美运行,但在切换到 4.4(稳定和最新)后,Z3 经常 returns 状态未知(即使对于在没有 AssertAndTrack 的情况下在 4.4 中交付 SATISFIABLE 的检查也是如此)。

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

谢谢

基督教徒

我使用了

的语法
AssertAndTrack(BoolExpr constraint, BoolExpr p) 

懒惰的方式:

 AssertAndTrack(constraint, constraint)

并且总是直接得到冲突约束作为反馈!

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

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