module Z3Array:sig..end
Functions to manipulate Array expressions
val mk_sort : context -> Sort.sort -> Sort.sort -> Sort.sortCreate a new array sort.
val is_store : Expr.expr -> boolIndicates whether the term is an array store. It satisfies select(store(a,i,v),j) = if i = j then v else select(a,j). Array store takes at least 3 arguments.
val is_select : Expr.expr -> boolIndicates whether the term is an array select.
val is_constant_array : Expr.expr -> boolIndicates whether the term is a constant array. For example, select(const(v),i) = v holds for every v and i. The function is unary.
val is_default_array : Expr.expr -> boolIndicates whether the term is a default array. For example default(const(v)) = v. The function is unary.
val is_array_map : Expr.expr -> boolIndicates whether the term is an array map.
It satisfies mapf(a1,..,a_n)i = f(a1i,...,a_ni) for every i.
val is_as_array : Expr.expr -> boolIndicates whether the term is an as-array term. An as-array term is n array value that behaves as the function graph of the function passed as parameter.
val is_array : Expr.expr -> boolIndicates whether the term is of an array sort.
val get_domain : Sort.sort -> Sort.sortThe domain of the array sort.
val get_range : Sort.sort -> Sort.sortThe range of the array sort.
val mk_const : context ->
Symbol.symbol -> Sort.sort -> Sort.sort -> Expr.exprCreate an array constant.
val mk_const_s : context -> string -> Sort.sort -> Sort.sort -> Expr.exprCreate an array constant.
val mk_select : context -> Expr.expr -> Expr.expr -> Expr.exprArray read.
The argument a is the array and i is the index
of the array that gets read.
The node a must have an array sort [domain -> range],
and i must have the sort domain.
The sort of the result is range.
Z3Array.mk_sort
Z3Array.mk_store
val mk_store : context -> Expr.expr -> Expr.expr -> Expr.expr -> Expr.exprArray update.
The node a must have an array sort [domain -> range],
i must have sort domain,
v must have sort range. The sort of the result is [domain -> range].
The semantics of this function is given by the theory of arrays described in the SMT-LIB
standard. See http://smtlib.org for more details.
The result of this function is an array that is equal to a
(with respect to select)
on all indices except for i, where it maps to v
(and the select of a with
respect to i may be a different value).
Z3Array.mk_sort
Z3Array.mk_select
val mk_const_array : context -> Sort.sort -> Expr.expr -> Expr.exprCreate a constant array.
The resulting term is an array, such that a selecton an arbitrary index
produces the value v.
Z3Array.mk_sort
Z3Array.mk_select
val mk_map : context -> FuncDecl.func_decl -> Expr.expr list -> Expr.exprMaps f on the argument arrays.
Each element of args must be of an array sort [domain_i -> range_i].
The function declaration f must have type range_1 .. range_n -> range.
v must have sort range. The sort of the result is [domain_i -> range].
Z3Array.mk_sort
Z3Array.mk_select
Z3Array.mk_store
val mk_term_array : context -> Expr.expr -> Expr.exprAccess the array default value.
Produces the default range value, for arrays that can be represented as finite maps with a default range value.
val mk_array_ext : context -> Expr.expr -> Expr.expr -> Expr.exprCreate array extensionality index given two arrays with the same sort.
The meaning is given by the axiom: (=> (= (select A (array-ext A B)) (select B (array-ext A B))) (= A B))