z3和νz(z3opt):使用Python API设置逻辑

时间:2016-09-28 07:57:52

标签: python z3 z3py

我知道我们可以选择Z3或νZ(或z3opt,Z3的 优化 分支)使用的类似AUFLIRA的逻辑写

(set-logic AUFLIRA)
输入.smt2文件中的

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

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

  1. νZ怎么样? z3模块还有Optimize对象,其作用类似于Solver对象,但我没有看到任何OptimizeFor()方法来获取Optimize对象给定的逻辑。

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

  3. 谢谢

1 个答案:

答案 0 :(得分:0)

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

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