Z3Py Bool变量在模型中转换为Int

时间:2013-06-13 07:13:11

标签: int boolean z3 z3py

我正在使用Z3的python API为我的研究构建一个工具。我有以下问题: 我正在使用Python脚本生成一组Z3约束。由于该集可能不一致,我使用assert_and_check跟踪每个公式。例如,

s.assert_and_track(occWrites_1== True, 'p16')

当然,occWrites被声明为布尔值:

occWrites_1 = Bool('occWrites_1')

但是,在模型中,Z3将occWrites报告为整数。为什么会这样?模型中的occWrites的值不应该是True还是False?

1 个答案:

答案 0 :(得分:0)

我无法重现您描述的问题。 在以下示例中,occofrites_1的值在Z3生成的模型中为true。 它也可以在线here获得。 请注意,该值是Z3表达式,并且它不是Python True值。也许这就是混乱的根源。 方法sexpr()使用Z3内部格式打印值。

from z3 import *

s = Solver()
occWrites_1 = Bool('occWrites_1')
s.assert_and_track(occWrites_1 == True, 'p16')
print s.check()
m = s.model()
print m[occWrites_1]
print m[occWrites_1].sexpr()

产生的输出是:

sat
True
true