def cell_spec
bendtorch-core@0.1.0.0 · src/tensor/matmul_parallel_proof.bend:216
import bendtorch-core@0.1.0.0/src/tensor/matmul_parallel_proof.bend as MatmulParallelProof
import Base
import bendtorch-core@0.1.0.0/src/storage/model.bend as Model
import bendtorch-core@0.1.0.0/src/tensor/matmul.bend as Matrix
import bendtorch-core@0.1.0.0/src/tensor/elementwise_parallel_proof.bend as Parallel
216
217def cell_spec(+dl: Nat, +dr: Nat, A: Array<F32>, B: Array<F32>, +inner: Nat, +columns: Nat, +position: Nat, inside: Bool,
218 -observed: Maybe<&2, F32>, -computed: {observed == Some{Pair.fst(F32, Array<F32> & Array<F32>, cell_of(inner, columns, position, A, B, inside))} : Maybe<&2, F32>},
219 -left_valid: Model.Balanced(F32, dl, A), -right_valid: Model.Balanced(F32, dr, B)) ->
220 Parallel.Fact<CellSpec(dl, dr, A, B, inner, columns, position, inside, observed)>:
221 match inside:
222 case False{}:
223 Parallel.Fact{computed}
224 case True{}:
225 Parallel.Fact{{\{DotRun: values => logical => fold => left_kept => right_kept =>
226 CellAt{Pair.fst(F32, Array<F32> & Array<F32>, cell_of(inner, columns, position, A, B, True{})), computed, values, logical, fold}} :
227 DotRun<inner, dl, dr, A, B, inner, columns, Matrix.row_of(columns, position), Matrix.column_of(columns, position), 0n, 0.0,
228 cell_of(inner, columns, position, A, B, True{})> ->
229 CellAt<dl, dr, A, B, inner, columns, position, observed>}(
230 {\{Parallel.Fact: p => p} :
231 Parallel.Fact<DotRun<inner, dl, dr, A, B, inner, columns, Matrix.row_of(columns, position), Matrix.column_of(columns, position), 0n, 0.0,
232 cell_of(inner, columns, position, A, B, True{})>> ->
233 DotRun<inner, dl, dr, A, B, inner, columns, Matrix.row_of(columns, position), Matrix.column_of(columns, position), 0n, 0.0,
234 cell_of(inner, columns, position, A, B, True{})>}(
235 dot_run(inner, dl, dr, A, B, inner, columns, Matrix.row_of(columns, position), Matrix.column_of(columns, position), 0n, 0.0, A, B,
236 {==}, {==}, left_valid, right_valid)))}