【发布时间】:2015-09-08 14:35:19
【问题描述】:
我刚开始使用 Z3 (v4.4.0),我想尝试其中一个教程示例:
(declare-const a Int)
(assert (> (* a a) 3))
(check-sat)
(get-model)
(echo "Z3 will fail in the next example...")
(declare-const b Real)
(declare-const c Real)
(assert (= (+ (* b b b) (* b c)) 3.0))
(check-sat)
如前所述,第二个示例因“未知”而失败,并且通过增加详细级别(至 3)我想我明白为什么:简化过程存在问题,然后策略失败。 为了更好地了解问题(以及更短的输出),我决定删除代码的第一部分以仅测试失败的部分:
(echo "Z3 will fail in the next example...")
(declare-const b Real)
(declare-const c Real)
(assert (= (+ (* b b b) (* b c)) 3.0))
(check-sat)
但神奇的是,现在我得到了“sat”。我不确定 Z3 在非线性算术方面如何选择策略,但问题是否可能来自 Z3 为第一个公式选择了对第二个公式无用的策略?
提前致谢
【问题讨论】: