Z3py - 解决数组变量约束时生成的函数k!0

时间:2016-10-21 16:49:53

标签: python arrays z3 z3py

在我们的研究活动中,我们正在调查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作为辅助功能,但我们在文档中找不到任何内容 有没有关于此的参考?

1 个答案:

答案 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))
;   )