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

Z3使用Python API推送/弹出的问题,z3,z3py,Z3,Z3py,我将Z3与Python API一起使用。 我正在设置一组相当大的线性算术约束 但是,push/pop会导致check()无限运行 如果我不使用任何push/pop,一切都可以正常工作。但是当我插入一个 s.push() s.pop() 在s.check()之前的某个地方,然后s.check()会无休止地运行。 仅在不使用pop的情况下使用push可以正常工作 是否存在任何已知的问题和解决方法? 我在MacOS 10.7.5上使用的是Z3[版本4.3.1-64位] 非常感谢和问候, 克劳斯是一

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

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

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

s.push()

s.pop()
s.check()
之前的某个地方,然后
s.check()
会无休止地运行。 仅在不使用
pop
的情况下使用
push
可以正常工作

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

非常感谢和问候,
克劳斯是一个解算器的集合。但是,其中只有一个是增量的。 非增量解算器对您的问题更有效。 当您使用
s.push()
时,Z3“猜测”您希望以增量方式解决问题,并切换到增量(通用)解算器

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

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

  s = Solver()

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

你能提供一个链接到一个rise4fun示例,显示所描述的行为吗?亲爱的Malte,你可以在这里找到一个示例:使用给定的NUM_a和NUM_B值,当我不使用任何push()和Pop()时,它解决了问题,但当我在第23行添加push()时,它会超时。当NUM_B=10而不是NUM_B=3时,这种效果要高得多。然后Z3py在适当的时间内解决了问题,但需要更长的响应时间。添加push()时,将执行无止境操作。我不明白为什么运行时会因为push()&pop()而如此不同!?谢谢,Klaus PS。也可以用python脚本定义超时吗?亲爱的Leonardo,谢谢!qflia策略对我很有效。然而,在我的代码中有一个's.reset()',这将强制执行一个'Segmentation fault:11'resp。“c.py(39):错误:异常:访问冲突读取0x00000008”。我删除了“s.reset()”,现在它可以工作了。qflia是否不允许重置(),或者这是一个错误?还有一个问题;)是否有任何rise4fun示例可以让我了解如何在从python API调用s.check()时设置超时?感谢
Segfault
已在
unstable
(正在工作)分支中修复。该修复程序也可在夜间版本()中使用。
  s = Solver()
  s = Tactic('qflia').solver()