def inner_right
bendtorch-core@0.1.0.0 · src/tensor/matmul_PROOF.bend:1220
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/storage/arith.bend as Arith
1220def inner_right(-left: Shape.Shape, +right: Shape.Shape, +rows: U32, +inner: U32,
1221 -le: {Shape.dimensions(left) == [rows, inner] : List<&2, U32>}, +dims: List<&2, U32>,
1222 -same: {dims == Shape.dimensions(right) : List<&2, U32>},
1223 -wanted_inner: U32, -right_inner: U32, -columns: U32,
1224 right_matrix: {dims == [right_inner, columns] : List<&2, U32>},
1225 inner_same: {U32.to_nat(inner) == U32.to_nat(wanted_inner) : Nat},
1226 mismatch: {U32.to_nat(wanted_inner) != U32.to_nat(right_inner) : Nat}) ->
1227 {Matrix.plan_right(left, right, rows, inner, le, dims, same) == Fail{Matrix.InnerDimensionMismatch{}} : Result<&2, &2, Matrix.Error, Matrix.Plan<left, right>>}:
1228 match dims:
1229 case +ri <> +c <> Nil{}:
1230 compatible_inner(left, right, rows, inner, ri, c, le, Equal.sym(List<&2, U32>, [ri, c], Shape.dimensions(right), same),
1231 equal => mismatch(Equal.trans(Nat, U32.to_nat(wanted_inner), U32.to_nat(inner), U32.to_nat(right_inner),
1232 Equal.sym(Nat, U32.to_nat(inner), U32.to_nat(wanted_inner), inner_same),
1233 Equal.trans(Nat, U32.to_nat(inner), U32.to_nat(ri), U32.to_nat(right_inner), equal,
1234 Equal.cong(List<&2, U32>, Nat, first_nat, [ri, c], [right_inner, columns], right_matrix)))),
1235 Shape.bool_case(Nat.is_eq(U32.to_nat(inner), U32.to_nat(ri))))
1236 case Nil{}:
1237 Empty.absurd({Matrix.plan_right(left, right, rows, inner, le, Nil{}, same) == Fail{Matrix.InnerDimensionMismatch{}} : Result<&2, &2, Matrix.Error, Matrix.Plan<left, right>>},
1238 Arith.clash(Equal.cong(List<&2, U32>, Bool, xs => Nat.is_eq(Shape.rank_dimensions(xs), 2n), Nil{}, [right_inner, columns], right_matrix)))
1239 case +x <> Nil{}:
1240 Empty.absurd({Matrix.plan_right(left, right, rows, inner, le, [x], same) == Fail{Matrix.InnerDimensionMismatch{}} : Result<&2, &2, Matrix.Error, Matrix.Plan<left, right>>},
1241 Arith.clash(Equal.cong(List<&2, U32>, Bool, xs => Nat.is_eq(Shape.rank_dimensions(xs), 2n), [x], [right_inner, columns], right_matrix)))
1242 case +x <> +y <> +z <> +t:
1243 Empty.absurd({Matrix.plan_right(left, right, rows, inner, le, x <> y <> z <> t, same) == Fail{Matrix.InnerDimensionMismatch{}} : Result<&2, &2, Matrix.Error, Matrix.Plan<left, right>>},
1244 Arith.clash(Equal.cong(List<&2, U32>, Bool, xs => Nat.is_eq(Shape.rank_dimensions(xs), 2n), x <> y <> z <> t, [right_inner, columns], right_matrix)))