Я пытаюсь использовать квантификатор ForAll
для b
, поэтому формула a * b == b
с каждым b
даст мне в результате a == 1
. Я реализовал это в приведенном ниже коде (Z3 python):
from z3 import *
a, b, a1 = BitVecs('a b a1', 32)
f = True
f = And(f, a1 == a * b)
f = And(f, a1 == b)
s = Solver()
s.add(ForAll(b, f))
if s.check() == sat:
print 'a =', s.model()[a]
else:
print 'Unsat'
Я ожидал, что Z3 выдаст мне a = 1
на выходе, но вместо этого я получил Unsat
. Любая идея о том, где проблема?
(Подозреваю, что неправильно использую ForAll, но не знаю, как это исправить)