/- Copyright (c) 2026 SilverSight Contributors. All rights reserved. E₈ Sidon Prototype — Erdős Problem 30 connection Port of critical theorems from Research Stack `Semantics.E8Sidon`. Erdős Problem 30 (https://www.erdosproblems.com/30, $1000 prize): Is h(N) = N^{1/2} + O_ε(N^ε) for every ε > 0? where h(N) = maximum size of a Sidon set in {1,...,N}. Current bounds: Upper: h(N) ≤ N^{1/2} + 0.98183·N^{1/4} + O(1) [Carter-Hunter-O'Bryant 2025] Lower: h(N) ≥ (1-o(1))·N^{1/2} [Singer 1938] What this module provides: - The power-of-2 labels {1,2,4,8,16,32,64,128} are Sidon (binary uniqueness). This is a specific Sidon set of size 8 in {1,...,128}, giving h(128) ≥ 8. This is WEAKER than Singer's construction (which gives ~√N for all N). - The E₈ convolution identity σ₇ = σ₃ + 120·Σ σ₃(j)·σ₃(n-j) (E₄² = E₈). This connects divisor sums to the E₈ root system but does NOT directly improve the Erdős 30 bounds. What was abandoned (SORRY PROTOCOL Option C): - The claim "E₈ level sets are Sidon for N ≤ 200" was DISPROVEN. E8LevelSet 32 = {1,2,3} is NOT Sidon: 1+3 = 2+2 = 4. See levelset_32_NOT_sidon below. What the pipeline may contribute (future work, not proven): The DNA encoder can compress Sidon set candidates into hachimoji DNA and use thermodynamic energy descent (PCR/hybridization filtering) to search for large Sidon sets in {1,...,N}. This is the NP-hard boss target — not a proof, but a computational search tool. The formal verification stack ensures the encoding is faithful (exact arithmetic, injective mapping, no float artifacts). -/ import Mathlib open Finset open Nat namespace SilverSight.E8Sidon -- ── E₈ constants ─────────────────────────────────────────────────── def e8RootCount : Nat := 240 def e8PositiveRoots : Nat := 120 def e8DualCoxeter : Nat := 30 -- ── Divisor sums (σₖ) ─────────────────────────────────────────────── def sigma (k n : Nat) : Nat := ∑ d ∈ divisors n, d ^ k def sigma3 (n : Nat) : Nat := sigma 3 n def sigma7 (n : Nat) : Nat := sigma 7 n lemma sigma3_one : sigma3 1 = 1 := by simp [sigma3, sigma, divisors_one] lemma sigma3_mono {a b : Nat} (h : a ∣ b) (hb : b ≠ 0) : sigma3 a ≤ sigma3 b := by have h_div : (Nat.divisors a) ⊆ (Nat.divisors b) := by intro d hd rcases Nat.mem_divisors.mp hd with ⟨hd_div, ha'⟩ exact Nat.mem_divisors.mpr ⟨Nat.dvd_trans hd_div h, hb⟩ exact Finset.sum_le_sum_of_subset h_div lemma sigma3_multiplicative {a b : Nat} (ha : a ≠ 0) (hb : b ≠ 0) (hcop : a.Coprime b) : sigma3 (a * b) = sigma3 a * sigma3 b := by unfold sigma3 -- Mathlib provides IsMultiplicative for sigma via zeta * pow exact isMultiplicative_sigma.map_mul_of_coprime hcop -- ── Sidon sets ────────────────────────────────────────────────────── def IsSidon (A : Finset ℕ) : Prop := ∀ a ∈ A, ∀ b ∈ A, ∀ c ∈ A, ∀ d ∈ A, a + b = c + d → (a = c ∧ b = d) ∨ (a = d ∧ b = c) /-- Sidon iff every sum has at most 2 ordered representations (a,b) and (b,a). -/ lemma sidon_iff_unique_sum (A : Finset ℕ) : IsSidon A ↔ ∀ a ∈ A, ∀ b ∈ A, ∀ c ∈ A, ∀ d ∈ A, a + b = c + d → (a, b) = (c, d) ∨ (a, b) = (d, c) := by unfold IsSidon refine ⟨fun hsid a ha b hb c hc d hd heq => ?_, fun hcoll a ha b hb c hc d hd heq => ?_⟩ · exact hsid a ha b hb c hc d hd heq · exact hcoll a ha b hb c hc d hd heq -- ── E₈ level sets ────────────────────────────────────────────────── def E8LevelSet (N : Nat) : Finset ℕ := Finset.filter (λ n => sigma3 n ≤ N) (Finset.range (N + 1)) lemma e8_levelset_nonempty (N : Nat) (hN : 1 ≤ N) : E8LevelSet N ≠ ∅ := by have h1 : sigma3 1 = 1 := sigma3_one have h_pos : 0 < N := by linarith have h1in : 1 ∈ Finset.filter (λ n => sigma3 n ≤ N) (Finset.range (N + 1)) := by simp [h1, hN, h_pos] exact Finset.nonempty_iff_ne_empty.mp ⟨1, h1in⟩ -- ── Computational verification (n ≤ 16, kernel-verifiable) ─────────── def sigma3Tab : List Nat := [0, 1, 9, 28, 73, 126, 252, 344, 585, 757, 1134, 1332, 2044, 2198, 3096, 3528, 4681] def sigma7Tab : List Nat := [0, 1, 129, 2188, 16513, 78126, 282252, 823544, 2113665, 4785157, 10078254, 19487172, 36130444, 62748518, 106237176, 170939688, 270549121] /-- The E_8 convolution identity for n <= 16. Proof: table values are trusted data (computed externally). Each n=2..16 case: dec_trivial on concrete Nat arithmetic with sigma expanded via unfold — 15 kernel reduction steps, no native_decide. HONESTY CLASS: CITED (E4^2 = E8). -/ theorem e8_conv_identity_16 (n : Nat) (hn : n <= 16) : sigma7 n = sigma3 n + 120 * (∑ j in Finset.Icc 1 (n - 1), sigma3 j * sigma3 (n - j)) := by have hn_lt : n < 17 := by omega interval_cases n · simp [sigma3, sigma7, sigma] · simp [sigma3, sigma7, sigma] · unfold sigma3 sigma7 sigma; decide · unfold sigma3 sigma7 sigma; decide · unfold sigma3 sigma7 sigma; decide · unfold sigma3 sigma7 sigma; decide · unfold sigma3 sigma7 sigma; decide · unfold sigma3 sigma7 sigma; decide · unfold sigma3 sigma7 sigma; decide · unfold sigma3 sigma7 sigma; decide · unfold sigma3 sigma7 sigma; decide · unfold sigma3 sigma7 sigma; decide · unfold sigma3 sigma7 sigma; decide · unfold sigma3 sigma7 sigma; decide · unfold sigma3 sigma7 sigma; decide · unfold sigma3 sigma7 sigma; decide · unfold sigma3 sigma7 sigma; decide /-- The E₈ convolution identity for all n ∈ ℕ. σ₇(n) = σ₃(n) + 120·∑_{j=1}^{n-1} σ₃(j)·σ₃(n-j). This is the coefficient-extraction form of E₄² = E₈. HONESTY CLASS: CITED JUSTIFICATION: Koblitz Ch. III §2, Serre Ch. VII §3.3 BLOCKED ON: Eisenstein series formalization in Mathlib -/ theorem e8_convolution_identity (n : ℕ) : sigma7 n = sigma3 n + 120 * (∑ j ∈ Finset.Icc 1 (n - 1), sigma3 j * sigma3 (n - j)) := by sorry -- CITED: needs Eisenstein series API -- ── Critical theorem: level sets are Sidon ────────────────────────── /-- DISPROVEN: E8LevelSet 32 is NOT Sidon (1+3 = 2+2 = 4). See levelset_32_NOT_sidon below for the computational proof. The original claim that E8 level sets are Sidon for N ≤ 200 is FALSE. Per SORRY PROTOCOL Option C (abandon path): the statement is false, the path is marked UNPROVEN, do not cite this result. The E₈ level set Sidon property holds only for very small N (≤ 16, where the set has ≤ 2 elements). It breaks at N=32 where the set {1,2,3} admits the collision 1+3 = 2+2. This does NOT affect the braid topology or the encoder — the Sidon property used there is on the power-of-2 labels {1,2,4,8,16,32,64,128}, which IS Sidon (proven by binary uniqueness in HachimojiN8.lean). -/ -- theorem e8_levelset_sidon : REMOVED (disproven, see levelset_32_NOT_sidon) theorem e8_levelset_sidon_max_N : ∀ N, 1 ≤ N → N ≤ 16 → IsSidon (E8LevelSet N) := by intro N hN hN16 unfold E8LevelSet IsSidon decide /-- The Erdős 30 improvement via E₈ level sets is BLOCKED: the key lemma (e8_levelset_sidon for all N) is disproven for N ≥ 32. The Sidon property on power-of-2 labels {1,2,4,8,16,32,64,128} (proven in HachimojiN8.lean) is independent of the E₈ level set Sidon property. The braid encoder uses power-of-2 Sidon labels, not σ₃-bounded level sets. This theorem is kept as a documentation marker: the E₈ → Erdős 30 path is abandoned per SORRY PROTOCOL Option C. -/ theorem erdos30_e8_blocked (N : Nat) (hN : N = 32) : ¬ IsSidon (E8LevelSet N) := by subst hN exact levelset_32_NOT_sidon -- ── Phase 2: computational witnesses ────────────────────────────── -- σ₃ values for n=1..16 for computational verification. -- #eval List.range 16 |>.map (λ n => (n+1, sigma3 (n+1))) -- Verify that E8LevelSet 64 contains the expected σ₃-bounded numbers. -- #eval (E8LevelSet 64).card -- Exhaustive witness: verify σ₇(n) = σ₃(n) + 120·Σ σ₃(j)·σ₃(n-j) -- for all n = 0..200. Returns a list of violating n (should be []). -- #eval (List.range 201).filter (λ n => -- let rhs := sigma3 n + 120 * ((List.range n).map (λ j => sigma3 j * sigma3 (n - j))).sum -- sigma7 n ≠ rhs) /-- E8LevelSet 8 = {1} is trivially Sidon (1 element, no pairs to collide). -/ theorem levelset_8_is_sidon : IsSidon (E8LevelSet 8) := by unfold E8LevelSet IsSidon decide /-- E8LevelSet 16 = {1, 2} has all sums distinct (1+1=2, 1+2=3, 2+2=4). -/ theorem levelset_16_is_sidon : IsSidon (E8LevelSet 16) := by unfold E8LevelSet IsSidon decide /-- E8LevelSet 32 = {1, 2, 3} is NOT Sidon: 1+3 = 2+2 = 4. This is the first violation — the Sidon property breaks at N=32. -/ theorem levelset_32_NOT_sidon : ¬ IsSidon (E8LevelSet 32) := by unfold E8LevelSet IsSidon decide /-- E8LevelSet 64 = {1, 2, 3} is also NOT Sidon (same set as N=32, same violation). -/ theorem levelset_64_NOT_sidon : ¬ IsSidon (E8LevelSet 64) := by unfold E8LevelSet IsSidon decide end SilverSight.E8Sidon