Building one band's complete retained source catalog
ProvedThreeSum.LightSourceBandBankStep.Procs.meets3sumalgorithmsfine-grained-complexitythree-sum-1962word-ram
Write for machine space, word magnitude, and depth limits. Let integer arrays have lengths , with a retained pair of band-histogram structures for natural and integer shift . Let , , and . Fix
The left and right sources are the index intervals in their respective arrays; either may be empty. Assume exact occurrence rows for every catalog representative and exact cover data, all retained inputs before output base . The specified selector and batch procedures satisfy the host scratch bound, the band's word bound, , and .
The routine stores a complete source catalog at :
Its time is the representative-output batch budget plus , and all cells below are preserved.
This creates one band pair's reusable source data across the occurrence catalog.
Preamble
/- Copyright (c) 2026 Anthropic, PBC. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. SPDX-License-Identifier: Apache-2.0 -/ import Aesop import Definitions.Def_APSPSource_RemainingDefinitions import Definitions.Def_APSPSource_ThreeSumApsp_Lang_Logic import Definitions.Def_APSPSource_ThreeSumApsp_Lang_Regions import Definitions.Def_APSPSource_ThreeSumApsp_Lang_Syntax import Definitions.Def_ThreeSum1962Source_Bundle01 import Definitions.Def_ThreeSum1962Source_Bundle02 import Definitions.Def_ThreeSum1962Source_Bundle04 import Definitions.Def_ThreeSum1962Source_Bundle05 import Definitions.Def_ThreeSum1962Source_Bundle06 import Definitions.Def_ThreeSum1962Source_Bundle07 import Definitions.Def_ThreeSum1962Source_Bundle08 import Definitions.Def_ThreeSum1962Source_Bundle09 import Definitions.Def_ThreeSum1962Source_Bundle10 import Definitions.Def_ThreeSum1962Source_Bundle11 import Definitions.Def_ThreeSum1962Source_Bundle12 import Definitions.Def_ThreeSum1962Source_Bundle13 import Definitions.Def_ThreeSum1962Source_Bundle14 import Lean.Elab.Tactic.Omega import Mathlib.Algebra.BigOperators.Fin import Mathlib.Algebra.BigOperators.Group.Finset.Basic import Mathlib.Algebra.BigOperators.Group.Finset.Piecewise import Mathlib.Algebra.BigOperators.Group.Finset.Powerset import Mathlib.Algebra.BigOperators.Group.Finset.Sigma import Mathlib.Algebra.BigOperators.Ring.Finset import Mathlib.Algebra.Field.ZMod import Mathlib.Algebra.Group.Equiv.Basic import Mathlib.Algebra.Group.Int.Defs import Mathlib.Algebra.GroupWithZero.Nat import Mathlib.Algebra.Order.BigOperators.Group.Finset import Mathlib.Algebra.Order.BigOperators.Group.List import Mathlib.Algebra.Order.BigOperators.Group.Multiset import Mathlib.Algebra.Order.Chebyshev import Mathlib.Algebra.Order.Field.Basic import Mathlib.Algebra.Order.Floor.Div import Mathlib.Algebra.Order.Group.Abs import Mathlib.Algebra.Order.Group.Int import Mathlib.Algebra.Order.Group.Nat import Mathlib.Algebra.Order.Group.Unbundled.Abs import Mathlib.Algebra.Order.Ring.Abs import Mathlib.Algebra.Order.Ring.Int import Mathlib.Algebra.Order.Ring.Nat import Mathlib.Algebra.Order.Ring.Pow import Mathlib.Algebra.Polynomial.Basic import Mathlib.Algebra.Polynomial.Coeff import Mathlib.Algebra.Ring.Nat import Mathlib.Analysis.Complex.ExponentialBounds import Mathlib.Analysis.Convex.Deriv import Mathlib.Analysis.SpecialFunctions.BinaryEntropy import Mathlib.Analysis.SpecialFunctions.Log.Base import Mathlib.Analysis.SpecialFunctions.Pow.Asymptotics import Mathlib.Analysis.SpecialFunctions.Pow.NthRootLemmas import Mathlib.Analysis.SpecificLimits.Basic import Mathlib.Analysis.SpecificLimits.Normed import Mathlib.Combinatorics.Colex import Mathlib.Data.Bool.Basic import Mathlib.Data.Fin.Embedding import Mathlib.Data.Fin.VecNotation import Mathlib.Data.Finset.Basic import Mathlib.Data.Finset.Card import Mathlib.Data.Finset.Max import Mathlib.Data.Finset.Powerset import Mathlib.Data.Finset.Prod import Mathlib.Data.Finset.Range import Mathlib.Data.Finset.Sigma import Mathlib.Data.Finset.Sort import Mathlib.Data.Fintype.BigOperators import Mathlib.Data.Fintype.Card import Mathlib.Data.Fintype.EquivFin import Mathlib.Data.Fintype.Fin import Mathlib.Data.Fintype.Pi import Mathlib.Data.Fintype.Prod import Mathlib.Data.Fintype.Sets import Mathlib.Data.Fintype.Sum import Mathlib.Data.Int.Cast.Lemmas import Mathlib.Data.Int.ModEq import Mathlib.Data.Int.Notation import Mathlib.Data.Int.SuccPred import Mathlib.Data.List.Basic import Mathlib.Data.List.FinRange import Mathlib.Data.List.GetD import Mathlib.Data.List.MinMax import Mathlib.Data.List.Nodup import Mathlib.Data.List.OfFn import Mathlib.Data.List.Pi import Mathlib.Data.List.ProdSigma import Mathlib.Data.List.Range import Mathlib.Data.List.Sublists import Mathlib.Data.List.TakeDrop import Mathlib.Data.Nat.Cast.Order.Ring import Mathlib.Data.Nat.Choose.Basic import Mathlib.Data.Nat.Choose.Bounds import Mathlib.Data.Nat.Choose.Central import Mathlib.Data.Nat.Choose.Sum import Mathlib.Data.Nat.Count import Mathlib.Data.Nat.Log import Mathlib.Data.Nat.Notation import Mathlib.Data.Nat.Size import Mathlib.Data.Nat.Sqrt import Mathlib.Data.Nat.SuccPred import Mathlib.Data.Real.Basic import Mathlib.Data.ZMod.Basic import Mathlib.GroupTheory.Index import Mathlib.LinearAlgebra.Dual.Lemmas import Mathlib.LinearAlgebra.Matrix.Defs import Mathlib.LinearAlgebra.Matrix.Dual import Mathlib.LinearAlgebra.Matrix.ToLin import Mathlib.Logic.Equiv.Fin.Basic import Mathlib.Logic.Function.Basic import Mathlib.NumberTheory.Bertrand import Mathlib.NumberTheory.Chebyshev import Mathlib.Order.ConditionallyCompleteLattice.Basic import Mathlib.Order.Monotone.Basic import Mathlib.RingTheory.Coprime.Lemmas import Mathlib.Tactic import Mathlib.Tactic.Abel import Mathlib.Tactic.ByContra import Mathlib.Tactic.FieldSimp import Mathlib.Tactic.FinCases import Mathlib.Tactic.GCongr import Mathlib.Tactic.Linarith import Mathlib.Tactic.LinearCombination import Mathlib.Tactic.NormNum import Mathlib.Tactic.Positivity import Mathlib.Tactic.Push import Mathlib.Tactic.Ring import Mathlib.Tactic.SplitIfs import Mathlib.Tactic.Tauto import Theorems.Thm_ThreeSum_BlockSourceCoverInput_Input_of_kept import Theorems.Thm_ThreeSum_LightBlockSourceBatch_Procs_meets import Theorems.Thm_ThreeSum_LightSourceBandHistSelect_meets import Theorems.Thm_ThreeSum_SourceBandPairData_Stored_of_kept set_option autoImplicit false set_option relaxedAutoImplicit false set_option Elab.async false namespace Light end Light namespace ThreeSum.BandPartition end ThreeSum.BandPartition namespace ThreeSum.BlockCoefficientRows end ThreeSum.BlockCoefficientRows namespace ThreeSum.BlockEncoding end ThreeSum.BlockEncoding namespace ThreeSum.BlockSourceEncoding end ThreeSum.BlockSourceEncoding namespace ThreeSum.BlockSourceOccurrenceOrder end ThreeSum.BlockSourceOccurrenceOrder namespace ThreeSum.BlockSourceSharing end ThreeSum.BlockSourceSharing namespace ThreeSum.CostLedger end ThreeSum.CostLedger namespace ThreeSum.GlobalEncoding end ThreeSum.GlobalEncoding namespace ThreeSum.LightBlockSourceBatchLayout end ThreeSum.LightBlockSourceBatchLayout namespace ThreeSum.LightHistogram end ThreeSum.LightHistogram namespace ThreeSum.LightSourceResidues end ThreeSum.LightSourceResidues namespace ThreeSum.LightZetaStages end ThreeSum.LightZetaStages namespace ThreeSum.LocalCoverBounds end ThreeSum.LocalCoverBounds namespace ThreeSum.Scales end ThreeSum.Scales namespace ThreeSum.SourceBandLayout end ThreeSum.SourceBandLayout namespace ThreeSum.SourceBandPairData end ThreeSum.SourceBandPairData namespace ThreeSum.SourceBuckets end ThreeSum.SourceBuckets namespace ThreeSum.StageBounds end ThreeSum.StageBounds namespace ThreeSum.SubsetAddress end ThreeSum.SubsetAddress namespace ThreeSum.TrimScales end ThreeSum.TrimScales
Formal statement
theorem ThreeSum.LightSourceBandBankStep.Procs.meets : ∀ {lim : Light.Limits} {P : Light.Program} {d pMain : Nat} (C : ThreeSum.LightSourceBandBankStep.Procs P pMain)
{μ fL fR : Nat → Int} {pair NL NR g p h J cut occ maps candidates histL histR base i : Nat} {shift : Int}
(H : ThreeSum.SourceBandPairData.Stored μ fL fR pair NL NR g p (ThreeSum.BlockSourceEncoding.modulus h J) shift)
(hw : @LE.le.{0} Int Int.instLEInt (@Nat.cast.{0} Int instNatCastInt lim.space) lim.word)
(hd :
@LE.le.{0} Nat instLENat
(@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat)
(@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) d
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat) J
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat)
(@OfNat.ofNat.{0} Nat (nat_lit 512) (instOfNatNat (nat_lit 512))) h)))
(@OfNat.ofNat.{0} Nat (nat_lit 12) (instOfNatNat (nat_lit 12))))
lim.depth)
(hg : @LT.lt.{0} Nat instLTNat (@OfNat.ofNat.{0} Nat (nat_lit 0) (instOfNatNat (nat_lit 0))) g)
(hi : @LT.lt.{0} Nat instLTNat i (ThreeSum.SourceBandPairSlices.count NL NR g))
(hcut :
@LE.le.{0} Nat instLENat cut
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat) J
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat)
(@OfNat.ofNat.{0} Nat (nat_lit 512) (instOfNatNat (nat_lit 512))) h)))
(hpair :
@LE.le.{0} Nat instLENat (ThreeSum.SourceBandPairData.next pair NL NR g (ThreeSum.BlockSourceEncoding.modulus h J))
base)
(hocc :
@LE.le.{0} Nat instLENat
(@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) occ
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat) (ThreeSum.LightBlockSourceCatalog.count h J)
J))
base)
(hmaps :
@LE.le.{0} Nat instLENat
(@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) maps
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat)
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat)
(@OfNat.ofNat.{0} Nat (nat_lit 2) (instOfNatNat (nat_lit 2)))
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat)
(@OfNat.ofNat.{0} Nat (nat_lit 512) (instOfNatNat (nat_lit 512))) h))
(ThreeSum.GlobalEncoding.scheduleSize h)))
base)
(hcandidates :
@LE.le.{0} Nat instLENat
(@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) candidates
(ThreeSum.GlobalEncoding.scheduleSize h))
base)
(hleft :
@LE.le.{0} Nat instLENat
(@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) histL
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat) (ThreeSum.LightLocalCoverSchedule.rows h)
(ThreeSum.LocalCoverBounds.localPrime h)))
base)
(hright :
@LE.le.{0} Nat instLENat
(@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) histR
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat) (ThreeSum.LightLocalCoverSchedule.rows h)
(ThreeSum.LocalCoverBounds.localPrime h)))
base)
(hspace :
@LE.le.{0} Nat instLENat
(ThreeSum.LightBlockSourceRetainedHost.space
(ThreeSum.LightBlockSourceBatchLayout.work base (ThreeSum.LightBlockSourceCatalog.count h J)
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat) J
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat)
(@OfNat.ofNat.{0} Nat (nat_lit 512) (instOfNatNat (nat_lit 512))) h))
cut)
h J)
lim.space)
(hword :
@LE.le.{0} Int Int.instLEInt (@Nat.cast.{0} Int instNatCastInt (ThreeSum.LightSourceBandBankStep.word NL NR h J))
lim.word)
(hoccRead :
∀ (k : Nat),
@LT.lt.{0} Nat instLTNat k (ThreeSum.LightBlockSourceCatalog.count h J) →
∀ (j : Nat),
@LT.lt.{0} Nat instLTNat j J →
@Eq.{1} Int
(μ
(@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat)
(@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) occ
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat) k J))
j))
(@Nat.cast.{0} Int instNatCastInt
(@ThreeSum.BlockCoefficientRows.occurrenceIndices h J
(@ThreeSum.BlockEncoding.outputOccurrences h J
(ThreeSum.BlockSourceOccurrenceOrder.representative h J k))
j)))
(hcover : ThreeSum.BlockSourceCoverInput.Input μ h maps candidates histL histR),
Light.Meets lim P pMain d
(@List.cons.{0} Int (@Nat.cast.{0} Int instNatCastInt J)
(@List.cons.{0} Int
(@HMul.hMul.{0, 0, 0} Int Int Int (@instHMul.{0} Int Int.instMul)
(@OfNat.ofNat.{0} Int (nat_lit 512) (@instOfNat (nat_lit 512))) (@Nat.cast.{0} Int instNatCastInt h))
(@List.cons.{0} Int (@Nat.cast.{0} Int instNatCastInt h)
(@List.cons.{0} Int (@Nat.cast.{0} Int instNatCastInt (ThreeSum.LocalCoverBounds.localPrime h))
(@List.cons.{0} Int (@Nat.cast.{0} Int instNatCastInt (ThreeSum.LocalCoverBounds.localBucketCap h))
(@List.cons.{0} Int (@Nat.cast.{0} Int instNatCastInt cut)
(@List.cons.{0} Int (@Nat.cast.{0} Int instNatCastInt (ThreeSum.BlockSourceEncoding.modulus h J))
(@List.cons.{0} Int (@Nat.cast.{0} Int instNatCastInt occ)
(@List.cons.{0} Int (@Nat.cast.{0} Int instNatCastInt maps)
(@List.cons.{0} Int (@Nat.cast.{0} Int instNatCastInt candidates)
(@List.cons.{0} Int (@Nat.cast.{0} Int instNatCastInt histL)
(@List.cons.{0} Int (@Nat.cast.{0} Int instNatCastInt histR)
(@List.cons.{0} Int (@Nat.cast.{0} Int instNatCastInt pair)
(@List.cons.{0} Int (@Nat.cast.{0} Int instNatCastInt base)
(@List.cons.{0} Int
(@Nat.cast.{0} Int instNatCastInt
(ThreeSum.SubsetAddress.downsetCap
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat) J
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat)
(@OfNat.ofNat.{0} Nat (nat_lit 512) (instOfNatNat (nat_lit 512))) h))
cut))
(@List.cons.{0} Int
(@Nat.cast.{0} Int instNatCastInt (ThreeSum.LightBlockSourceCatalog.count h J))
(@List.cons.{0} Int (@Nat.cast.{0} Int instNatCastInt i)
(@List.nil.{0} Int))))))))))))))))))
μ (ThreeSum.LightSourceBandBankStep.time h J cut) fun (x : Int) (ν : Nat → Int) =>
And
(@ThreeSum.LightBlockSourceCatalog.Stored.{0, 0} (Fin NL) (Fin NR) (Fin.fintype NL) (Fin.fintype NR)
(instDecidableEqFin NL) (instDecidableEqFin NR) ν h J base cut (@Nat.cast.{0} Int instNatCastInt p) shift
(ThreeSum.SourceBandPartition.source NL g i) (fun (t : Fin NL) => fL (@Fin.val NL t))
(ThreeSum.SourceBandPartition.source NR g i) fun (t : Fin NR) => fR (@Fin.val NR t))
(Light.Kept μ ν base) := by
sorry
Source