def owned_value
bendtorch-core@0.1.0.0 · src/tensor/reduction_PROOF.bend:391
import bendtorch-core@0.1.0.0/src/tensor/reduction_PROOF.bend as ReductionPROOF
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/reduction.bend as Reduction
import bendtorch-core@0.1.0.0/src/tensor/reduction_LAWS.bend as Laws
import bendtorch-core@0.1.0.0/src/storage/main.bend as Storage
import bendtorch-core@0.1.0.0/src/storage/model.bend as Model
391def owned_value(-shape: Shape.Shape, +depth: Nat, +length: Nat, -original: Array<F32>, -balanced: Model.Balanced(F32, depth, original),
392 -valid: {Storage.bounds(depth, length) == True{} : Bool},
393 -exact: {length == Shape.logical_numel(Shape.dimensions(shape)) : Nat}, +fuel: Nat, +values: List<&2, F32>,
394 logical: Laws.LogicalValues(fuel, shape, Core.TTensor{Storage.Owned{depth, length, original, balanced, valid}, exact}, 0n, values),
395 pair: F32 & Array<F32>, -kept: Reduction.Fact<{Pair.snd(F32, Array<F32>, pair) == original : Array<F32>}>,
396 -folded: {pair == Reduction.array_sum(fuel, 0n, 0.0, original) : F32 & Array<F32>}) ->
397 Fact<{Laws.loop_value(shape, Reduction.owned_sum(shape, depth, length, original, balanced, valid, exact, pair, kept)) ==
398 Some{Reduction.sequential_sum(values, 0.0)} : Maybe<&2, F32>}>:
399 (value, retained) = pair
400 Fact{Equal.cong(F32, Maybe<&2, F32>, x => Some{x}, value, Reduction.sequential_sum(values, 0.0),
401 Equal.trans(F32, value, Pair.fst(F32, Array<F32>, Reduction.array_sum(fuel, 0n, 0.0, original)), Reduction.sequential_sum(values, 0.0),
402 Equal.cong(F32 & Array<F32>, F32, p => Pair.fst(F32, Array<F32>, p), (value, retained), Reduction.array_sum(fuel, 0n, 0.0, original), folded),
403 {\{Fact: p => p} : Fact<({Pair.fst(F32, Array<F32>, Reduction.array_sum(fuel, 0n, 0.0, original)) == Reduction.sequential_sum(values, 0.0) : F32})> ->
404 {Pair.fst(F32, Array<F32>, Reduction.array_sum(fuel, 0n, 0.0, original)) == Reduction.sequential_sum(values, 0.0) : F32}}(
405 fold_value(shape, depth, length, original, balanced, valid, exact, fuel, 0.0, values, logical))))}