施加其他约束条件是否可以改善SMT求解器的求解时间?

时间:2019-02-13 19:45:22

标签: z3 smt sbv

我有一个SMT应用程序(基于Haskell SBV库构建),它使用Z3解决了针对实数逻辑中的单个s变量的一些复杂方程式。在我的情况下,找到解决方案大约需要30秒。

为了加快速度,我增加了一些约束s < 40000,因为我对解决方案有一些估计。我以为这样的约束将缩小搜索空间并使求解器更快地返回结果。但是,这只会使其变慢(实际上,它甚至没有在10分钟内完成)。

问题是:是否可以假设附加约束总是(总是)减慢/加快解决方案的过程,或者没有通用规则,并且总是取决于情况?

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

1 个答案:

答案 0 :(得分:3)

我认为您无法对此做出任何一般性假设。假设sat / unsat的状态不变,可能会或不会影响求解时间。

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

对此进行考虑的一种方法是,底层DPLL(T)算法本质上是一种非常聪明的美化搜索算法。它一直在产生“学习的引理”,希望它会发现与先前已知事实的矛盾。您添加的新“约束”可能会导致它生成大量正确但无关紧要的引理,从而使其陷入深渊,而没有任何有用的结果。 (量化公式通常是这样的:您可以用一百万种不同的方式实例化它们;但是除非找到“正确的”实例化,否则它们所做的一切最终都会污染您的搜索空间。)

至少这是我的经验!