z3 中实数通用量化的无界无限与有界无限域
Unbounded Infinite vs Bounded Infinite Domain for Universal Quantification over Reals in z3
这是一个有点理论性的问题。我想知道在对实数求解通用量化公式时,z3 的性能是否存在差异,其中量化是在有界无限域与无界无限域上进行的。我正在做一些事情,我发现有界无限域在性能方面工作得更好,并正在寻找一个简单的理论解释。我无法在文献中找到任何相关内容,因此将不胜感激。
大多数 SMT 求解器的内部工作原理是 black-box,其中有许多 heuristics/algorithms 在起作用。然而,对于算术,有 well-known 技术来处理有趣的片段。我建议通读 https://theory.stanford.edu/~nikolaj/programmingz3.html#sec-arithmetic,其中列出了他们对每个片段使用的算法。
量化是一个完全不同的问题。通常的方法是应用量词消除(https://en.wikipedia.org/wiki/Quantifier_elimination). z3 will perform quantifier elimination for linear-real arithmetic, but not for non-linear problems. See Does Z3 v4.3+ support quantifier elimination for NON-linear arithmetic,因为后者是一个更困难的问题,默认情况下不打开。
您设置边界的特殊情况是摆脱量词的一种简单方法,因此 z3 可能表现更好也就不足为奇了。但是,如果不研究内部结构就不可能说是否有自定义算法可以利用它。你最好的选择可能是在 z3 讨论论坛上提问,我看到你已经这样做了:https://github.com/Z3Prover/z3/discussions/5949
这是一个有点理论性的问题。我想知道在对实数求解通用量化公式时,z3 的性能是否存在差异,其中量化是在有界无限域与无界无限域上进行的。我正在做一些事情,我发现有界无限域在性能方面工作得更好,并正在寻找一个简单的理论解释。我无法在文献中找到任何相关内容,因此将不胜感激。
大多数 SMT 求解器的内部工作原理是 black-box,其中有许多 heuristics/algorithms 在起作用。然而,对于算术,有 well-known 技术来处理有趣的片段。我建议通读 https://theory.stanford.edu/~nikolaj/programmingz3.html#sec-arithmetic,其中列出了他们对每个片段使用的算法。
量化是一个完全不同的问题。通常的方法是应用量词消除(https://en.wikipedia.org/wiki/Quantifier_elimination). z3 will perform quantifier elimination for linear-real arithmetic, but not for non-linear problems. See Does Z3 v4.3+ support quantifier elimination for NON-linear arithmetic,因为后者是一个更困难的问题,默认情况下不打开。
您设置边界的特殊情况是摆脱量词的一种简单方法,因此 z3 可能表现更好也就不足为奇了。但是,如果不研究内部结构就不可能说是否有自定义算法可以利用它。你最好的选择可能是在 z3 讨论论坛上提问,我看到你已经这样做了:https://github.com/Z3Prover/z3/discussions/5949