【发布时间】:2020-03-27 18:11:09
【问题描述】:
可能是与 Z3 相关的一个基本问题:我正在尝试获取布尔表达式的所有解决方案,例如对于a OR b,我想得到{(true, true),(false,true),(true,false)}
基于找到的其他回复,例如Z3: finding all satisfying models,我有以下代码:
a = Bool('a')
b = Bool('b')
f1=Or(a,b)
s=Solver()
s.add(f1)
while s.check() == sat:
print s
s.add(Not(And(a == s.model()[a], b == s.model()[b])))
问题在于它在第二次迭代时进入了无限循环:约束 a == s.model()[a] 被评估为 false b/c s.model()[a] 不再存在。
谁能告诉我我做错了什么?
【问题讨论】: