对于以下公式
(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”生成特定值?
答案 0 :(得分:0)
请注意,@ I被声明两次:
(declare-fun @I () Int)
...
(assert (forall ((@I Int)) ...
因此,它确实存在,存在和普遍。我已经冒昧地将其复制到issue tracker。正如那里所讨论的,这不是一个错误:&#34;在术语命名空间内,绑定变量可以相互遮蔽以及函数符号名称...&#34;是SMT2 standard所说的(备注2,第3.3节)。