def matrix_source

bendtorch-core@0.1.0.0 · src/tensor/transpose_PROOF.bend:210

import bendtorch-core@0.1.0.0/src/tensor/transpose_PROOF.bend as TransposePROOF
import Base
import bendtorch-core@0.1.0.0/src/tensor/matmul.bend as Matrix
import bendtorch-core@0.1.0.0/src/tensor/matrix_index_proof.bend as MatrixIndex

210def matrix_source(+rows: U32, +columns: U32, +j: Nat, +l: Nat,
211  +j_below: {Nat.is_lt(j, U32.to_nat(columns)) == True{} : Bool},
212  +l_below: {Nat.is_lt(l, U32.to_nat(rows)) == True{} : Bool},
213  +exact: {U32.to_nat(U32.from_nat(Nat.add(Nat.mul(j, U32.to_nat(rows)), l))) == Nat.add(Nat.mul(j, U32.to_nat(rows)), l) : Nat}) ->
214  {transposed_source([rows, columns], U32.from_nat(Nat.add(Nat.mul(j, U32.to_nat(rows)), l))) ==
215    Some{U32.from_nat(Nat.add(Nat.mul(l, U32.to_nat(columns)), j))} : Maybe<&2, U32>}:
216  +r = U32.to_nat(rows)
217  +c = U32.to_nat(columns)
218  +i = Nat.add(Nat.mul(j, r), l)
219  %Equal.sym(Nat, U32.to_nat(U32.from_nat(i)), i, exact) :
220    {Some{U32.from_nat(Nat.add(Nat.mul(U32.to_nat(U32.from_nat(Matrix.column_of(r, _))), Nat.mul(c, 1n)),
221       Nat.add(Nat.mul(U32.to_nat(U32.from_nat(Matrix.row_of(r, U32.to_nat(U32.from_nat(i))))), 1n), 0n)))} ==
222      Some{U32.from_nat(Nat.add(Nat.mul(l, c), j))} : Maybe<&2, U32>}
223  %Equal.sym(Nat, U32.to_nat(U32.from_nat(i)), i, exact) :
224    {Some{U32.from_nat(Nat.add(Nat.mul(U32.to_nat(U32.from_nat(Matrix.column_of(r, i))), Nat.mul(c, 1n)),
225       Nat.add(Nat.mul(U32.to_nat(U32.from_nat(Matrix.row_of(r, _))), 1n), 0n)))} ==
226      Some{U32.from_nat(Nat.add(Nat.mul(l, c), j))} : Maybe<&2, U32>}
227  %Equal.sym(Nat, Matrix.column_of(r, i), l, MatrixIndex.column_at(j, l, r, l_below)) :
228    {Some{U32.from_nat(Nat.add(Nat.mul(U32.to_nat(U32.from_nat(_)), Nat.mul(c, 1n)),
229       Nat.add(Nat.mul(U32.to_nat(U32.from_nat(Matrix.row_of(r, i))), 1n), 0n)))} ==
230      Some{U32.from_nat(Nat.add(Nat.mul(l, c), j))} : Maybe<&2, U32>}
231  %Equal.sym(Nat, Matrix.row_of(r, i), j, MatrixIndex.row_at(j, l, r, l_below)) :
232    {Some{U32.from_nat(Nat.add(Nat.mul(U32.to_nat(U32.from_nat(l)), Nat.mul(c, 1n)),
233       Nat.add(Nat.mul(U32.to_nat(U32.from_nat(_)), 1n), 0n)))} ==
234      Some{U32.from_nat(Nat.add(Nat.mul(l, c), j))} : Maybe<&2, U32>}
235  swapped_offset(rows, columns, j, l, j_below, l_below)

Uses (17)

Used by (1)