如何获得;“更强”;Z3中连词的简化?

如何获得;“更强”;Z3中连词的简化?,z3,Z3,使用Z3 2.18版,我试图简化公式,例如: (和(>(-x1)1)0)(>x0)) (或(>(-x1)1)0)(>x0)) 希望得到如下结果:(>x2)和(>x0) 我使用以下输入文件运行Z3,其中F是上述公式之一: (set-option set-param "STRONG_CONTEXT_SIMPLIFIER" "true") (declare-const x Int) (simplify F) 它可以很好地处理析取,我可以得到以下输出: (let (($x35 (<= x 0

使用Z3 2.18版,我试图简化公式,例如:

  • (和(>(-x1)1)0)(>x0))
  • (或(>(-x1)1)0)(>x0))
希望得到如下结果:(>x2)和(>x0)

我使用以下输入文件运行Z3,其中F是上述公式之一:

(set-option set-param "STRONG_CONTEXT_SIMPLIFIER" "true")
(declare-const x Int)
(simplify F)
它可以很好地处理析取,我可以得到以下输出:

(let (($x35 (<= x 0)))
(not $x35))

(let($x35(不,你不能在z32.x上这么做

Z3.x有一个新的(完全兼容的)SMT2.0前端。 Z3 3.x有几个新功能,例如基于战术和战术的“战略规范语言”。我现在还不“宣传”,因为它正在进行中。基本思想如下所述。这种语言可以用来做你想做的事情。你只需要写:

(declare-const x Int)
(assert (not (or (<= x 0) (<= x 2))))
(apply (and-then simplify propagate-bounds))
(declare-const x Int)
(assert (not (or (<= x 0) (<= x 2))))
(apply (and-then simplify propagate-bounds))
(help-strategy)
(help apply)
(help check-sat-using)