如何使用Z3的Python API执行量化消除

时间:2013-07-28 19:15:13

标签: z3 smt z3py

如何使用Z3的Python API执行量词消除?虽然我检查了教程和API,但无法做到。

我有一个具有存在量词的公式,我希望Z3给我一个新的公式,这样就可以消除这个量词。我基本上想要做同样的事情:

How to hide variable with Z3

但使用Python界面。我的公式也是线性算术。

谢谢!

增加: 在进行量词消除后,我将“添加”无量词的公式与另一个。所以,如果我使用Tactic,有没有办法将子目标(这是战术的输出)转换为线性算术中的表达式?

3 个答案:

答案 0 :(得分:4)

你可以使用量词消除策略(参见Tactic.apply docstring):

from z3 import Ints, Tactic, Exists, And
x, t1, t2 = Ints('x t1 t2')
t = Tactic('qe')
print t(Exists(x, And(t1 < x, x < t2)))

答案 1 :(得分:0)

在线使用Z3Py的可能解决方案:

x, t1, t2 = Reals('x t1 t2')
g = Goal()
g.add(Exists(x, And(t1 < x, x < t2)))
t = Tactic('qe')
print t(g)

输出:

[[¬(0 ≤ t1 + -1·t2)]]

在线here

运行此示例

答案 2 :(得分:0)

使用Redlog of reduce:

的可能解决方案

enter image description here