超时的原因?

时间:2012-02-16 04:56:30

标签: z3

我是使用Z3的新手。但是我想明白,在以下程序中输入到Z3的时间超时的原因是:

(declare-fun ADDR (Int) Int)
(declare-fun STAR (Int Int) Int)
(declare-fun VAR (Int Int) Int)
(declare-const error Int)

(assert (forall ((x Int)) (= x (STAR (ADDR x) 0))) );causes a timeout?
(assert (forall ((x Int)) (>= (ADDR x) 4000)) )
(assert (not (= (VAR  error 0) 1)))
(check-sat)
(get-model)

我遇到的另一个问题是,版本3.2中有没有新版本的forall?我必须在(x Int)周围加上额外的括号,否则它会抛出一个错误。

感谢。

1 个答案:

答案 0 :(得分:1)

这个公式是可以满足的,Z3无法为它建立模型。 如果为量化公式禁用模型查找器,则可以避免超时。

(set-option :auto-config false)
(set-option :mbqi false)

如果你这样做,Z3将返回未知和“候选模型”。 Z3 guide中讨论了此问题。

需要额外的括号,因为Z3 3.x与SMT 2.0 standard完全兼容。