でバインドされた変数がどのようにインデックス付けされるかを理解しようとしています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のmkBoundAPI が追加されました。引数にどの値を渡せばよいかわかりません。そこで、次のことを知りたいです。indexsortindex
2 つの式がphi1あり、変数インデックスが最大でとphi2がバインドされている場合、 inのインデックスはどうなるでしょうかn1n2xForAll(x, And(phi1, phi2))
また、インデックス形式ですべての変数を表示する方法はありますか? ではなく、インデックス付きの形式でf1.body()私を示しているだけです。(理由は、まだバインドされているためだと思います)xyyf1.body()