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