Z3 の QBVF ソルバーをいじっていて、存在するアサーションから値を抽出できるかどうか疑問に思っています。つまり、私が次のものを持っているとしましょう:
(assert (exists ((x (_ BitVec 16))) (forall ((y (_ BitVec 16))) (bvuge y x))))
これは基本的に、「最小」の 16 ビット符号なし値があることを示しています。次に、私は言うことができます:
(check-sat)
(get-model)
Z3-3.0 は喜んでこう答えます。
sat
(model (define-fun x!0 () (_ BitVec 16)
#x0000)
)
これは本当にクールです。しかし、私がやりたいのは、get-value を介してそのモデルの一部を抽出できるようにすることです。当然のことながら、次のいずれも機能していないようです
(get-value (x))
(get-value (x!0))
いずれの場合も、Z3 は当然、そのような定数はないと不平を言います。(check-sat)
呼び出しへの応答によって証明されるように、Z3 がその情報を持っていることは明らかです。get-value
または他のメカニズムを介して、存在する値に自動的にアクセスする方法はありますか?
ありがとう..