Z3使用什么方法来求解无量词位向量公式(QF_BV)?

Z3使用什么方法来求解无量词位向量公式(QF_BV)?,z3,Z3,特别是,它是否使用DPLL(T)?它是否使用低于/高于近似值?它在单词级处理线性算术吗?非线性算术呢 我发现在论文中只肤浅地提到了“类似于MathSAT/Boolector中的简化” 非常有趣的是,是什么方法帮助Z3在smtcomp的QF_BV部分获得第一名。DPLL(T)根本不用于解决QF_BV问题。 关于“有效解决量化位向量公式”一文的评论是关于Z3 2.x。 QF_BV是关于问题编码的。预处理有很大的不同。 我从头开始为Z3.0构建了一个新的预处理堆栈和SAT解算器。 新的预处理器比Z32

特别是,它是否使用DPLL(T)?它是否使用低于/高于近似值?它在单词级处理线性算术吗?非线性算术呢

我发现在论文中只肤浅地提到了“类似于MathSAT/Boolector中的简化”

非常有趣的是,是什么方法帮助Z3在smtcomp的QF_BV部分获得第一名。

DPLL(T)根本不用于解决QF_BV问题。 关于“有效解决量化位向量公式”一文的评论是关于Z3 2.x。 QF_BV是关于问题编码的。预处理有很大的不同。 我从头开始为Z3.0构建了一个新的预处理堆栈和SAT解算器。 新的预处理器比Z32.x中使用的预处理器快得多,并且执行更积极的简化。 没有魔法,也没有奇特的技术。在预处理步骤之后,Z3位爆炸所有内容并调用新的SAT解算器。 Z3不使用位向量的欠/过近似,或字级算术推理,或对非线性运算符的特殊支持。 顺便说一句,很少有解算器考虑到的一点是,某些简化可能会在局部减小公式的大小,但会在全局范围内增大公式的大小,因为它们会破坏共享。
Z3还使用了一个预处理步骤,试图增加线性和非线性位向量算法中的共享量。

谢谢!另一个问题:由于您的BV解算器非常积极地使用预处理,它可能不是增量的,对吗?Z3 API中没有新的QF_BV解算器,SMT2前端也没有增量解算器。这将在将来的版本中更改。您是对的,当使用push/pop命令时,某些预处理步骤无法使用。因此,即使我在新的解算器中实现了对推/弹出的支持,它们也将不可用。