Z3は、しばしば、中間関数の束として定義されたモデルを返します。たとえば、次のようなことがよくあります(私の不適切な構文を許してください)。Z3で完全に評価された結果は?
(define-const myArray (Array Bool Int) (_ as-array f))
(define-fun f (x Bool) Int (f!10 (k!26 x)))
...などです。
私は私のプログラム(ライブラリバインディングを使ってZ3を呼び出す)に取り込むことができ、結果を出力し、それらを実際に実行できる関数に解析することができるようにしたいと思います。お互いに定義された複数の関数ではなく、私が実行できる単一直線プログラムとしてモデル関数を得ることができれば、これははるかに簡単です。
これは可能ですか?私は有限ドメイン関数のみを扱っています。
おそらく 'eval'関数が役に立ちますか? (SMT-LIBの場合、このページで "eval"を検索してください:https://rise4fun.com/z3/tutorialcontent/guide。pythonのバージョンについては、このページで "eval"を検索してください:https:// z3prover .github.io/api/html/z3.html) –
@JamesWilcoxありがとう、私はそれが存在することを知らなかった – jmite