У меня есть фрагмент кода z3py ниже
I = Int('I')
x = Int('x')
a = Int('a')
O = Bool('O')
constraint1 = Implies(x==0,O)
constraint2 = Implies(And(x >= 6, O), x ==6)
test = And(constraint1,constraint2,(O == I <= a), I==x)
s = Solver()
s.add(ForAll([x],test))
result = s.check()
print result
if result == sat:
print s.model()
Он должен сделать вывод о правильности инварианта O
через предоставленный набор соединений. В этом случае я предоставил соединение I == x
, поэтому все, что нужно сделать z3, это угадать константу a
как 6, чтобы дать правильный инвариант O == (x <= 6)
, который удовлетворяет предложениям рога. Однако я продолжаю получать UNSAT. Есть идеи, почему?