我有一些简单的约束,涉及 z3 中产生的实数乘法unknown
。问题似乎是它们被包装在数据类型中,因为未包装的版本会产生sat
.
这是一个简化的案例:
(declare-datatypes () ((T (NUM (n Real)))))
(declare-const a T)
(declare-const b T)
(declare-const c T)
(assert (is-NUM a))
(assert (is-NUM b))
(assert (is-NUM c))
(assert (= c (NUM (* (n a) (n b)))))
(check-sat)
;unknown
并且没有数据类型:
(declare-const a Real)
(declare-const b Real)
(declare-const c Real)
(assert (= c (* a b)))
(check-sat)
;sat
我使用的是 z3 3.2,但这也可以在 Web 界面中重现。