Array
Types
linear type Array a forall <p:(_ : a) → Bool → Bool>
Functions
def length (1 arr : Array a) : {n : Int | n = size arr}
def new (_ : Unit) : {arr : Array a | size arr = 0}
def empty (1 arr : Array a) : {b : Bool | b = size arr = 0}
def copy (1 arr : Array ({_r77 : a | p _r77})) : {pr : ArrayPair ({_r78 : a | p _r78}) | pair_size pr = size arr}
def fst_array (pr : ArrayPair ({_r79 : a | p _r79})) : {r : Array ({_r80 : a | p _r80}) | size r = pair_size pr}
def snd_array (pr : ArrayPair ({_r81 : a | p _r81})) : {r : Array ({_r82 : a | p _r82}) | size r = pair_size pr}
def get_at (1 arr : Array ({_r83 : a | p _r83})) (i : Int | i ≥ 0 && i < size arr) : {g : ArrayGet ({_r84 : a | p _r84}) | got_size g = size arr}
def got_value (g : ArrayGet ({_r85 : a | p _r85})) : {_r86 : a | p _r86}
def got_array (g : ArrayGet ({_r87 : a | p _r87})) : {r : Array ({_r88 : a | p _r88}) | size r = got_size g}
def len_of (1 arr : Array ({_r89 : a | p _r89})) : {l : ArrayLen ({_r90 : a | p _r90}) | held_size l = size arr}
def len_value (l : ArrayLen ({_r91 : a | p _r91})) : {n : Int | n = held_size l}
def len_array (l : ArrayLen ({_r92 : a | p _r92})) : {r : Array ({_r93 : a | p _r93}) | size r = held_size l}
def append (1 arr : Array a) (1 x : a | p x) : {r : Array a | size r = size arr + 1}
def cons (1 arr : Array a) (1 x : a | p x) : {r : Array a | size r = size arr + 1}
def get (1 arr : Array a) (i : Int | i ≥ 0 && i < size arr) : {v : a | p v}
def set (1 arr : Array a) (i : Int | i ≥ 0 && i < size arr) (1 x : a | p x) : {r : Array a | size r = size arr}
def head (1 arr : Array a | size arr > 0) : {v : a | p v}
def reversed (1 arr : Array a) : {r : Array a | size r = size arr}
def map (f : (x : a | p x) → {w : b | q w}) (1 arr : Array a) : {r : Array b | size r = size arr}
def filter (f : (x : a | p x) → Bool) (1 arr : Array a) : {r : Array a | size r ≤ size arr}
def reduce (f : (x : a | p x) → (acc : b) → b) (z : b) (1 arr : Array a) : b
def sum (1 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
def got_size : (g : ArrayGet a) → Int
def held_size : (l : ArrayLen a) → Int
def pair_size : (pr : ArrayPair a) → Int