Solver.model()
一見不必要な で代入を返すことがありますが、Var()
私は (おそらく単純に)Solver.model()
各変数に対して常に具体的な値を返すことを期待していました。例えば:
#!/usr/bin/python
import z3
x, y = z3.Ints('x y')
a = z3.Array('a', z3.IntSort(), z3.IntSort())
e = z3.Not(z3.Exists([x], z3.And(x != y, a[x] == a[y])))
solver = z3.Solver()
solver.add(e)
print solver.check()
print solver.model()
生産する
sat
[k!1 = 0,
a = [else -> k!5!7(k!6(Var(0)))],
y = 1,
k!5 = [else -> k!5!7(k!6(Var(0)))],
k!5!7 = [1 -> 3, else -> 2],
k!6 = [1 -> 1, else -> 0]]
何が起きてる?Var(0)
ina
の「else」は、配列の 0 番目の引数を参照していますa
かa[i] = k!5!7[k!6[i]]
? のような具体的な満足のいく割り当てをa
Z3から取得することは可能a = [1 -> 1, else -> 0]
ですか?