def inner_left

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

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

1246def inner_left(+left: Shape.Shape, +right: Shape.Shape, +dims: List<&2, U32>,
1247  -same: {dims == Shape.dimensions(left) : List<&2, U32>},
1248  -rows: U32, -inner: U32, -right_inner: U32, -columns: U32,
1249  left_matrix: {dims == [rows, inner] : List<&2, U32>},
1250  right_matrix: {Shape.dimensions(right) == [right_inner, columns] : List<&2, U32>},
1251  mismatch: {U32.to_nat(inner) != U32.to_nat(right_inner) : Nat}) ->
1252  {Matrix.plan_left(left, right, dims, same) == Fail{Matrix.InnerDimensionMismatch{}} : Result<&2, &2, Matrix.Error, Matrix.Plan<left, right>>}:
1253  match dims:
1254    case +r <> +i <> Nil{}:
1255      inner_right(left, right, r, i, Equal.sym(List<&2, U32>, [r, i], Shape.dimensions(left), same), Shape.dimensions(right), {==},
1256        inner, right_inner, columns, right_matrix,
1257        Equal.cong(List<&2, U32>, Nat, second_nat, [r, i], [rows, inner], left_matrix), mismatch)
1258    case Nil{}:
1259      Empty.absurd({Matrix.plan_left(left, right, Nil{}, same) == Fail{Matrix.InnerDimensionMismatch{}} : Result<&2, &2, Matrix.Error, Matrix.Plan<left, right>>},
1260        Arith.clash(Equal.cong(List<&2, U32>, Bool, xs => Nat.is_eq(Shape.rank_dimensions(xs), 2n), Nil{}, [rows, inner], left_matrix)))
1261    case +x <> Nil{}:
1262      Empty.absurd({Matrix.plan_left(left, right, [x], same) == Fail{Matrix.InnerDimensionMismatch{}} : Result<&2, &2, Matrix.Error, Matrix.Plan<left, right>>},
1263        Arith.clash(Equal.cong(List<&2, U32>, Bool, xs => Nat.is_eq(Shape.rank_dimensions(xs), 2n), [x], [rows, inner], left_matrix)))
1264    case +x <> +y <> +z <> +t:
1265      Empty.absurd({Matrix.plan_left(left, right, x <> y <> z <> t, same) == Fail{Matrix.InnerDimensionMismatch{}} : Result<&2, &2, Matrix.Error, Matrix.Plan<left, right>>},
1266        Arith.clash(Equal.cong(List<&2, U32>, Bool, xs => Nat.is_eq(Shape.rank_dimensions(xs), 2n), x <> y <> z <> t, [rows, inner], left_matrix)))

Uses (20)

Used by (1)