我如何显示量词消除的结果?
z3似乎对以下输入感到满意
(set-option :elim-quantifiers true)
(declare-fun y () Real)
(simplify (exists ((x Real)) (>= x y)))
但它返回与输出相同。
由于
答案 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)))