def right_flat
bendtorch-core@0.1.0.0 · src/tensor/matmul_PROOF.bend:1351
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
1351def right_flat(+right: Shape.Shape, +inner: U32, +right_inner: U32, +columns: U32, +column: Nat, +k: Nat,
1352 +re: {Shape.dimensions(right) == [right_inner, columns] : List<&2, U32>},
1353 +compatible: {U32.to_nat(inner) == U32.to_nat(right_inner) : Nat},
1354 +column_below: {Nat.is_lt(column, U32.to_nat(columns)) == True{} : Bool}, +below: {Nat.is_lt(k, U32.to_nat(inner)) == True{} : Bool}) ->
1355 {ShapeLaws.index_result(right, Shape.flatten_checked(right, [U32.from_nat(k), U32.from_nat(column)])) ==
1356 Some{Matrix.right_index(U32.to_nat(columns), column, k)} : Maybe<&2, U32>}:
1357 +k_exact = MatrixIndex.word_below(k, inner, below)
1358 +column_exact = MatrixIndex.word_below(column, columns, column_below)
1359 Equal.trans(Maybe<&2, U32>, ShapeLaws.index_result(right, Shape.flatten_checked(right, [U32.from_nat(k), U32.from_nat(column)])),
1360 Some{U32.from_nat(Nat.add(Nat.mul(U32.to_nat(U32.from_nat(k)), U32.to_nat(columns)), U32.to_nat(U32.from_nat(column))))},
1361 Some{U32.from_nat(Nat.add(Nat.mul(k, U32.to_nat(columns)), column))},
1362 MatrixIndex.flat_pair(right, right_inner, columns, U32.from_nat(k), U32.from_nat(column), re,
1363 MatrixIndex.lt_same(U32.to_nat(U32.from_nat(k)), k, U32.to_nat(right_inner), k_exact,
1364 MatrixIndex.lt_bound(k, U32.to_nat(inner), U32.to_nat(right_inner), compatible, below)),
1365 MatrixIndex.lt_same(U32.to_nat(U32.from_nat(column)), column, U32.to_nat(columns), column_exact, column_below)),
1366 MatrixIndex.index_same(U32.to_nat(U32.from_nat(k)), U32.to_nat(U32.from_nat(column)), k, column, U32.to_nat(columns), k_exact, column_exact))