SilverSight/formal/CoreFormalism/E8Sidon.lean
allaun f1a050277b feat(slos): eigenvalue products predict SLOS concentration ordering - verified with Spearman correlation, cross-validated with exact tensor network
48 test points across K=1..4 and 12 label sets (Sidon power sets,
Sidon constructions, dense non-Sidon, prime-based).

Results:
  K=1: ρ=-0.85 (products→SLOS), ρ=-0.94 (SLOS↔tensor)
  K=2: ρ=-0.88 (products→SLOS), ρ=-0.94 (SLOS↔tensor)
  K=3: ρ=-0.93 (products→SLOS), ρ=-0.98 (SLOS↔tensor)
  K=4: ρ=-0.93 (products→SLOS), tensor N/A (K>3)

Key: all Spearman correlations are negative and strengthen with K.
Sidon sets produce 1.5-2.3× higher KL divergence than same-size non-Sidon.
Primes are intermediate: partially Sidon-like but weaker.

DAG: 192 nodes, 96 edges, all individually checkpointed for resume.
Resume with: python3 scripts/perceval_slos_verify.py --resume

Receipt: docs/research/SLOS_SIDON_VERIFICATION_RECEIPT.md

Build: N/A (Python/perceval verification, no Lean build)
2026-07-03 17:55:26 -05:00

215 lines
9.5 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/- 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