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 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