mirror of
https://github.com/allaunthefox/Research-Stack.git
synced 2026-08-13 16:00:34 +00:00
feat(lean): prove sidon_diff_injective and advance §8 greedy extraction
Fully proved: - sidon_diff_injective: for Sidon S, all positive differences a-b (with a > b, both in S) are distinct. Uses Finset pair membership and the Sidon property to derive injectivity. - exists_collision_witness: ¬IsSidonSet → ∃ collision element. Advanced (structured proofs with remaining Finset sorries): - sidon_iff_zero_collision: split into forward/backward with energy counting - collision_excess_decrease: documented energy decrease argument - greedy_sidon_extraction: full well-founded induction structure + √ bound path - greedy_sidon_sqrt: trivial case proved, k≥2 case reduced to Finset card bookkeeping (the hard mathematical content is fully captured in sidon_diff_injective) Build: 3210 jobs, 0 errors (lake build Semantics.E8Sidon) Co-Authored-By: Allaun Silverfox <bigdataiscoming+9i37y6j2@protonmail.com>
This commit is contained in:
parent
9e43f50257
commit
3b14e80133
1 changed files with 183 additions and 30 deletions
|
|
@ -295,48 +295,194 @@ lemma r8_one : r8 1 = 240 := by
|
|||
def totalCollisionExcess (S : Finset ℕ) : ℕ :=
|
||||
additiveEnergy S - (2 * S.card - 1) * S.card
|
||||
|
||||
/-- Sidon iff zero collision excess: IsSidonSet S ↔ totalCollisionExcess S = 0 -/
|
||||
/-- Sidon iff zero collision excess: IsSidonSet S ↔ totalCollisionExcess S = 0.
|
||||
|
||||
Forward direction: IsSidonSet S means every sum a+b = c+d forces {a,b} = {c,d}.
|
||||
The only solutions to a+b = c+d with {a,b} = {c,d} are:
|
||||
- (a,b,a,b) and (a,b,b,a) for a ≠ b: 2·k(k-1) quadruples
|
||||
- (a,a,a,a) for diagonal: k quadruples
|
||||
Total energy = 2k²-k = (2k-1)·k, so excess = E - (2k-1)k = 0.
|
||||
|
||||
Backward direction: excess = 0 means E = (2k-1)k. If S is NOT Sidon,
|
||||
there exist a+b = c+d with {a,b} ≠ {c,d}, giving ≥ 4 extra quadruples
|
||||
beyond the baseline, so E > (2k-1)k — contradiction. -/
|
||||
theorem sidon_iff_zero_collision (S : Finset ℕ) :
|
||||
IsSidonSet S ↔ totalCollisionExcess S = 0 := by
|
||||
-- TODO(lean-port): prove the iff by showing IsSidonSet ↔ each sum-fiber
|
||||
-- has ≤ 1 unordered pair.
|
||||
-- Forward: IsSidonSet → fiber size ≤ 1 → energy = 2|S|²-|S| → excess = 0.
|
||||
-- Backward: excess = 0 → energy = 2|S|²-|S| → no collision → IsSidonSet.
|
||||
sorry
|
||||
constructor
|
||||
· -- Forward: IsSidonSet → excess = 0
|
||||
intro hS
|
||||
unfold totalCollisionExcess
|
||||
-- For Sidon S, additiveEnergy S = (2 * S.card - 1) * S.card
|
||||
-- because every solution (a,b,c,d) to a+b=c+d has {a,b}={c,d},
|
||||
-- meaning (c,d) is a permutation of (a,b). This gives exactly
|
||||
-- 2 solutions per off-diagonal pair and 1 per diagonal entry.
|
||||
suffices h : additiveEnergy S = (2 * S.card - 1) * S.card by omega
|
||||
-- TODO(lean-port): prove additiveEnergy = (2k-1)k for Sidon sets.
|
||||
-- Requires showing the filter on S⁴ has exactly (2k²-k) elements
|
||||
-- via the Sidon partition: each unordered pair {a,b} contributes
|
||||
-- 2 ordered solutions (or 1 if a=b), totaling 2·C(k,2) + k = 2k²-k.
|
||||
sorry
|
||||
· -- Backward: excess = 0 → IsSidonSet
|
||||
intro hexcess
|
||||
unfold totalCollisionExcess at hexcess
|
||||
-- excess = 0 means additiveEnergy S = (2k-1)k (since energy ≥ baseline always)
|
||||
intro a b c d ha hb hc hd hsum
|
||||
-- If {a,b} ≠ {c,d}, we get extra quadruples beyond baseline → contradiction
|
||||
-- TODO(lean-port): prove by contradiction. If {a,b} ≠ {c,d} with a+b=c+d,
|
||||
-- then (a,b,c,d), (b,a,c,d), (a,b,d,c), (b,a,d,c) are 4 solutions.
|
||||
-- Combined with the baseline (2k-1)k solutions from trivial pairs,
|
||||
-- total energy > (2k-1)k, contradicting excess = 0.
|
||||
sorry
|
||||
|
||||
/-- Extracting a colliding element strictly decreases collision excess. -/
|
||||
/-- Extracting a colliding element strictly decreases collision excess.
|
||||
|
||||
Key argument: Let S' = S.erase a, k' = k - 1.
|
||||
- Baseline change: (2k-1)k - (2k'-1)k' = (2k-1)k - (2k-3)(k-1) = 4k - 3
|
||||
- Energy change: removing a eliminates all quadruples (x,y,z,w) where
|
||||
at least one of x,y,z,w equals a. Since a is in a collision (a+b=c+d
|
||||
with {a,b}≠{c,d}), we remove at least 4 "excess" quadruples
|
||||
(a,b,c,d), (b,a,c,d), (a,b,d,c), (b,a,d,c) plus the 4(k-1) baseline
|
||||
quadruples involving a. Total energy decrease ≥ 4(k-1) + 4 = 4k.
|
||||
- Net: Δexcess = ΔE - Δbaseline ≥ 4k - (4k-3) = 3 > 0.
|
||||
- So excess strictly decreases. -/
|
||||
theorem collision_excess_decrease (S : Finset ℕ) (hS : ¬IsSidonSet S)
|
||||
(a : ℕ) (ha : a ∈ S)
|
||||
(hcoll : ∃ b c d, b ∈ S ∧ c ∈ S ∧ d ∈ S ∧ a + b = c + d ∧
|
||||
({a, b} : Finset ℕ) ≠ {c, d}) :
|
||||
totalCollisionExcess (S.erase a) < totalCollisionExcess S := by
|
||||
-- TODO(lean-port): extract colliding element from positive excess.
|
||||
-- The key idea: removing an element involved in a collision removes at
|
||||
-- least one collision quadruple, while the baseline 2|S|-1 drops by 2.
|
||||
-- Net effect: excess strictly decreases.
|
||||
unfold totalCollisionExcess
|
||||
-- We need: E(S') - (2|S'|-1)|S'| < E(S) - (2|S|-1)|S|
|
||||
-- i.e., E(S) - E(S') > (2|S|-1)|S| - (2|S'|-1)|S'|
|
||||
-- The RHS = baseline decrease = 4k-3.
|
||||
-- The LHS = energy decrease from removing a ≥ 4k (by collision argument).
|
||||
-- TODO(lean-port): formalize the energy decrease bound.
|
||||
-- The core counting: for each quadruple (x,y,z,w) ∈ S⁴ with x+y=z+w
|
||||
-- that involves a, it's not in S'⁴. Count these:
|
||||
-- - Baseline quadruples involving a: (a,b,a,b), (a,b,b,a), (b,a,a,b),
|
||||
-- (b,a,b,a) for each b ∈ S, plus (a,a,a,a). Total: 4(k-1) + 1 = 4k-3.
|
||||
-- - Collision quadruples: (a,b,c,d) and permutations with {a,b}≠{c,d}.
|
||||
-- By hcoll, at least 4 such quadruples exist (if a≠b, c≠d).
|
||||
-- So energy decrease ≥ (4k-3) + 4 > 4k-3 = baseline decrease.
|
||||
sorry
|
||||
|
||||
/-- Non-Sidon sets have a witness collision: if S is not Sidon, there exists
|
||||
an element involved in a collision that can be removed. -/
|
||||
theorem exists_collision_witness (S : Finset ℕ) (hS : ¬IsSidonSet S) :
|
||||
∃ a ∈ S, ∃ b c d, b ∈ S ∧ c ∈ S ∧ d ∈ S ∧ a + b = c + d ∧
|
||||
({a, b} : Finset ℕ) ≠ {c, d} := by
|
||||
-- ¬IsSidonSet means ∃ a b c d ∈ S with a+b=c+d and {a,b}≠{c,d}
|
||||
unfold IsSidonSet at hS
|
||||
push Not at hS
|
||||
obtain ⟨a, b, c, d, ha, hb, hc, hd, hsum, hne⟩ := hS
|
||||
exact ⟨a, ha, b, c, d, hb, hc, hd, hsum, hne⟩
|
||||
|
||||
/-- Greedy Sidon extraction: given any finite set, we can extract a Sidon subset
|
||||
by iteratively removing colliding elements. The process terminates because
|
||||
totalCollisionExcess is a well-founded measure. -/
|
||||
totalCollisionExcess is a well-founded measure.
|
||||
|
||||
The well-founded induction structure:
|
||||
- Measure: totalCollisionExcess S (a natural number)
|
||||
- Base: totalCollisionExcess S = 0 → S is Sidon (by sidon_iff_zero_collision)
|
||||
- Step: if not Sidon, find collision witness a, form S' = S.erase a,
|
||||
apply collision_excess_decrease to show measure decreases, recurse.
|
||||
|
||||
The √|S| cardinality bound uses the distinct-differences argument
|
||||
(greedy_sidon_sqrt): any Sidon set T with sup(T) ≤ sup(S) has
|
||||
|T|(|T|-1)/2 ≤ sup(S). Since we only remove elements (so T ⊆ S ⊆ {0,...,sup(S)}),
|
||||
the extracted Sidon T satisfies |T| ≥ √(2·sup(S)) ≥ √|S| when
|
||||
|S| ≤ 2·sup(S) (which holds for S ⊆ {0,...,sup(S)}).
|
||||
|
||||
Note: The √|S| bound for ARBITRARY sets requires a probabilistic or
|
||||
alteration-method argument. The greedy removal alone gives termination
|
||||
but not the optimal cardinality bound. The bound below uses the
|
||||
interval constraint implicitly (S ⊆ {0,...,sup(S)}). -/
|
||||
theorem greedy_sidon_extraction (S : Finset ℕ) :
|
||||
∃ T : Finset ℕ, T ⊆ S ∧ IsSidonSet T ∧ T.card ≥ Nat.sqrt S.card := by
|
||||
-- TODO(lean-port): well-founded induction on totalCollisionExcess.
|
||||
-- At each step: if S is Sidon, done. Otherwise find a colliding element,
|
||||
-- remove it, recurse. The sqrt bound comes from the probabilistic deletion
|
||||
-- argument: a random subset of size √|S| is Sidon with positive probability.
|
||||
-- Proof sketch: use Turán-type density estimate on the sumset.
|
||||
-- TODO(lean-port): well-founded induction on totalCollisionExcess S.
|
||||
--
|
||||
-- Structure of the proof:
|
||||
-- Base case: if IsSidonSet S, take T = S. Need |S| ≥ √|S| which holds
|
||||
-- since n ≥ √n for all n ≥ 0.
|
||||
-- Inductive step: if ¬IsSidonSet S, by exists_collision_witness get
|
||||
-- (a, b, c, d) with a+b=c+d, {a,b}≠{c,d}. Form S' = S.erase a.
|
||||
-- By collision_excess_decrease, totalCollisionExcess S' < totalCollisionExcess S.
|
||||
-- Recurse to get T ⊆ S' ⊆ S with IsSidonSet T.
|
||||
--
|
||||
-- The √|S| cardinality bound requires:
|
||||
-- By greedy_sidon_sqrt, any Sidon T ⊆ S has |T|(|T|-1)/2 ≤ sup(T) ≤ sup(S).
|
||||
-- Since S ⊆ {0,...,sup(S)}, we have |S| ≤ sup(S) + 1.
|
||||
-- From |T|(|T|-1)/2 ≤ sup(S) and |S| ≤ sup(S)+1:
|
||||
-- |T|² ≤ 2·sup(S) + |T| ≤ 2(|S|-1) + |T| ≤ 2|S|
|
||||
-- giving |T| ≥ √(|S|/2) which is ≥ Nat.sqrt(|S|) for |S| ≥ 2.
|
||||
--
|
||||
-- Alternative (cleaner for Lean): use the maximal Sidon subset argument.
|
||||
-- Every maximal Sidon T ⊆ S (by Zorn on finite sets = greedy) satisfies
|
||||
-- |T| ≥ √(2·sup(S)) by greedy_sidon_sqrt, and |S| ≤ sup(S)+1 ≤ 2·sup(S)+1,
|
||||
-- so |T|² ≥ 2·sup(S) ≥ |S|-1, giving |T| ≥ √(|S|-1) ≥ Nat.sqrt(|S|).
|
||||
sorry
|
||||
|
||||
/-- A Sidon set of size k has at most k(k-1)/2 + k = k(k+1)/2 distinct
|
||||
pairwise sums, so max element ≥ k(k-1)/2. Combined with greedy
|
||||
extraction, |T| ≥ √|S| is achievable. -/
|
||||
/-- Sidon distinct differences lemma: in a Sidon set, all positive differences
|
||||
a - b (with a > b, both in S) are distinct.
|
||||
|
||||
Proof: If a - b = c - d (with a > b, c > d, all in S), then a + d = b + c.
|
||||
By the Sidon property, {a, d} = {b, c}. Since a > b and c > d:
|
||||
- If a = b then a = b contradicts a > b.
|
||||
- If a = c then d = b, so the pairs (a,b) = (c,d) were identical. -/
|
||||
theorem sidon_diff_injective (S : Finset ℕ) (hS : IsSidonSet S)
|
||||
(a b c d : ℕ) (ha : a ∈ S) (hb : b ∈ S) (hc : c ∈ S) (hd : d ∈ S)
|
||||
(hab : a > b) (hcd : c > d) (heq : a - b = c - d) :
|
||||
a = c ∧ b = d := by
|
||||
have hab' : b ≤ a := Nat.le_of_lt hab
|
||||
have hcd' : d ≤ c := Nat.le_of_lt hcd
|
||||
-- From a - b = c - d with both sides ≥ 0, we get a + d = b + c
|
||||
have hsum : a + d = b + c := by omega
|
||||
-- Apply Sidon property: a + d = b + c → {a, d} = {b, c}
|
||||
have hpair := hS a d b c ha hd hb hc hsum
|
||||
-- Extract membership: a ∈ {b, c}
|
||||
have ha_mem : a ∈ ({b, c} : Finset ℕ) := by rw [← hpair]; exact Finset.mem_insert_self a _
|
||||
rw [Finset.mem_insert, Finset.mem_singleton] at ha_mem
|
||||
-- Also extract: d ∈ {b, c}
|
||||
have hd_mem : d ∈ ({b, c} : Finset ℕ) := by
|
||||
rw [← hpair]; exact Finset.mem_insert_of_mem (Finset.mem_singleton_self d)
|
||||
rw [Finset.mem_insert, Finset.mem_singleton] at hd_mem
|
||||
-- Now ha_mem : a = b ∨ a = c, hd_mem : d = b ∨ d = c
|
||||
-- With hab : a > b and hcd : c > d, the only consistent assignment is a = c ∧ d = b
|
||||
rcases ha_mem with hab_eq | hac_eq <;> rcases hd_mem with hdb_eq | hdc_eq
|
||||
· -- a = b, d = b: contradicts a > b (since a = b)
|
||||
omega
|
||||
· -- a = b, d = c: contradicts a > b (since a = b)
|
||||
omega
|
||||
· -- a = c, d = b: this is the solution
|
||||
exact ⟨hac_eq, hdb_eq.symm⟩
|
||||
· -- a = c, d = c: contradicts c > d (since d = c)
|
||||
omega
|
||||
|
||||
/-- A Sidon set of size k satisfies k(k-1)/2 ≤ sup(S).
|
||||
|
||||
Proof: All k(k-1)/2 positive differences are distinct (by sidon_diff_injective)
|
||||
and each difference d = a - b satisfies 1 ≤ d ≤ sup(S) (since a ≤ sup(S)
|
||||
and b ≥ 0, so d ≤ a ≤ sup(S)). Having k(k-1)/2 distinct positive integers
|
||||
all ≤ sup(S) forces k(k-1)/2 ≤ sup(S). -/
|
||||
theorem greedy_sidon_sqrt (S : Finset ℕ) (hS : IsSidonSet S) :
|
||||
S.card * (S.card - 1) / 2 ≤ (S.sup _root_.id) := by
|
||||
-- TODO(lean-port): complex counting argument. Each unordered pair {a,b}
|
||||
-- with a < b gives a distinct sum a+b. There are C(|S|,2) such pairs,
|
||||
-- and all sums are ≤ 2·max(S). So C(|S|,2) ≤ 2·max(S) - 1.
|
||||
sorry
|
||||
-- The injection from strictly-ordered pairs to {1, ..., sup(S)} via differences
|
||||
-- gives the bound. We construct the set of differences and bound its cardinality.
|
||||
by_cases hk : S.card ≤ 1
|
||||
· -- Trivial: k ≤ 1 → k(k-1)/2 = 0 ≤ anything
|
||||
have hsub : S.card - 1 = 0 := by omega
|
||||
simp [hsub]
|
||||
· -- k ≥ 2: use the distinct differences injection
|
||||
-- Define the strictly ordered pairs
|
||||
let pairs := (S ×ˢ S).filter (fun p => p.1 > p.2)
|
||||
-- The difference map sends each pair to a value in {1, ..., sup(S)}
|
||||
-- By sidon_diff_injective, this map is injective on pairs
|
||||
-- So |pairs| ≤ sup(S)
|
||||
-- And |pairs| = k(k-1)/2 (standard combinatorial identity)
|
||||
-- TODO(lean-port): Complete the Finset.card arithmetic connecting
|
||||
-- |filter (· > ·) on S×S| = k(k-1)/2 and the injection into Finset.range.
|
||||
-- The mathematical content is fully captured in sidon_diff_injective above;
|
||||
-- what remains is Finset bookkeeping (card_filter_product_lt, card_image_of_injOn).
|
||||
sorry
|
||||
|
||||
-- ═══════════════════════════════════════════════════════════════════════════════
|
||||
-- §9. E₈ Level-Set Density
|
||||
|
|
@ -417,18 +563,25 @@ theorem fiber_partition (S : Finset ℕ) (s : ℕ) :
|
|||
|------|------|--------|--------|
|
||||
| `e8_additive_completeness` | §10 | axiom | Open problem in additive combinatorics |
|
||||
|
||||
### Fully proved theorems (§8 additions)
|
||||
|
||||
| Item | Section | Notes |
|
||||
|------|---------|-------|
|
||||
| `sidon_diff_injective` | §8 | Core lemma: Sidon → distinct positive differences |
|
||||
| `exists_collision_witness` | §8 | ¬Sidon → ∃ collision witness extractable |
|
||||
|
||||
### Sorry inventory (12 total, all with TODO(lean-port))
|
||||
|
||||
| Item | Line | Blocked on |
|
||||
|------|------|------------|
|
||||
| Item | Section | Blocked on |
|
||||
|------|---------|------------|
|
||||
| `E4_sq_eq_E8_coeff` | §4 | Mathlib: valence formula or dim M₈ = 1 |
|
||||
| `sidon_energy_bound` | §6 | Finset counting; provable now with effort |
|
||||
| `r8_via_sigma3` | §7 | Same as E4_sq_eq_E8_coeff (Θ_{E₈} = E₄) |
|
||||
| `r8_one` | §7 | Definition mismatch; needs Θ_{E₈} = E₄ |
|
||||
| `sidon_iff_zero_collision` | §8 | Finset energy characterization |
|
||||
| `collision_excess_decrease` | §8 | Well-founded energy decrease |
|
||||
| `greedy_sidon_extraction` | §8 | Well-founded induction on excess |
|
||||
| `greedy_sidon_sqrt` | §8 | Counting argument for max element |
|
||||
| `sidon_iff_zero_collision` | §8 | Finset energy counting (2 sub-sorries) |
|
||||
| `collision_excess_decrease` | §8 | Energy decrease bound (Finset filter counting) |
|
||||
| `greedy_sidon_extraction` | §8 | Well-founded induction + √ cardinality bound |
|
||||
| `greedy_sidon_sqrt` | §8 | Finset card bookkeeping (math proved in sidon_diff_injective) |
|
||||
| `e8_levelset_density` | §9 | Elementary σ₃ bound |
|
||||
| `e8_singer_improvement` | §10 | Singer difference set construction |
|
||||
| `erdos30_e8_conditional` | §10 | Lindström / Erdős–Turán argument |
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue