显示量化的公式

时间:2011-11-15 14:38:47

标签: z3 quantifiers

我如何显示量词消除的结果?
z3似乎对以下输入感到满意

(set-option :elim-quantifiers true)
(declare-fun y () Real)
(simplify (exists ((x Real)) (>= x y)))

但它返回与输出相同。

由于

1 个答案:

答案 0 :(得分:2)

Z3 3.x有一个新的SMT-LIB 2.0输入格式的前端。 在新的前端,命令simplify不是Z3中可用的所有简化和预处理步骤的“保护伞”。 Z3 2.x中使用的“全部”方法有几个问题。 因此,在Z3 3.x中,我们开始使用细粒度方法,用户可以指定用于求解和/或简化公式的策略/策略。 例如,可以写:

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

这个新的基础设施正在进行中。 例如,Z3 3.2没有用于消除新前端中量词的命令/策略。 消除量词的命令/策略将在Z3 3.3中提供。 在此期间,您可以使用旧的SMT-LIB前端来消除量词。 您必须提供命令行选项-smtc以强制Z3使用旧的前端。 此外,旧的前端不完全符合SMT-LIB 2.0。所以,你必须写:

(set-option ELIM_QUANTIFIERS true)
(declare-fun y () Real)
(simplify (exists ((x Real)) (>= x y)))