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

Uses (13)

Used by (1)