GatherPROOF.halves_facts: def of bendtorch-core@0.1.0.0 Import: import bendtorch-core@0.1.0.0/src/tensor/gather_PROOF.bend as GatherPROOF Lines 309-329 of bendtorch-core@0.1.0.0/src/tensor/gather_PROOF.bend: https://jend.leeeet.dev/read.txt?path=bendtorch-core@0.1.0.0/src/tensor/gather_PROOF.bend&start_line=309&end_line=329 import Base import bendtorch-core@0.1.0.0/src/storage/model.bend as Model import bendtorch-core@0.1.0.0/src/tensor/gather.bend as Gather import bendtorch-core@0.1.0.0/src/storage/clone.bend as Clone import bendtorch-core@0.1.0.0/src/tensor/parallel_proofs.bend as Generic def halves_facts(+da: Nat, -A: Array, +di: Nat, -I: Array, lp: Array & Array, rp: Array & Array, -le: {lp == Array.clone(F32, A) : Array & Array}, -re: {rp == Array.clone(U32, I) : Array & Array}, -valid: Model.Balanced(F32, da, A), -index_valid: Model.Balanced(U32, di, I)) -> Generic.Fact<({Pair.fst(Array & Array, Array & Array, Gather.halves(lp, rp)) == (A, I) : Array & Array} & {Pair.snd(Array & Array, Array & Array, Gather.halves(lp, rp)) == (A, I) : Array & Array})>: (l1, l2) = lp (r1, r2) = rp Generic.Fact{( both(l1, r1, A, I, Equal.trans(Array, l1, Pair.fst(Array, Array, Array.clone(F32, A)), A, Equal.cong(Array & Array, Array, p => Pair.fst(Array, Array, p), (l1, l2), Array.clone(F32, A), le), Clone.first_equal(F32, da, A, Clone.certify(F32, da, A, valid))), Equal.trans(Array, r1, Pair.fst(Array, Array, Array.clone(U32, I)), I, Equal.cong(Array & Array, Array, p => Pair.fst(Array, Array, p), (r1, r2), Array.clone(U32, I), re), Clone.first_equal(U32, di, I, Clone.certify(U32, di, I, index_valid)))), both(l2, r2, A, I, Equal.trans(Array, l2, Pair.snd(Array, Array, Array.clone(F32, A)), A, Equal.cong(Array & Array, Array, p => Pair.snd(Array, Array, p), (l1, l2), Array.clone(F32, A), le), Clone.second_equal(F32, da, A, Clone.certify(F32, da, A, valid))), Equal.trans(Array, r2, Pair.snd(Array, Array, Array.clone(U32, I)), I, Equal.cong(Array & Array, Array, p => Pair.snd(Array, Array, p), (r1, r2), Array.clone(U32, I), re), Clone.second_equal(U32, di, I, Clone.certify(U32, di, I, index_valid)))))} Uses (18): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Array https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Array.clone https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Equal.cong https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Equal.trans https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=F32 https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Pair https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Pair.fst https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Pair.snd https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Sigma https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32 https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/storage/clone.bend&name=certify https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/storage/clone.bend&name=first_equal https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/storage/clone.bend&name=second_equal https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/storage/model.bend&name=Balanced https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/tensor/gather.bend&name=halves https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/tensor/gather_PROOF.bend&name=both https://jend.leeeet.dev/definition.txt?path=bendtorch-core@0.1.0.0/src/tensor/parallel_proofs.bend&name=Fact