unstable
我在 Z3/Horn (分支)中玩过以下示例
(set-logic HORN)
(declare-fun inv (Int) Bool)
(assert (inv 0))
(assert (forall ((I Int)) (=> (and (<= I 1000) (inv I)) (inv (+ I 1)))))
(assert (forall ((I Int)) (=> (inv I) (<= I 10000))))
(check-sat)
(get-model)
推断不变量 x≤1001 需要 8.5s。这出乎意料的长……
如果我将 1000 替换为 1500,时间会增加到 19 秒,如果我将 1000 替换为 2000,则时间会增加到 34 秒。这似乎表明关于循环边界的二次行为。
我觉得奇怪的是,要花这么多时间来验证一个明显是归纳的断言……