是否应该施加额外的约束来缩短 SMT 求解器的求解时间?

Should imposing additional constraints improve solving time for SMT solvers?

我有一个 SMT 应用程序(建立在 Haskell SBV 库上),它使用 Z3 在实数逻辑中针对单个 s 变量求解一些复杂方程。就我而言,找到解决方案大约需要 30 秒。

为了加快速度,我添加了额外的约束 s < 40000,因为我对解决方案有一些估计。我在想这样的约束会缩小搜索 space 并使求解器 return 更快地得到结果。然而,这只会让它变慢(实际上它甚至没有在 10 分钟内完成)。

问题是:是否可以假设附加约束总是 会减慢down/speeds 求解过程,或者没有通用规则并且总是取决于具体情况?

我担心即使我的 30 秒算法也可能包含一些不一定需要的额外约束,但只会减慢过程。

我认为您不能对此做出任何一般性假设。它可能会或可能不会影响解决时间,假设 sat/unsat 状态没有改变。

等式通常有帮助(因为它们可以自由传播),但对于其他任何事情,这是任何人的猜测。此外,对于相同的加法,不同的求解器可能会表现出不同的行为。

考虑这一点的一种方法是,底层 DPLL(T) 算法本质上是一种非常智能的美化搜索算法。它不断生成 "learned lemmas",希望它能找到与先前已知事实的矛盾。您添加的新 "constraint" 可能会导致它生成大量正确但不相关的引理,使它陷入困境而没有任何有用的结果。 (量化公式通常是这样的:您可以用一百万种不同的方式实例化它们;但除非您找到 "correct" 实例化,否则它们所做的只是污染您的搜索 space。)

至少这是我的经历!