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') ), 但我有以下问题:

  1. νZ呢? z3 模块也有像 Solver 对象一样工作的 Optimize 对象,但我没有看到任何 OptimizeFor() 方法来获取 Optimize 对象一个给定的逻辑。

  2. 来自 z3 模块的 SolverFor() 方法 从不引发异常 ,即使我指定了 non - 通过调用 SolverFor('abcd') 现有 逻辑。文档说如果 Z3 不支持逻辑,那么它将使用默认设置,但是 我怎么知道 它是否使用我提供的逻辑(例如 AUFLIRA逻辑)还是不?

谢谢

nuZ 不公开可定制的 tactics/solvers 因为它非常专业地使用求解器来寻找最佳值。

我们绝对应该解决 SolverFor('abc') 不创建任何 warnings/exceptions 的事实。我现在在不同的用户代码示例中看到这个问题,如果没有 warnings/exceptions,用户可能不会意识到他们的设置没有效果。