使用 Z3 2.18 版,我试图简化公式,例如:
- (和 (> (- (- x 1) 1) 0) (> x 0))
- (或 (> (- (- x 1) 1) 0) (> x 0))
希望得到类似的东西:(> x 2)和(> x 0)。
我正在使用以下输入文件运行 Z3,其中 F 是上述公式之一:
(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))
)
谢谢,格斯