在对this question的回答中,Leo建议使用量词来定义函数。假设我只需要应用该函数一次,使用量词会影响Z3的性能吗?
与我声明一个没有参数且没有量词的函数(因为我只使用该函数一次)的情况相比如何?
答案 0 :(得分:1)
您可以尝试使用选项smt.macro_finder = true将量化的等式转换为宏。它默认是关闭的,因此最好为仅应用一次的函数定义宏。这也意味着Z3最终使用基于通用量词的求解器。在某些情况下,由宏定义的函数,使用" define-fun"命令,对于纯粹的位向量或纯线性算术的公式很方便。在这些情况下,Z3使用更有效的设置。例如,Z3使用"相关性"传播以避免多余的量词实例化。相关性传播带有自己的开销,这可以通过量化公式来容忍,但对于无量词公式来说不是一个好主意。