def plan_right_status
bendtorch-core@0.1.0.0 · src/tensor/matmul_PROOF.bend:1095
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/tensor/math_totality.bend as Totality
1095def plan_right_status(dimensions: List<&2, U32>, +left: Shape.Shape, +right: Shape.Shape, +rows: U32, +inner: U32,
1096 -le: {Shape.dimensions(left) == [rows, inner] : List<&2, U32>}, -same: {dimensions == Shape.dimensions(right) : List<&2, U32>},
1097 -valid: Totality.MatrixInputs<left, right>) -> PlanStatus<left, right, Matrix.plan_right(left, right, rows, inner, le, dimensions, same)>:
1098 match dimensions:
1099 case +right_inner <> +columns <> Nil{}:
1100 PlanStatus{{\{Totality.MatrixBounds: compatible => supported =>
1101 {\{PlanStatus: successful => successful} : PlanStatus<left, right,
1102 Matrix.plan_compatible(left, right, rows, inner, right_inner, columns, le, Equal.sym(List<&2, U32>, [right_inner, columns], Shape.dimensions(right), same),
1103 Shape.bool_case(Nat.is_eq(U32.to_nat(inner), U32.to_nat(right_inner))))> ->
1104 {Result.is_done(&2, &2, Matrix.Error, Matrix.Plan<left, right>, Matrix.plan_right(left, right, rows, inner, le, [right_inner, columns], same)) == True{} : Bool}}(
1105 plan_compatible_status(left, right, rows, inner, right_inner, columns, Shape.bool_case(Nat.is_eq(U32.to_nat(inner), U32.to_nat(right_inner))), le,
1106 Equal.sym(List<&2, U32>, [right_inner, columns], Shape.dimensions(right), same), compatible, supported))} :
1107 Totality.MatrixBounds<rows, inner, right_inner, columns> -> {Result.is_done(&2, &2, Matrix.Error, Matrix.Plan<left, right>, Matrix.plan_right(left, right, rows, inner, le, [right_inner, columns], same)) == True{} : Bool}}(
1108 actual_admission(left, right, rows, inner, right_inner, columns, le, Equal.sym(List<&2, U32>, [right_inner, columns], Shape.dimensions(right), same), valid))}
1109 case Nil{}:
1110 PlanStatus{Empty.absurd({False{} == True{} : Bool}, right_rank_clash(left, right, Nil{}, same, {==},
1111 {\{Totality.RankTwo: rank => rank} : Totality.RankTwo<right> -> {Shape.rank_dimensions(Shape.dimensions(right)) == 2n : Nat}}(swapped_inputs(left, right, valid))))}
1112 case head <> Nil{}:
1113 PlanStatus{Empty.absurd({False{} == True{} : Bool}, right_rank_clash(left, right, [head], same, {==},
1114 {\{Totality.RankTwo: rank => rank} : Totality.RankTwo<right> -> {Shape.rank_dimensions(Shape.dimensions(right)) == 2n : Nat}}(swapped_inputs(left, right, valid))))}
1115 case first <> second <> third <> rest:
1116 PlanStatus{Empty.absurd({False{} == True{} : Bool}, right_rank_clash(left, right, first <> second <> third <> rest, same, {==},
1117 {\{Totality.RankTwo: rank => rank} : Totality.RankTwo<right> -> {Shape.rank_dimensions(Shape.dimensions(right)) == 2n : Nat}}(swapped_inputs(left, right, valid))))}