def swapped_offset
bendtorch-core@0.1.0.0 · src/tensor/transpose_PROOF.bend:184
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/word_conversion.bend as Conversion
import bendtorch-core@0.1.0.0/src/tensor/matrix_index_proof.bend as MatrixIndex
import bendtorch-core@0.1.0.0/src/shape/nat_proofs.bend as Nats
184
185
186def swapped_offset(+rows: U32, +columns: U32, +j: Nat, +l: Nat,
187 +j_below: {Nat.is_lt(j, U32.to_nat(columns)) == True{} : Bool},
188 +l_below: {Nat.is_lt(l, U32.to_nat(rows)) == True{} : Bool}) ->
189 {Some{U32.from_nat(Nat.add(Nat.mul(U32.to_nat(U32.from_nat(l)), Nat.mul(U32.to_nat(columns), 1n)),
190 Nat.add(Nat.mul(U32.to_nat(U32.from_nat(j)), 1n), 0n)))} ==
191 Some{U32.from_nat(Nat.add(Nat.mul(l, U32.to_nat(columns)), j))} : Maybe<&2, U32>}:
192 +c = U32.to_nat(columns)
193 %Equal.sym(Nat, U32.to_nat(U32.from_nat(l)), l, MatrixIndex.word_below(l, rows, l_below)) :
194 {Some{U32.from_nat(Nat.add(Nat.mul(_, Nat.mul(c, 1n)), Nat.add(Nat.mul(U32.to_nat(U32.from_nat(j)), 1n), 0n)))} ==
195 Some{U32.from_nat(Nat.add(Nat.mul(l, c), j))} : Maybe<&2, U32>}
196 %Equal.sym(Nat, U32.to_nat(U32.from_nat(j)), j, MatrixIndex.word_below(j, columns, j_below)) :
197 {Some{U32.from_nat(Nat.add(Nat.mul(l, Nat.mul(c, 1n)), Nat.add(Nat.mul(_, 1n), 0n)))} ==
198 Some{U32.from_nat(Nat.add(Nat.mul(l, c), j))} : Maybe<&2, U32>}
199 %Equal.sym(Nat, Nat.mul(c, 1n), c, Nats.mul_one_right(c)) :
200 {Some{U32.from_nat(Nat.add(Nat.mul(l, _), Nat.add(Nat.mul(j, 1n), 0n)))} ==
201 Some{U32.from_nat(Nat.add(Nat.mul(l, c), j))} : Maybe<&2, U32>}
202 %Equal.sym(Nat, Nat.mul(j, 1n), j, Nats.mul_one_right(j)) :
203 {Some{U32.from_nat(Nat.add(Nat.mul(l, c), Nat.add(_, 0n)))} ==
204 Some{U32.from_nat(Nat.add(Nat.mul(l, c), j))} : Maybe<&2, U32>}
205 %Equal.sym(Nat, Nat.add(j, 0n), j, Conversion.add_zero(j)) :
206 {Some{U32.from_nat(Nat.add(Nat.mul(l, c), _))} ==
207 Some{U32.from_nat(Nat.add(Nat.mul(l, c), j))} : Maybe<&2, U32>}
208 {==}