我希望隐藏一些变量并获得简化的结果。
我希望隐藏c1
,c2
和d
,如下所示:
(declare-const v1 Real)
(declare-const v2 Real)
(elim-quantifiers (exists ((c1 Real) (c2 Real)(d Real))
(and (<= c1 10.0) (>= c2 5.0) (>= d 0.0)
(= v1 (+ c1 d))
(= v2 (+ c2 d)))))
然而结果似乎很复杂,事实上,结果应该是v2>=5.0 & v1<= v2+5.0
,我曾经使用(apply ctx-solver-simplify)
代码是
(declare-const v1 Real)
(declare-const v2 Real)
(assert (elim-quantifiers (exists ((c1 Real) (c2 Real)(d Real))
(and (<= c1 10.0) (>= c2 5.0) (>= d 0.0)
(= v1 (+ c1 d))
(= v2 (+ c2 d))))))
(apply ctx-solver-simplify)
然而,当我添加应用....有和错误,脚本无法正常工作。有人可以帮我修理吗?
答案 0 :(得分:1)
您可以使用then策略将量词消除应用于公式,并将上下文简化应用于所有子目标:
(declare-const v1 Real)
(declare-const v2 Real)
(assert (exists ((c1 Real) (c2 Real)(d Real))
(and (<= c1 10.0) (>= c2 5.0) (>= d 0.0)
(= v1 (+ c1 d))
(= v2 (+ c2 d)))))
(apply (then qe ctx-solver-simplify))
结果是v2 >= 5.0 and v1 - v2 <= 5.0
,这与你想要的非常接近。