def dot_decision_status
bendtorch-core@0.1.0.0 · src/tensor/matmul_PROOF.bend:758
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/core.bend as Core
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
import bendtorch-core@0.1.0.0/src/tensor/reduction_PROOF.bend as MathProof
import bendtorch-core@0.1.0.0/src/tensor/transform_totality.bend as TransformTotality
import bendtorch-core@0.1.0.0/src/shape/coordinate_proofs.bend as Coordinates
758def dot_decision_status(+fuel: Nat, +left: Shape.Shape, +right: Shape.Shape, +row: U32, +column: U32, +cursor: Nat, +accumulator: F32,
759 decision: Shape.BoolCase<Nat.is_eq(U32.to_nat(U32.from_nat(cursor)), cursor)>, a: Core.Tensor<left>, b: Core.Tensor<right>,
760 -exact: {U32.to_nat(U32.from_nat(cursor)) == cursor : Nat},
761 -left_fits: Coordinates.Fits(Shape.extents(left), [U32.to_nat(row), U32.to_nat(U32.from_nat(cursor))]),
762 -right_fits: Coordinates.Fits(Shape.extents(right), [U32.to_nat(U32.from_nat(cursor)), U32.to_nat(column)]),
763 -rec: @a: Core.Tensor<left> -> @b: Core.Tensor<right> -> @+value: F32 -> Totality.Status<Matrix.Error, Core.Tensor<left> & Core.Tensor<right> & F32,
764 Matrix.natural_dot(fuel, left, right, a, b, row, column, 1n+cursor, value)>) ->
765 Totality.Status<Matrix.Error, Core.Tensor<left> & Core.Tensor<right> & F32, Matrix.dot_decided(left, right,
766 a => b => value => Matrix.natural_dot(fuel, left, right, a, b, row, column, 1n+cursor, value), a, b, row, column, cursor, U32.from_nat(cursor), accumulator, decision)>:
767 match decision:
768 case Shape.BFalse{equal}:
769 Totality.Status{Empty.absurd({False{} == True{} : Bool}, MathProof.conversion_clash(U32.to_nat(U32.from_nat(cursor)), cursor, exact, equal))}
770 case Shape.BTrue{equal}:
771 dot_left_status(fuel, left, right, row, column, cursor, accumulator, Core.read_coordinate(left, a, [row, U32.from_nat(cursor)]), b,
772 {\{Totality.ReadStatus: successful => successful} : Totality.ReadStatus<left, Core.read_coordinate(left, a, [row, U32.from_nat(cursor)])> ->
773 {TransformTotality.read_succeeded(left, Core.read_coordinate(left, a, [row, U32.from_nat(cursor)])) == True{} : Bool}}(
774 coordinate_read_status(left, a, [row, U32.from_nat(cursor)], left_fits)), right_fits, rec)