【发布时间】:2019-08-19 06:28:24
【问题描述】:
为什么z3无法SAT检查以下内容?
(declare-fun f (Int) Int)
(assert (forall ((a Int) (b Int)) (= (+ (f a) (f b) ) (f (+ a b)))))
(assert (= (f 1) 1))
(check-sat)
(get-model)
我希望得到类似于f(x) = x 的结果,但是 z3 似乎消耗了越来越多的内存,并且从未找到解决方案。
这是未解释的函数不适合的东西吗?
我尝试使用 reals 并添加一个我期望与 f 相同的附加函数,如下所示:
(declare-fun f (Real) Real)
(declare-fun g (Real) Real)
(assert (forall ((a Real)) (= (g a) a)))
(assert (forall ((a Real) (b Real)) (= (+ (f a) (f b) ) (f (+ a b)))))
(assert (= (f 1) 1))
(check-sat)
(get-model)
【问题讨论】: