Z3使用Python-API推送/弹出的问题

时间:2013-06-18 11:58:38

标签: z3 z3py

我在Python-API中使用Z3。 我正在设置一组相当大的线性算术约束。

但是,push / pop导致check()无限运行。

如果我不使用任何push / pop,则可以正常使用。但是当我只插入一个

s.push()

s.pop()

s.check()之前的某个地方,s.check()无休止地运行。 仅使用不push的{​​{1}}工作正常。

是否有任何已知问题和解决方法? 我在MacOS 10.7.5上使用Z3 [版本4.3.1 - 64位]。

非常感谢&问候,   克劳斯

1 个答案:

答案 0 :(得分:1)

Z3是求解器的集合。但是,其中只有一个是增量的。 非增量求解器对您的问题更有效。 当您使用s.push()时,Z3“猜测”您想要逐步解决问题,并切换到增量(通用)求解器。

如果我们在文件的开头添加以下命令,Z3将显示几条消息。请注意,当我们使用s.push()时,消息完全不同。

    set_option(verbose=10)

我们可以强制Z3使用特定的求解器。例如,如果我们替换

  s = Solver()

  s = Tactic('qflia').solver()

然后,即使使用s.push(),Z3也将使用有效的求解器。 但是,它将从头开始每个check()命令。我不认为这是你问题中的问题,因为非增量和增量之间的性能差异非常大。