提取Z3中数值变量的上限和/或下限

提取Z3中数值变量的上限和/或下限,z3,Z3,Z3中某些数值变量的上下限是否可以提取?假设对数值变量x有一些约束,约束的原因是x必须在区间[x_min,x_max]内。Z3中是否有一种方法可以提取这些边界x_min和x_max,以防解算器在内部计算这些值,而不进行优化最小化和最大化。您可以尝试增加Z3的详细程度,也许您可以在输出中找到边界 但我对此表示怀疑:因为Z3最终是一个SAT解算器,任何试图确定可满足性的数值解算器都可以应用,但确定可满足性并不需要计算合理的数值边界 出于好奇:为什么要避免优化查询?一般来说,不是 变量x的最小/最大最

Z3中某些数值变量的上下限是否可以提取?假设对数值变量x有一些约束,约束的原因是x必须在区间[x_min,x_max]内。Z3中是否有一种方法可以提取这些边界x_min和x_max,以防解算器在内部计算这些值,而不进行优化最小化和最大化。

您可以尝试增加Z3的详细程度,也许您可以在输出中找到边界

但我对此表示怀疑:因为Z3最终是一个SAT解算器,任何试图确定可满足性的数值解算器都可以应用,但确定可满足性并不需要计算合理的数值边界

出于好奇:为什么要避免优化查询?

一般来说,不是

变量x的最小/最大最优值提供了x的可满足域区间的最紧过近似。这需要枚举所有可能的布尔赋值,而不仅仅是一个

线性算法T-Solver中的对偶单纯形算法跟踪所有算术变量的边界。但是,这些边界仅对SAT引擎当前正在构造的可能部分布尔赋值有效。在早期的修剪调用中,无法保证这些边界的重要性:与x wrt的域相比,给定变量x的对应域可能是欠近似、过近似或两者都不是。输入公式

SMT解算器实现的理论组合方法也会影响LA解算器内可用边界的重要性。在这方面,我可以保证,基于模型的理论组合尤其难以处理。使用这种方法,当T-解算器就界面变量的模型值达成一致时,SMT解算器可能不会生成一些界面等式/不等式。然而,当人们想从LA解算器了解变量x的有效域时,这是适得其反的,因为即使在为给定的总布尔赋值找到输入公式的模型之后,它也可以提供一个过度近似的区间


除非原始问题(预处理后)包含形式为x[]K的术语,否则对于所有可能感兴趣的K值,SMT解算器在搜索过程中几乎不可能生成此形式的任何有效T-引理。主要的例外是当x是Int并且LIA解算器使用按需拆分时。因此,布尔堆栈对发现边界也没有多大帮助,即使生成了边界,当它们包含在可满足的总体布尔赋值中时,它们也只能提供x的可行区间的欠近似值

不可靠。即使解算器跟踪边界,您也无法访问它们,除非您插入源代码本身并添加一些挂钩。即使在这种情况下,如果不执行maxsat,也无法依赖这些边界的紧密性。i、 例如,优化。我想与迭代交互使用它,这样它可能会很慢。我期待这样的答案,这意味着我将无法避免优化。完美的解释!应该成为常见问题解答的一部分!