我正在使用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?
答案 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