在Z3超时中实现数组

时间:2016-04-21 02:38:50

标签: arrays timeout z3

我正在尝试在Z3中实现我自己的数组版本,称为“Records”。它们只是由字符串索引的数组。我一直收到下面代码的超时,我无法弄清楚原因。我知道我可以使用普通数组,但我想确定这段代码的问题。

我对每个基本数组选择/存储公理都有一个断言。任何关于什么是错的想法?​​

(declare-sort Record)

(declare-fun storeR (Record String Int) Record)
(declare-fun selectR (Record String) Int)

;selct/store axioms for records
(assert (forall ((r Record)(s String)(i Int)) 
  (= (selectR (storeR r s i) s) i)))
(assert (forall ((r Record)(s String)(q String) (i Int)) 
  (or (= s q) (= (selectR (storeR r s i) q) (selectR r q) ))))
(assert (forall ((r Record)(q Record))
  (=> (forall ((s String)) (= (selectR r s) (selectR q s)))  (= r q))))


 (declare-const r Record)
 (assert (= (selectR r "number") 1))
 (check-sat)

1 个答案:

答案 0 :(得分:0)

使用以下两行启动文件:

   (set-option :smt.auto_config false)
   (set-option :smt.mbqi       false)

然后Z3返回“未知”。使用mbqi,z3尝试(并且失败)找到模型。