z3 和 νz (z3opt):使用 Python API 的设置逻辑
z3 and νz (z3opt): setting logic using the Python API
我知道我们可以选择像AUFLIRA
这样的逻辑供Z3或νZ(或z3opt,优化 Z3) 的分支写成
(set-logic AUFLIRA)
在输入 .smt2
文件中。
但是如果我们需要使用 Python API 来设置这个逻辑 怎么办?我们可以使用哪些方法来做到这一点?
我检查了一些 documentation,我注意到 z3
模块中有一个 SolverFor(logicName)
可以根据给定的逻辑创建求解器(例如通过调用 SolverFor('AUFLIRA')
), 但我有以下问题:
νZ呢? z3
模块也有像 Solver
对象一样工作的 Optimize
对象,但我没有看到任何 OptimizeFor()
方法来获取 Optimize
对象一个给定的逻辑。
来自 z3
模块的 SolverFor()
方法 从不引发异常 ,即使我指定了 non - 通过调用 SolverFor('abcd')
现有 逻辑。文档说如果 Z3 不支持逻辑,那么它将使用默认设置,但是 我怎么知道 它是否使用我提供的逻辑(例如 AUFLIRA
逻辑)还是不?
谢谢
nuZ 不公开可定制的 tactics/solvers 因为它非常专业地使用求解器来寻找最佳值。
我们绝对应该解决 SolverFor('abc') 不创建任何 warnings/exceptions 的事实。我现在在不同的用户代码示例中看到这个问题,如果没有 warnings/exceptions,用户可能不会意识到他们的设置没有效果。
我知道我们可以选择像AUFLIRA
这样的逻辑供Z3或νZ(或z3opt,优化 Z3) 的分支写成
(set-logic AUFLIRA)
在输入 .smt2
文件中。
但是如果我们需要使用 Python API 来设置这个逻辑 怎么办?我们可以使用哪些方法来做到这一点?
我检查了一些 documentation,我注意到 z3
模块中有一个 SolverFor(logicName)
可以根据给定的逻辑创建求解器(例如通过调用 SolverFor('AUFLIRA')
), 但我有以下问题:
νZ呢?
z3
模块也有像Solver
对象一样工作的Optimize
对象,但我没有看到任何OptimizeFor()
方法来获取Optimize
对象一个给定的逻辑。来自
z3
模块的SolverFor()
方法 从不引发异常 ,即使我指定了 non - 通过调用SolverFor('abcd')
现有 逻辑。文档说如果 Z3 不支持逻辑,那么它将使用默认设置,但是 我怎么知道 它是否使用我提供的逻辑(例如AUFLIRA
逻辑)还是不?
谢谢
nuZ 不公开可定制的 tactics/solvers 因为它非常专业地使用求解器来寻找最佳值。
我们绝对应该解决 SolverFor('abc') 不创建任何 warnings/exceptions 的事实。我现在在不同的用户代码示例中看到这个问题,如果没有 warnings/exceptions,用户可能不会意识到他们的设置没有效果。