Radix-composed keys have a uniform magnitude bound
ProvedThreeSum.RadixKeyLists.values_bounded3sumalgorithmsfine-grained-complexitythree-sum-1962word-ram
Let , and let be a list of integers satisfying for every . Define the key lists recursively by and by forming from all entries with and , in the prescribed list order. Then, for every ,
This estimate bounds integer keys assembled from signed components, including radix zero and the empty-depth case, for later word-size calculations.
Preamble
import Aesop import Definitions.Def_ThreeSum1962Source_Bundle04 import Lean.Elab.Tactic.Omega import Mathlib.Algebra.BigOperators.Group.Finset.Basic import Mathlib.Algebra.Field.ZMod import Mathlib.Algebra.Order.BigOperators.Group.Finset import Mathlib.Algebra.Order.Chebyshev import Mathlib.Algebra.Order.Floor.Div import Mathlib.Algebra.Order.Ring.Pow import Mathlib.Data.Bool.Basic import Mathlib.Data.Fin.VecNotation import Mathlib.Data.Finset.Card import Mathlib.Data.Finset.Powerset import Mathlib.Data.Finset.Prod import Mathlib.Data.Fintype.BigOperators import Mathlib.Data.Fintype.Card import Mathlib.Data.Fintype.Pi import Mathlib.Data.Fintype.Prod import Mathlib.Data.Int.ModEq import Mathlib.Data.List.MinMax import Mathlib.Data.List.Nodup import Mathlib.Data.List.OfFn import Mathlib.Data.List.Pi import Mathlib.Data.List.TakeDrop import Mathlib.Data.Nat.Choose.Basic import Mathlib.Data.Nat.Choose.Central import Mathlib.Data.Nat.Choose.Sum import Mathlib.Data.Nat.Sqrt import Mathlib.Data.Real.Basic import Mathlib.Data.ZMod.Basic import Mathlib.GroupTheory.Index import Mathlib.LinearAlgebra.Dual.Lemmas import Mathlib.LinearAlgebra.Matrix.Dual import Mathlib.LinearAlgebra.Matrix.ToLin import Mathlib.NumberTheory.Bertrand import Mathlib.Tactic.ByContra import Mathlib.Tactic.FieldSimp import Mathlib.Tactic.FinCases import Mathlib.Tactic.Linarith import Mathlib.Tactic.NormNum import Mathlib.Tactic.Positivity import Mathlib.Tactic.Push import Mathlib.Tactic.Ring import Mathlib.Tactic.SplitIfs set_option autoImplicit false set_option relaxedAutoImplicit false set_option Elab.async false
Formal statement
theorem ThreeSum.RadixKeyLists.values_bounded : ∀ (p U : Nat) (base : List.{0} Int)
(hbase :
∀ (x : Int),
@Membership.mem.{0, 0} Int (List.{0} Int) (@List.instMembership.{0} Int) base x →
@LE.le.{0} Int Int.instLEInt (@abs.{0} Int instLatticeInt Int.instAddGroup x)
(@Nat.cast.{0} Int instNatCastInt U))
(j : Nat) (z : Int),
@Membership.mem.{0, 0} Int (List.{0} Int) (@List.instMembership.{0} Int)
(ThreeSum.RadixKeyLists.values (@Nat.cast.{0} Int instNatCastInt p) base j) z →
@LE.le.{0} Int Int.instLEInt (@abs.{0} Int instLatticeInt Int.instAddGroup z)
(@Nat.cast.{0} Int instNatCastInt
(@HMul.hMul.{0, 0, 0} Nat Nat Nat (@instHMul.{0} Nat instMulNat) U
(@HPow.hPow.{0, 0, 0} Nat Nat Nat
(@instHPow.{0, 0} Nat Nat (@NPow.toPow.{0} Nat (@Monoid.toNPow.{0} Nat Nat.instMonoid)))
(@HAdd.hAdd.{0, 0, 0} Nat Nat Nat (@instHAdd.{0} Nat instAddNat) p
(@OfNat.ofNat.{0} Nat (nat_lit 1) (instOfNatNat (nat_lit 1))))
j))) := by
sorry
Source