事实上,SMT-LIB 标准是否有理性的(不仅仅是真实的)排序?通过它的网站,它没有。
如果 x 是有理数并且我们有一个约束 x^2 = 2,那么我们应该返回“不可满足”。最接近编码该约束的方法如下:
;;(set-logic QF_NRA) ;; intentionally commented out
(declare-const x Real)
(assert (= (* x x) 2.0))
(check-sat)
(get-model)
z3 返回一个解,因为实数中有一个解(无理数)。我确实了解 z3 有自己的有理库,例如,在使用 Simplex 算法的改编解决 QF_LRA 约束时,它会使用它。在相关说明中,是否有支持输入级别有理数的 SMT 求解器?