【发布时间】:2012-05-13 06:48:30
【问题描述】:
非常感谢 Josh 和 Leonardo 回答了上一个问题。
我还有几个问题。
考虑另一个例子。
(exists k) i * k > = 4 and k > 1.
这有一个简单的解决方案 i > 0。(对于 Int 和 Real 情况)
但是,当我尝试关注时,
(declare-const i Int)
(assert (exists ((k Int)) (and (>= (* i k) 4) (> k 1))))
(apply (using-params qe :qe-nonlinear true))
Z3 此处无法消除量词。
但是,它可以消除真实案例。 (当 i 和 k 都是实数时) 整数的量词消除更难吗?
我在我的系统中使用 Z3 C API。我在我的系统中添加了一些带有量词的整数的非线性约束。 Z3 目前检查可满足性,并在系统可满足时给我一个正确的模型。
我知道,在消除量词之后,这些约束被简化为线性约束。
我认为 z3 在检查可满足性之前会自动进行量词消除。但是,由于在上面的案例 1 中它无法做到这一点,我现在认为,它通常会找到一个没有量词消除的模型。我说的对吗?
目前 z3 可以解决我系统中的限制。但它可能在复杂系统上失败。 在这种情况下,在没有 z3 的情况下通过其他方法进行量词消除并在稍后对 z3 添加约束是一个好主意吗?
我可以考虑在我的系统中添加 Real 非线性约束而不是 Integer 非线性约束。在这种情况下,我如何强制 z3 使用 C-API 进行量词消除?
最后,强制 z3 进行量词消除是个好主意吗?或者它通常不用量词消除就能更智能地找到模型?
谢谢。
【问题讨论】:
标签: z3