Вероятно, базовый c вопрос, связанный с Z3: я пытаюсь получить все решения логического выражения, например, для a OR b
, я хочу получить {(true, true),(false,true),(true,false)}
На основе других найденных ответов Например, Z3: найти все подходящие модели , у меня есть следующий код:
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])))
Проблема в том, что он входит в бесконечное l oop, как на второй итерации: ограничение a == s.model()[a]
оценивается как ложное b / c s.model()[a]
больше не существует.
Может кто-нибудь сказать, что я делаю неправильно?