def decode_rank

bendtorch-core@0.1.0.0 · src/shape/boundary_proofs.bend:90

import bendtorch-core@0.1.0.0/src/shape/boundary_proofs.bend as BoundaryProofs
import Base
import bendtorch-core@0.1.0.0/src/shape/core.bend as Shape
import bendtorch-core@0.1.0.0/src/shape/nat_proofs.bend as Nats
import bendtorch-core@0.1.0.0/src/shape/LAWS.bend as Laws

90def decode_rank(+dims: List<&2, U32>, +values: List<&2, U32>, mismatch: {False{} == Nat.is_eq(Shape.rank_dimensions(dims), Shape.rank_dimensions(values)) : Bool}) -> {None{} == Laws.decode(Shape.naturals(dims), Shape.naturals(values)) : Maybe<&2, Shape.Coordinate(Shape.naturals(dims))>}:
91  match dims values:
92    case Nil{} Nil{}:
93      Empty.absurd({None{} == Laws.decode(Nil{}, Nil{}) : Maybe<&2, Shape.Coordinate(Nil{})>}, Nats.contradiction(Nat.is_eq(0n, 0n), {==}, mismatch))
94    case +dh <> +dt +vh <> +vt:
95      %decode_rank(dt, vt, mismatch) : {None{} == Laws.decode.step(U32.to_nat(dh), Shape.naturals(dt), _, Laws.fin_of(U32.to_nat(dh), U32.to_nat(vh))) : Maybe<&2, Shape.Coordinate(Shape.naturals(dh <> dt))>}
96      {==}
97    case Nil{} vh <> vt:
98      {==}
99    case dh <> dt Nil{}:
100      {==}

Uses (14)

Used by (3)