def loop_certificate
bendtorch-core@0.1.0.0 · src/tensor/transform_PROOF.bend:963
import bendtorch-core@0.1.0.0/src/tensor/transform_PROOF.bend as TransformPROOF
import Base
import bendtorch-core@0.1.0.0/src/shape/core.bend as Shape
import bendtorch-core@0.1.0.0/src/tensor/layout.bend as Layout
import bendtorch-core@0.1.0.0/src/tensor/core.bend as Core
import bendtorch-core@0.1.0.0/src/tensor/transforms.bend as Transforms
963def loop_certificate(fuel: Nat, +input: Shape.Shape, +axes: List<&2, U32>, +plan: Layout.Plan<input, axes>, +cursor: Nat,
964 -original: Core.Tensor<input>, source: Core.Tensor<input>, target: Core.Tensor<Layout.output(input, axes, plan)>,
965 -prefix: Transforms.Prefix<input, axes, plan, original, source, target, cursor>) ->
966 Transforms.LoopCertificate<input, axes, plan, original, fuel, cursor, source, target>:
967 match fuel:
968 case 0n:
969 Transforms.LoopCertificate{(source, Done{target}), {==}, prefix}
970 case 1n++remaining:
971 loop_after_natural(remaining, input, axes, plan, cursor, original, source, target, prefix,
972 natural_certificate(input, axes, plan, cursor, source, target),
973 source => target => invariant => loop_certificate(remaining, input, axes, plan, 1n+cursor, original, source, target, invariant))