如何使用Z3的Python API执行量词消除?虽然我检查了教程和API,但无法做到。
我有一个具有存在量词的公式,我希望Z3给我一个新的公式,这样就可以消除这个量词。我基本上想要做同样的事情:
但使用Python界面。我的公式也是线性算术。
谢谢!
增加: 在进行量词消除后,我将“添加”无量词的公式与另一个。所以,如果我使用Tactic,有没有办法将子目标(这是战术的输出)转换为线性算术中的表达式?
答案 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:
的可能解决方案