与えられc == a + 4
たt == c + b
、もしb == -4
、そしてt == a
。私は反対のことをしようとしています。つまり、上記の 2 つの方程式 と が与えられた場合t == a
、b
これは関連する質問a
とかなり似ていますが、今回はとを切り替えるだけb
で、コードが異なる結果を返すことに本当に混乱しています。
上記のリンクに投稿されたコードに続いて、以下のコードがあります(類似、唯一a
、b
切り替え):
#!/usr/bin/python
from z3 import *
a, b, c, t = BitVecs('a b c t', 32)
g = True
g = And(g, c == (a + 4))
g = And(g, t == (c + b))
s = Solver()
s.add(ForAll([t, a, c], Implies(t == a, g)))
if s.check() == sat:
print s.model()[b]
else:
print 'Unsat'
ただし、Ubuntu では、上記のコードを実行すると予期しない結果Unsatが返されますが、値-4 (または0xfffffffc )は返されません。
なぜこれが間違っているのですか?
本当にありがとう。