def left_flat

bendtorch-core@0.1.0.0 · src/tensor/matmul_PROOF.bend:1336

import bendtorch-core@0.1.0.0/src/tensor/matmul_PROOF.bend as MatmulPROOF
import Base
import bendtorch-core@0.1.0.0/src/shape/core.bend as Shape
import bendtorch-core@0.1.0.0/src/tensor/matmul.bend as Matrix
import bendtorch-core@0.1.0.0/src/shape/LAWS.bend as ShapeLaws
import bendtorch-core@0.1.0.0/src/tensor/matrix_index_proof.bend as MatrixIndex

1336def left_flat(+left: Shape.Shape, +rows: U32, +inner: U32, +row: Nat, +k: Nat,
1337  +le: {Shape.dimensions(left) == [rows, inner] : List<&2, U32>},
1338  +row_below: {Nat.is_lt(row, U32.to_nat(rows)) == True{} : Bool}, +below: {Nat.is_lt(k, U32.to_nat(inner)) == True{} : Bool}) ->
1339  {ShapeLaws.index_result(left, Shape.flatten_checked(left, [U32.from_nat(row), U32.from_nat(k)])) ==
1340    Some{Matrix.left_index(U32.to_nat(inner), row, k)} : Maybe<&2, U32>}:
1341  +k_exact = MatrixIndex.word_below(k, inner, below)
1342  +row_exact = MatrixIndex.word_below(row, rows, row_below)
1343  Equal.trans(Maybe<&2, U32>, ShapeLaws.index_result(left, Shape.flatten_checked(left, [U32.from_nat(row), U32.from_nat(k)])),
1344    Some{U32.from_nat(Nat.add(Nat.mul(U32.to_nat(U32.from_nat(row)), U32.to_nat(inner)), U32.to_nat(U32.from_nat(k))))},
1345    Some{U32.from_nat(Nat.add(Nat.mul(row, U32.to_nat(inner)), k))},
1346    MatrixIndex.flat_pair(left, rows, inner, U32.from_nat(row), U32.from_nat(k), le,
1347      MatrixIndex.lt_same(U32.to_nat(U32.from_nat(row)), row, U32.to_nat(rows), row_exact, row_below),
1348      MatrixIndex.lt_same(U32.to_nat(U32.from_nat(k)), k, U32.to_nat(inner), k_exact, below)),
1349    MatrixIndex.index_same(U32.to_nat(U32.from_nat(row)), U32.to_nat(U32.from_nat(k)), row, k, U32.to_nat(inner), row_exact, k_exact))

Uses (20)

Used by (1)