def compared_is
bendtorch-core@0.1.0.0 · src/tensor/gather_PROOF.bend:481
import bendtorch-core@0.1.0.0/src/tensor/gather_PROOF.bend as GatherPROOF
import Base
import bendtorch-core@0.1.0.0/src/storage/model.bend as Model
import bendtorch-core@0.1.0.0/src/storage/refinement.bend as Refinement
import bendtorch-core@0.1.0.0/src/tensor/gather.bend as Gather
import bendtorch-core@0.1.0.0/src/tensor/parallel_proofs.bend as Generic
481def compared_is(+i: Nat, +at: Nat, +slot: Nat, +acc: F32, +dg: Nat, -G: Array<F32>, +di: Nat, -I: Array<U32>, pair: Array<U32> & U32,
482 -kept: {Refinement.first(U32, pair) == I : Array<U32>},
483 -seen: {Some{Refinement.second(U32, pair)} == Model.observe(U32, di, I, Refinement.route(di, U32.from_nat(slot))) : Maybe<&2, U32>},
484 -valid: Model.Balanced(F32, dg, G)) ->
485 Generic.Fact<Stepped<dg, G, di, I, i, at, slot, acc, Gather.compared(i, at, acc, G, pair)>>:
486 (index, +j) = pair
487 summed_is(i, at, slot, acc, dg, G, di, I, index, j, kept,
488 Equal.sym(Maybe<&2, U32>, Some{j}, Model.observe(U32, di, I, Refinement.route(di, U32.from_nat(slot))), seen),
489 Nat.is_eq(U32.to_nat(j), i), {==}, valid)