以下Z3代碼超時的在線REPL:這個簡單的Z3證明爲什麼這麼慢?
; I want a function
(declare-fun f (Int) Int)
; I want it to be linear
(assert (forall ((a Int) (b Int)) (
= (+ (f a) (f b)) (f (+ a b))
)))
; I want f(2) == 4
(assert (= (f 2) 4))
; TIMEOUT :(
(check-sat)
所以做這個版本,它正在尋找一個功能上的實數:
(declare-fun f (Real) Real)
(assert (forall ((a Real) (b Real)) (
= (+ (f a) (f b)) (f (+ a b))
)))
(assert (= (f 2) 4))
(check-sat)
它的速度更快,當我給它一個矛盾:
(declare-fun f (Real) Real)
(assert (forall ((a Real) (b Real)) (
= (+ (f a) (f b)) (f (+ a b))
)))
(assert (= (f 2) 4))
(assert (= (f 4) 7))
(check-sat)
我對定理證明者很不瞭解。這裏有什麼特別慢的?證明者是否有很多證明存在f(2)= 4的線性函數的麻煩?