如果" pop"完全破坏了语境中的语境(即学习的语义) 增量约束解决使用"堆栈的目的是什么 模式"
理由:我想如果我只有一个约束(几个 合取)最好只做一个查询 将混合物堆叠在不同的框架中。如果我 有超过1个约束并决定使用增量求解 堆栈,然后我需要(至少一个)查询后弹出一个 约束,这可能会破坏学习的引理"。所以, 使用增量求解(使用堆栈)的优点是什么? 什么"摧毁流行音乐中学习的引理"真的意味着什么?
观察:我的实验表明这是非常有益的,但我 找到指示(见smt formulas,共有500个查询,增量求解在0.01秒完成,而noninc。求解在16秒完成。)与之相矛盾 这个观察结果。
答案 0 :(得分:6)
当存在push / pop命令时,Z3实际上切换到完全不同的解算器,因为它检测到它需要支持增量。增量求解器通常(但不总是)在非增量查询上较慢,但反过来可以利用递增性。另请参见此处:Incremental calls to Z3 on UFBV with and without push calls,Soft/Hard constraints in Z3。
销毁学习的lemmas意味着那些在pop之后无效的lemmas将被删除。它们变得无效,因为它们依赖于最内层范围内的某些约束,因此它们后面的所有引理现在都是无效的。可能有一些例外,但通常Z3会尝试仅销毁无效的引理。
很抱歉,如果上一篇文章(Efficiency of constraint strengthening in SMT solvers)可能出现任何混淆。这篇文章并不完全清楚哪些lemmas被删除,并且已经更新。