Z3在nlsat_solver.cpp中查找节点

时间:2016-08-15 17:24:55

标签: c++ z3

我试图找出Z3何时将树回溯到旧节点并尝试不同的路径。

我想我已经发现非线性smt问题的回溯发生在哪里。回溯似乎发生在resolve()的{​​{1}}方法中(除非我离开)。当解算器回溯时,它会向上移动树到上一个节点,并为新解决方案尝试不同的路径。

我无法在代码中弄清楚如何识别哪个变量表示求解器在回溯后移动到的节点。我希望能够可视化解决方案跳回到树上,类似于:https://en.wikipedia.org/wiki/Conflict-Driven_Clause_Learning#/media/File:Cdcl14.png

我认为nlsat_solver.cpp方法可能会控制回溯的某些方面,但在发生回溯时,它似乎并不总是在find_new_level_arith_lemma()方法中调用。

有关可视化Z3树及其节点的任何信息都非常有用。

我的C ++技能充其量只是新手;我在Linux上运行Z3。

0 个答案:

没有答案