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))))}

Uses (25)

Used by (1)