【问题标题】:z3 and νz (z3opt): setting logic using the Python APIz3 和 νz (z3opt):使用 Python API 设置逻辑
【发布时间】:2016-09-28 07:57:51
【问题描述】:

我知道我们可以选择像AUFLIRA这样的逻辑供Z3或νZ(或z3opt,Z3的优化分支)使用

(set-logic AUFLIRA)

在输入.smt2 文件中。

但是如果我们需要使用 Python API 设置这个逻辑呢?我们可以使用哪些方法来做到这一点?

我检查了一些documentation,我注意到z3 模块中有一个SolverFor(logicName) 用于基于给定逻辑创建求解器(例如通过调用SolverFor('AUFLIRA')),但我有以下问题:

  1. νZ 呢z3 模块也有 Optimize 对象,其工作方式类似于 Solver 对象,但我没有看到任何 OptimizeFor() 方法来获取给定逻辑的 Optimize 对象。

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

谢谢

【问题讨论】:

    标签: python z3 z3py


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢 Nikolaj 的明确回答。最后一件事:我尝试在 SMT2 文件中直接使用 nuZ 中的 (set-logic) 命令(即不通过 Python API)并且它可以工作,它还会根据使用的逻辑生成不同的输出,那么你的意思是自定义策略不只在 Python API 中公开?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2022-08-10
    • 2016-05-03
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    相关资源
    最近更新 更多