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

blu*_*ium 4 smt z3 z3py

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

我有一个公式,它有一个存在量词,我希望 Z3 给我一个新公式,这样这个量词就被消除了。我基本上想做与此相同的事情:

如何使用 Z3 隐藏变量

但使用 Python 接口。我的公式也是线性算术。

谢谢!

添加:在进行量词消除后,我将用另一个“添加”无量词公式。因此,如果我使用 Tactic,是否可以将子目标(即策略的输出)转换为线性算术表达式?

tbo*_*mer 5

您可以为此使用量词消除策略(请参阅 Tactic.apply 文档字符串):

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)))
Run Code Online (Sandbox Code Playgroud)

  • 输出实际上是一个“ApplyResult”对象,你可以使用“as_expr()”。请参阅 API 文档:http://research.microsoft.com/en-us/um/redmond/projects/z3/z3.html#ApplyResult-as_expr,这是您的示例:http://rise4fun.com/Z3Py/BNDc (3认同)