我正在使用Z3的python api来进行某种增量求解。我使用solver.push()
命令迭代地将约束推送到求解器,同时检查每个步骤的不可满足性。我想了解Z3是否会使用先前约束的学习引理或者在使用新添加的约束求解时先前获得的满意解。我从不使用solver.pop()
命令。我在哪里可以获得有关如何使用先前迭代中完成的工作的更多详细信息?
答案 0 :(得分:6)
Z3有多个解算器,但其中只有一个真正支持以前调用的增量求解和重用工作。默认情况下,只要执行solver.push()
,Z3就会自动切换到增量解算器。该解算器也会重复使用以前学过的子句。执行solver.pop()
时删除学习的子句。 Z3还支持另一种不基于push
和pop
的增量求解机制。以下是一些相关的帖子: