Z3的Java API错误地处理量词变量

时间:2015-11-03 19:13:45

标签: z3

对于以下公式      (declare-fun i () Int) (declare-fun @I () Int) (declare-fun r2 () (Array Int Int)) (assert (= i 4)) (assert (forall ((@I Int)) (! (=> (and (>= @I 0) (< @I i)) (= (select r2 @I) 0)) :weight 10 :skolemid test :qid test))) (check-sat) (get-model)

Java API返回:

SATISFIABLE (define-fun i () Int 4) (define-fun @I () Int (- 1))

为什么它为量词变量“@I”生成特定值?

1 个答案:

答案 0 :(得分:0)

请注意,@ I被声明两次:

(declare-fun @I () Int)
...
(assert (forall ((@I Int)) ...

因此,它确实存在,存在和普遍。我已经冒昧地将其复制到issue tracker。正如那里所讨论的,这不是一个错误:&#34;在术语命名空间内,绑定变量可以相互遮蔽以及函数符号名称...&#34;是SMT2 standard所说的(备注2,第3.3节)。