NDArray
Imports
import Array;
import ReadOnly;
Types
linear type NDArray a rank
Functions
def full1 (n : Int | n ≥ 0 && n ≤ 2147483647) (value : a) : {r : (NDArray a Rank1) | r.ndim = 1 && r.elements = n && r.dimension_size 0 = n}
def full2 (rows : Int | rows ≥ 0 && rows ≤ 2147483647) (cols : Int | cols ≥ 0 && cols ≤ 2147483647 && rows * cols ≤ 2147483647) (value : a) : {
r : (NDArray a Rank2) | r.ndim = 2 && r.elements = rows * cols && r.dimension_size 0 = rows && r.dimension_size 1 = cols
}
def full3 (depth : Int | depth ≥ 0 && depth ≤ 2147483647) (rows : Int | rows ≥ 0 && rows ≤ 2147483647) (cols : Int | cols ≥ 0 && cols ≤ 2147483647 && depth * rows * cols ≤ 2147483647) (value : a) : {
r : (NDArray a Rank3) | r.ndim = 3
&&
r.elements = depth * rows * cols && r.dimension_size 0 = depth && r.dimension_size 1 = rows && r.dimension_size 2 = cols
}
def from_array (1 arr : (Array a)) : {r : (NDArray a Rank1) | r.ndim = 1 && r.elements = arr.size && r.dimension_size 0 = arr.size}
def to_array (1 arr : (NDArray a Rank1)) : {r : (Array a) | r.size = arr.elements}
def to_1d (1 arr : (NDArray a rank)) : {r : (NDArray a Rank1) | r.ndim = 1 && r.elements = arr.elements && r.dimension_size 0 = arr.elements}
def from_1d2 (1 arr : (NDArray a Rank1)) (rows : Int | rows ≥ 0 && rows ≤ 2147483647) (cols : Int | cols ≥ 0 && cols ≤ 2147483647 && rows * cols = arr.elements) : {
r : (NDArray a Rank2) | r.ndim = 2
&&
r.elements = arr.elements && r.dimension_size 0 = rows && r.dimension_size 1 = cols
}
def from_1d3 (1 arr : (NDArray a Rank1)) (depth : Int | depth ≥ 0 && depth ≤ 2147483647) (rows : Int | rows ≥ 0 && rows ≤ 2147483647) (cols : Int | cols ≥ 0 && cols ≤ 2147483647 && depth * rows * cols = arr.elements) : {
r : (NDArray a Rank3) | r.ndim = 3
&&
r.elements = arr.elements && r.dimension_size 0 = depth && r.dimension_size 1 = rows && r.dimension_size 2 = cols
}
def dimension (borrow arr : (NDArray a rank)) (axis : Int | axis ≥ 0 && axis < arr.ndim) : {n : Int | n = arr.dimension_size axis && n ≥ 0}
def count (borrow arr : (NDArray a rank)) : {n : Int | n = arr.elements && n ≥ 0}
def get1 (_inst4201 : (Copy a)) (borrow arr : (NDArray a Rank1)) (i : Int | i ≥ 0 && i < arr.dimension_size 0) : a
def take1 (1 arr : (NDArray a Rank1)) (i : Int | i ≥ 0 && i < arr.dimension_size 0) : a
def get2 (_inst4202 : (Copy a)) (borrow arr : (NDArray a Rank2)) (row : Int | row ≥ 0 && row < arr.dimension_size 0) (col : Int | col ≥ 0 && col < arr.dimension_size 1) : a
def take2 (1 arr : (NDArray a Rank2)) (row : Int | row ≥ 0 && row < arr.dimension_size 0) (col : Int | col ≥ 0 && col < arr.dimension_size 1) : a
def get3 (_inst4203 : (Copy a)) (borrow arr : (NDArray a Rank3)) (depth : Int | depth ≥ 0 && depth < arr.dimension_size 0) (row : Int | row ≥ 0 && row < arr.dimension_size 1) (col : Int | col ≥ 0 && col < arr.dimension_size 2) : a
def take3 (1 arr : (NDArray a Rank3)) (depth : Int | depth ≥ 0 && depth < arr.dimension_size 0) (row : Int | row ≥ 0 && row < arr.dimension_size 1) (col : Int | col ≥ 0 && col < arr.dimension_size 2) : a
def set1 (1 arr : (NDArray a Rank1)) (i : Int | i ≥ 0 && i < arr.dimension_size 0) (value : a) : {r : (NDArray a Rank1) | r.ndim = arr.ndim && r.elements = arr.elements && r.dimension_size 0 = arr.dimension_size 0}
def set2 (1 arr : (NDArray a Rank2)) (row : Int | row ≥ 0 && row < arr.dimension_size 0) (col : Int | col ≥ 0 && col < arr.dimension_size 1) (value : a) : {
r : (NDArray a Rank2) | r.ndim = arr.ndim
&&
r.elements = arr.elements && r.dimension_size 0 = arr.dimension_size 0 && r.dimension_size 1 = arr.dimension_size 1
}
def set3 (1 arr : (NDArray a Rank3)) (depth : Int | depth ≥ 0 && depth < arr.dimension_size 0) (row : Int | row ≥ 0 && row < arr.dimension_size 1) (col : Int | col ≥ 0 && col < arr.dimension_size 2) (value : a) : {
r : (NDArray a Rank3) | r.ndim = arr.ndim
&&
r.elements = arr.elements
&&
r.dimension_size 0 = arr.dimension_size 0
&&
r.dimension_size 1 = arr.dimension_size 1 && r.dimension_size 2 = arr.dimension_size 2
}
def fill (1 arr : (NDArray a rank)) (value : a) : {
r : (NDArray a rank) | r.ndim = arr.ndim
&&
r.elements = arr.elements
&&
r.dimension_size 0 = arr.dimension_size 0
&&
r.dimension_size 1 = arr.dimension_size 1 && r.dimension_size 2 = arr.dimension_size 2
}
def map_rows (_inst4204 : (Copy a)) (1 arr : (NDArray a Rank2)) (
f : (i : Int | i ≥ 0 && i < arr.dimension_size 0) →
(
1 row : (NDArray a Rank1) | r.ndim = 1 && r.elements = arr.dimension_size 1 && r.dimension_size 0 = arr.dimension_size 1
) →
{r : (NDArray a Rank1) | r.dimension_size 0 = arr.dimension_size 1}
) : {
r : (NDArray a Rank2) | r.ndim = arr.ndim
&&
r.elements = arr.elements && r.dimension_size 0 = arr.dimension_size 0 && r.dimension_size 1 = arr.dimension_size 1
}
def discard (1 arr : (NDArray a rank)) : Unit
def reduce (_inst4205 : (Copy a)) (borrow arr : (NDArray a rank)) (f : (acc : a) → (x : a) → a) (z : a) : a
def filter (_inst4206 : (Copy a)) (1 arr : (NDArray a rank)) (f : (x : a) → Bool) : {r : (NDArray a Rank1) | r.elements ≤ arr.elements && r.dimension_size 0 = r.elements}
def map (_inst4207 : (Copy a)) (1 arr : (NDArray a rank)) (f : (x : a) → b) : {
r : (NDArray b rank) | r.ndim = arr.ndim
&&
r.elements = arr.elements
&&
r.dimension_size 0 = arr.dimension_size 0
&&
r.dimension_size 1 = arr.dimension_size 1 && r.dimension_size 2 = arr.dimension_size 2
}
def zipWith (_inst4208 : (Copy a)) (_inst4209 : (Copy b)) (1 arr : (NDArray a rank)) (
1 other : (NDArray b rank) | r.dimension_size 0 = arr.dimension_size 0
&&
(arr.ndim < 2 || r.dimension_size 1 = arr.dimension_size 1)
&&
(arr.ndim < 3 || r.dimension_size 2 = arr.dimension_size 2)
) (f : (x : a) → (y : b) → c) : {
r : (NDArray c rank) | r.ndim = arr.ndim
&&
r.elements = arr.elements
&&
r.dimension_size 0 = arr.dimension_size 0
&&
r.dimension_size 1 = arr.dimension_size 1 && r.dimension_size 2 = arr.dimension_size 2
}
def reduce_axis (_inst4210 : (Copy a)) (1 arr : (NDArray a rank)) (axis : Int | axis ≥ 0 && axis < arr.ndim) (f : (acc : a) → (x : a) → a) (z : a) : {r : (NDArray a rank) | r.ndim = arr.ndim && r.dimension_size axis = 1}
def scan (_inst4211 : (Copy a)) (1 arr : (NDArray a rank)) (f : (acc : a) → (x : a) → a) (z : a) : {
r : (NDArray a rank) | r.ndim = arr.ndim
&&
r.elements = arr.elements
&&
r.dimension_size 0 = arr.dimension_size 0
&&
r.dimension_size 1 = arr.dimension_size 1 && r.dimension_size 2 = arr.dimension_size 2
}
def scan_exclusive (_inst4212 : (Copy a)) (1 arr : (NDArray a rank)) (f : (acc : a) → (x : a) → a) (z : a) : {
r : (NDArray a rank) | r.ndim = arr.ndim
&&
r.elements = arr.elements
&&
r.dimension_size 0 = arr.dimension_size 0
&&
r.dimension_size 1 = arr.dimension_size 1 && r.dimension_size 2 = arr.dimension_size 2
}
def iterate (_inst4213 : (Copy a)) (1 arr : (NDArray a rank)) (steps : Int | steps ≥ 0 && steps ≤ 2147483647) (value : a) (
f : (step : Int | step ≥ 0 && step < steps) →
(xs : (ReadOnly a) | ReadOnly.size xs = arr.elements) →
(
1 output : (NDArray a rank) | r.ndim = arr.ndim
&&
r.elements = arr.elements
&&
r.dimension_size 0 = arr.dimension_size 0
&&
r.dimension_size 1 = arr.dimension_size 1 && r.dimension_size 2 = arr.dimension_size 2
) →
(NDArray a rank)
) : {
r : (NDArray a rank) | r.ndim = arr.ndim
&&
r.elements = arr.elements
&&
r.dimension_size 0 = arr.dimension_size 0
&&
r.dimension_size 1 = arr.dimension_size 1 && r.dimension_size 2 = arr.dimension_size 2
}
Uninterpreted
Functions declared as def f ... = uninterpreted: only their signature is known to the verifier; they have no body.
def ndim : (arr : (NDArray a rank)) → Int
def elements : (arr : (NDArray a rank)) → Int
def dimension_size : (arr : (NDArray a rank)) → (axis : Int) → Int