NDArray
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 (1 arr : NDArray a rank) (axis : Int | axis ≥ 0 && axis < arr.ndim) : {n : Int | n = arr.dimension_size axis && n ≥ 0}
def count (1 arr : NDArray a rank) : {n : Int | n = arr.elements && n ≥ 0}
def get1 (1 arr : NDArray a Rank1) (i : Int | i ≥ 0 && i < arr.dimension_size 0) : a
def get2 (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 (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 (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 (1 arr : NDArray a rank) (f : (acc : a) → (x : a) → a) (z : a) : a
def filter (1 arr : NDArray a rank) (f : (x : a) → Bool) : {r : NDArray a Rank1 | r.elements ≤ arr.elements && r.dimension_size 0 = r.elements}
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