我有一组可以满足的断言给 z3。当我调用时(check-sat)
,z3 返回sat
。然后我调用(get-model)
并查看特定变量的定义%%P2_*_143
。它看起来像这样:
(define-fun %%P2_*_143 () JS (NUM 2.0))
如果我采用这个定义,把它变成断言
(assert (= %%P2_*_143 (NUM 2.0)))
再次调用(check-sat)
,z3 返回unsat
. 此外,如果我再调用(get-unsat-core)
, z3 会返回()
。
我的理解是 z3 生成的模型对所有变量都给出了令人满意的赋值,因此断言赋值也应该是可满足的。这是不正确的,还是我在其他地方有错误?
整个断言集都在这个要点中:https ://gist.github.com/2966738 。添加的断言位于最底部。
我在 Mac OS X 10.7.4 上使用 Z3 版本 3.2。我还能够使用http://rise4fun.com/z3上的在线界面重现此行为。