Array
Types
type Array a forall <p:(_ : a) → Bool → Bool>
Functions
def length (arr: Array a) : {n : Int | n = size arr}
def new : {arr : Array a | size arr = 0}
def empty (arr: Array a) : {b : Bool | b = (size arr = 0)}
def copy (arr: Array a) : ArrayPair a
def fst_array (p: ArrayPair a) : Array a
def snd_array (p: ArrayPair a) : Array a
def append (arr: Array a) (x: {v : a | p v}) : {r : Array a | size r = size arr + 1}
def cons (arr: Array a) (x: {v : a | p v}) : {r : Array a | size r = size arr + 1}
def get (arr: Array a) (i: {n : Int | n ≥ 0 && n < size arr}) : {v : a | p v}
def set (arr: Array a) (i: {n : Int | n ≥ 0 && n < size arr}) (x: {v : a | p v}) : {r : Array a | size r = size arr}
def head (arr: {arr : Array a | size arr > 0}) : {v : a | p v}
def reversed (arr: Array a) : {r : Array a | size r = size arr}
def map (f: (x : {v : a | p v}) → {w : b | q w}) (arr: Array a) : {r : Array b | size r = size arr}
def filter (f: (x : {v : a | p v}) → Bool) (arr: Array a) : {r : Array a | size r ≤ size arr}
def reduce (f: (x : {v : a | p v}) → (acc : b) → b) (z: b) (arr: Array a) : b
def sum (arr: Array Int) : Int
Uninterpreted
Functions declared as def f ... = uninterpreted: only their signature is known to the verifier; they have no body.
def size : (arr : Array a) → Int