在我们的研究活动中,我们正在调查z3py中的数组(Z3 v4.4.2的Python API)。
我们想知道为什么z3提供了比问题更多的数组函数。例如,这里k!0弹出:
>>> A = Array('A', IntSort(), IntSort())
>>> solve(A[0] == 0)
[A = [0 -> 0, else -> 0], k!0 = [0 -> 0, else -> 0]]
似乎z3使用k!0作为辅助功能,但我们在文档中找不到任何内容 有没有关于此的参考?
答案 0 :(得分:2)
Z3从k!0
(数组索引)创建一个函数Int
到值并将其转换为数组。虽然它没有在Python绑定中打印,但可以从Z3 REPL中看到。
数组模型小节http://rise4fun.com/Z3/tutorialcontent/guide#h26中对此进行了简要介绍。
(declare-const a1 (Array Int Int))
(assert (= (select a1 0) 0))
(check-sat)
;=> sat
(get-model)
;=> (model
; (define-fun a1 () (Array Int Int)
; (_ as-array k!0))
; (define-fun k!0 ((x!0 Int)) Int
; (ite (= x!0 0) 0
; 0))
; )