我正在尝试在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)
答案 0 :(得分:0)
使用以下两行启动文件:
(set-option :smt.auto_config false)
(set-option :smt.mbqi false)
然后Z3返回“未知”。使用mbqi,z3尝试(并且失败)找到模型。