でバインドされた変数がどのようにインデックス付けされるかを理解しようとしていますz3
。ここにスニペットz3py
と対応する出力があります。( http://rise4fun.com/Z3Py/plVw1 )
x, y = Ints('x y')
f1 = ForAll(x, And(x == 0, Exists(y, x == y)))
f2 = ForAll(x, Exists(y, And(x == 0, x == y)))
print f1.body()
print f2.body()
出力:
ν0 = 0 ∧ (∃y : ν1 = y)
y : ν1 = 0 ∧ ν1 = y
でf1
、同じバインド変数のx
インデックスが異なるのはなぜですか (0
および1
)。を変更しf1
て を取り出すとExists
、x
同じ index( 0
) になります。
インデックス作成メカニズムを理解したい理由:
に送信したい scala の DSL で表される FOL 式がありますz3
。およびを引数として受け取るバインドされた変数を作成するためScalaZ3
のmkBound
API が追加されました。引数にどの値を渡せばよいかわかりません。そこで、次のことを知りたいです。index
sort
index
2 つの式がphi1
あり、変数インデックスが最大でとphi2
がバインドされている場合、 inのインデックスはどうなるでしょうかn1
n2
x
ForAll(x, And(phi1, phi2))
また、インデックス形式ですべての変数を表示する方法はありますか? ではなく、インデックス付きの形式でf1.body()
私を示しているだけです。(理由は、まだバインドされているためだと思います)x
y
y
f1.body()