mirror of
https://github.com/allaunthefox/SilverSight.git
synced 2026-07-31 01:25:21 +00:00
Snapshot of previously-uncommitted local work so nothing is lost after the power outage. NOT reviewed for correctness — a WIP checkpoint, not a feature: - multi-language hachimoji encoders (c/cpp/fortran/julia/octave/r/scala/go/rust/coq) - formal Lean WIP (BraidTree, Eisenstein, HachimojiCapture, MathlibConnect, ModularFormBridge, ClusterManifold) + lakefile + E8Sidon edit - docs/, experiments/ (epyc oisc benches), deploy/, scripts, test scaffolding - .gitignore: exclude **/target/ and Coq build artifacts Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
76 lines
3.5 KiB
Text
76 lines
3.5 KiB
Text
/-
|
||
Copyright (c) 2026 SilverSight Contributors. All rights reserved.
|
||
|
||
MathlibConnect.lean — Connects our Eisenstein series to Mathlib's modular forms library.
|
||
|
||
Mathlib already defines:
|
||
• Normalized Eisenstein series `E k : ModularForm Γ(1) k` for even k ≥ 3
|
||
(EisensteinSeries/Basic.lean)
|
||
• Their q-expansion coefficients: coeff₀ = 1, coeffₘ = -(2k/Bₖ)·σ_{k-1}(m)
|
||
(EisensteinSeries/QExpansion.lean)
|
||
|
||
For k = 4: -(2·4 / B₄) = -(8 / (-1/30)) = 240 → E 4 = 1 + 240 Σ σ₃(n) qⁿ = our E4
|
||
For k = 8: -(2·8 / B₈) = -(16 / (-1/30)) = 480 → E 8 = 1 + 480 Σ σ₇(n) qⁿ = our E8
|
||
|
||
The missing piece is the dimension formula dim M₈(Γ(1)) = 1
|
||
(TODO in Mathlib/NumberTheory/ModularForms/LevelOne.lean).
|
||
Once that is available, E₄² = E₈ follows from:
|
||
1. E₄ ∈ M₄, E₈ ∈ M₈ (via Eisenstein series)
|
||
2. E₄² ∈ M₈ (ring structure)
|
||
3. dim M₈ = 1 → E₄² = λ·E₈
|
||
4. Constant term: 1 = λ·1 → λ = 1 → E₄² = E₈
|
||
5. q-expansion coefficients: σ₇ = σ₃ + 120·(σ₃∗σ₃)
|
||
-/
|
||
|
||
import Mathlib
|
||
import CoreFormalism.Eisenstein
|
||
|
||
open SilverSight.Eisenstein
|
||
|
||
namespace SilverSight.MathlibConnect
|
||
|
||
set_option linter.unusedVariables false
|
||
|
||
-- ============================================================================
|
||
-- §1 Bernoulli normalization constants
|
||
-- ============================================================================
|
||
|
||
/-- -(2·4 / B₄) = 240 (in ℂ). -/
|
||
theorem E4_normalization : -(2 * (4 : ℂ) / ((bernoulli 4 : ℚ) : ℂ)) = (240 : ℂ) := by
|
||
have hB4 : (bernoulli 4 : ℚ) = -1/30 := by native_decide
|
||
rw [hB4]; norm_num
|
||
|
||
/-- -(2·8 / B₈) = 480 (in ℂ). -/
|
||
theorem E8_normalization : -(2 * (8 : ℂ) / ((bernoulli 8 : ℚ) : ℂ)) = (480 : ℂ) := by
|
||
have hB8 : (bernoulli 8 : ℚ) = -1/30 := by native_decide
|
||
rw [hB8]; norm_num
|
||
|
||
-- ============================================================================
|
||
-- §2 Connecting to Mathlib's normalized Eisenstein series
|
||
-- ============================================================================
|
||
|
||
/-- Mathlib's `E hk` (normalized Eisenstein series of weight k) has q-expansion
|
||
coefficients matching our formal E4/E8 QExpansions.
|
||
|
||
See EisensteinSeries.QExpansion.lean, lemma E_qExpansion_coeff:
|
||
(qExpansion 1 (E hk)).coeff m = if m = 0 then 1 else -(2k/B_k) · σ_{k-1}(m)
|
||
|
||
This is used below for k=4 and k=8. The proof uses native_decide for the
|
||
Bernoulli constant and the divisor sum functions already defined in Mathlib. -/
|
||
theorem E4_qExpansion_matches (n : ℕ) : (ModularFormClass.qExpansion 1 (ModularForm.E (by decide : 3 ≤ 4))).coeff n = ((E4 n : ℚ) : ℂ) := by
|
||
have hk4 : 3 ≤ (4 : ℕ) := by decide
|
||
have hk4_even : Even (4 : ℕ) := by decide
|
||
rcases n with (rfl | n)
|
||
· simpa [E4] using EisensteinSeries.E_qExpansion_coeff_zero hk4 hk4_even
|
||
· have hcoeff := EisensteinSeries.E_qExpansion_coeff hk4 hk4_even (n+1)
|
||
simpa [E4, E4_normalization, ArithmeticFunction.sigma_apply, sigma, sigma3, Nat.succ_eq_add_one] using hcoeff
|
||
|
||
theorem E8_qExpansion_matches (n : ℕ) : (ModularFormClass.qExpansion 1 (ModularForm.E (by decide : 3 ≤ 8))).coeff n = ((E8 n : ℚ) : ℂ) := by
|
||
have hk8 : 3 ≤ (8 : ℕ) := by decide
|
||
have hk8_even : Even (8 : ℕ) := by decide
|
||
rcases n with (rfl | n)
|
||
· simpa [E8] using EisensteinSeries.E_qExpansion_coeff_zero hk8 hk8_even
|
||
· have hcoeff := EisensteinSeries.E_qExpansion_coeff hk8 hk8_even (n+1)
|
||
simpa [E8, E8_normalization, ArithmeticFunction.sigma_apply, sigma, sigma7, Nat.succ_eq_add_one] using hcoeff
|
||
|
||
end SilverSight.MathlibConnect
|