z3是否支持其输入约束的有理算术?

时间:2015-06-29 16:06:27

标签: z3 smt cvc4

事实上,SMT-LIB标准是否具有理性(不仅仅是真实的)排序?按照website,它没有 如果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返回一个解决方案,因为在reals中有一个解决方案(无理)。我确实理解z3有自己的理性库,例如,当使用Simplex算法的自适应解决QF_LRA约束时,它使用它。在相关的说明中,是否有一个SMT求解器支持输入级别的有理数?

1 个答案:

答案 0 :(得分:1)

我确信可以使用Nikolaj建议的两个整数来定义Rational排序 - 我很有兴趣看到它。使用Real排序可能更容易,并且只要你想要理性,就断言它等于两个Ints的比率。例如:

(set-option :pp.decimal true)
(declare-const x Real)
(declare-const p Int)
(declare-const q Int)
(assert (> q 0))
(assert (= x (/ p q)))
(assert (= x 0.5))
(check-sat)
(get-value (x p q)) 

这很快就会回来了

sat
((x 0.5)
 (p 1)
 (q 2))