特别是,它是否使用DPLL(T)?它是否使用低于/高于近似值?它是否在单词级别处理线性算术?那么非线性算术呢?
我在论文Efficiently Solving Quantified Bit-Vector Formulas中只发表了一篇关于“类似于MathSAT / Boolector中的简化”的表面提及。
非常有趣的是,哪些方法帮助Z3在smtcomp的QF_BV部分获得第一名。
答案 0 :(得分:6)
完全不使用DPLL(T)来解决QF_BV问题。 关于“有效地解决量化比特公式”的论文的评论是关于Z3 2.x. QF_BV是关于问题编码的。预处理有很大的不同。 我为Z3 3.0从零开始构建了一个新的预处理堆栈和SAT求解器。 新的预处理器比Z3 2.x中使用的预处理器快得多,并且执行更积极的简化。 没有神奇或奇特的技巧。在预处理步骤之后,Z3对所有内容进行bit-blast并调用新的SAT求解器。 Z3不使用欠/近似的位向量,或字级算术推理,或对非线性算子的特殊支持。 顺便说一下,很少有解决方案考虑的一点是,一些简化可能会减少本地公式的大小,但会全局增加,因为它们会破坏共享。 Z3还使用预处理步骤,试图增加线性和非线性位向量算法中的共享量。