Z3バージョン2.18を使用して、次のような式を単純化しようとしています。
- (および(>(-(-x 1)1)0)(> x 0))
- (または(>(-(-x 1)1)0)(> x 0))
(> x 2)および(> x 0)のようなものを取得したいと考えています。
次の入力ファイルを使用してZ3を実行しています。ここで、Fは上記の式の1つです。
(set-option set-param "STRONG_CONTEXT_SIMPLIFIER" "true")
(declare-const x Int)
(simplify F)
これは、次の出力が得られる論理和でうまく機能します。
(let (($x35 (<= x 0)))
(not $x35))
ただし、接続詞を使用すると、次のようになります。
(not (or (<= x 0) (<= x 2)))
Z3に上記の式をさらに単純化するように強制する方法はありますか?取得できるといいのですが(not (<= x 2))
。
PS:Z3にその出力をインライン化させる方法はありますか(つまり、(not (<= x 0))
の代わりに持つ(let (($x35 (<= x 0))) (not $x35))
)
ありがとう、ガス