为什么MkSimpleSolver不等同于带有Z3的MkSimpleSolver(“smt”)?

为什么MkSimpleSolver不等同于带有Z3的MkSimpleSolver(“smt”)?,z3,Z3,我正在试验Z3战术。我注意到解算器返回了 context.MkSimpleSolver() 具有与解算器不同的性能配置文件 context.MkSolver(context.MkTactic("smt")) 我知道“smt”策略应该执行Z3拥有的最通用的算法。因此,这两个解算器应该具有相同的输出。鉴于此,为什么它们有不同的性能配置文件 我正在测试一个在位向量上量化的公式。量词体使用整数和位向量。简单解算器立即返回sat。另一个解算器花费的时间比我愿意等待的时间长 (如果有帮助的话,这里有一点

我正在试验Z3战术。我注意到解算器返回了

context.MkSimpleSolver()
具有与解算器不同的性能配置文件

context.MkSolver(context.MkTactic("smt"))
我知道“smt”策略应该执行Z3拥有的最通用的算法。因此,这两个解算器应该具有相同的输出。鉴于此,为什么它们有不同的性能配置文件

我正在测试一个在位向量上量化的公式。量词体使用整数和位向量。简单解算器立即返回sat。另一个解算器花费的时间比我愿意等待的时间长


(如果有帮助的话,这里有一点背景:我正试图让Z3位blast所有整数项到位向量,希望这能加快速度。所有涉及的整数都被限制为[0,3]。我正试图让
位blast
策略“接受”。

我可以理解为什么这个问题有意义:从语义上来说,你可能期望得到相同的结果。但是,这两种方法的代码路径,特别是公式预处理的方式是不同的,因此我可以想象它们会产生不同的性能配置文件。@NikolajBjorner有什么办法可以让我找到,MkSimpleSolver产生了什么,以便我可以复制它(并做一些小的调整)?可以用MkSolver复制MkSimpleSolver吗?