Pith. sign in

IndisputableMonolith.Gravity.Analysis.SpectralConvergence

IndisputableMonolith/Gravity/Analysis/SpectralConvergence.lean · 190 lines · 7 declarations

show as:
view math explainer →

open module explainer GitHub source

Explainer status: pending

   1import Mathlib
   2
   3/-!
   4# Spectral convergence toolkit: quantitative eigenvalue limits
   5
   6QG full-theory campaign, Phase 2a (reusable analysis toolkit).
   7
   8## Status: THEOREM (all results below are proved, axiom-clean; no sorry,
   9## no admit, no `: True` shells).
  10
  11## Lemmas and their campaign consumers
  12
  13* `eigenvalue_limit_of_uniform_bound`: a `C/N²` eventual bound on
  14  `|λ_N - Λ|` forces `λ_N → Λ`. Names the squeeze pattern that Phase 4
  15  (curved operator convergence) applies branch by branch.
  16* `sub_cube_le_sin` / `abs_sin_sub_le_cube`: the global cubic Taylor bound
  17  `|sin t - t| ≤ t³/6` for `t ≥ 0`, proved from
  18  `Real.one_sub_sq_div_two_le_cos` by a monotonicity argument. Mathlib's
  19  `Real.sin_bound` only covers `|t| ≤ 1`; this version has no smallness
  20  hypothesis, which the eigenvalue expansion below needs since `πk/N` is
  21  not small for large wavenumber `k`.
  22* `discrete_sine_eigenvalue_expansion`: the sharp quantitative version of
  23  the DiscreteLichnerowicz flat TT limit:
  24  `|4N² sin²(πk/N) - (2πk)²| ≤ ((2πk)⁴/12)/N²` for `N ≥ 1`. This upgrades
  25  the qualitative `Tendsto` of
  26  `IndisputableMonolith/Gravity/SevenGaps/DiscreteLichnerowicz.lean`
  27  (`discreteEigenvalue_tendsto`) to an explicit rate, which Phase 4 curved
  28  perturbation bounds consume.
  29* `discrete_sine_eigenvalue_tendsto`: the qualitative limit re-derived from
  30  the rate through `eigenvalue_limit_of_uniform_bound`, verifying that the
  31  two toolkit pieces compose.
  32* `spectrum_gap_persistence`: converging eigenvalue branches with distinct
  33  limits eventually separate. The tool Phase 4 uses to keep curved
  34  eigenvalue branches apart.
  35
  36## Downscope note
  37
  38The campaign brief listed a fourth target, `min_max_monotone_perturbation`
  39(Courant-Fischer transport of pointwise quadratic-form domination to
  40eigenvalue domination). Mathlib's `Matrix.IsHermitian` API (as vendored
  41here) provides eigenvalues via diagonalization but no min-max
  42characterization, so the transport is not cheap; it is recorded here as
  43future work rather than sunk time. Nothing below depends on it.
  44-/
  45
  46namespace IndisputableMonolith
  47namespace Gravity
  48namespace Analysis
  49
  50open Filter Topology
  51
  52/-- Helper: `C / N² → 0` as `N → ∞` over the naturals. -/
  53theorem const_div_sq_tendsto_zero (C : ℝ) :
  54    Filter.Tendsto (fun N : ℕ => C / (N : ℝ) ^ 2) Filter.atTop (nhds 0) := by
  55  have hpow : Filter.Tendsto (fun N : ℕ => ((N : ℝ)) ^ 2) Filter.atTop Filter.atTop := by
  56    have h1 : Filter.Tendsto (fun x : ℝ => x ^ 2) Filter.atTop Filter.atTop :=
  57      tendsto_pow_atTop two_ne_zero
  58    exact h1.comp tendsto_natCast_atTop_atTop
  59  exact tendsto_const_nhds.div_atTop hpow
  60
  61/-- THEOREM (squeeze with rate). If the discrete eigenvalues `lam N` satisfy
  62`|lam N - Λ| ≤ C/N²` for all `N ≥ N₀`, then `lam N → Λ`. Trivial, but it
  63names the pattern Phase 4 applies to every curved eigenvalue branch. -/
  64theorem eigenvalue_limit_of_uniform_bound (lam : ℕ → ℝ) (Λ C : ℝ) (N₀ : ℕ)
  65    (h : ∀ N : ℕ, N₀ ≤ N → |lam N - Λ| ≤ C / (N : ℝ) ^ 2) :
  66    Filter.Tendsto lam Filter.atTop (nhds Λ) := by
  67  rw [tendsto_iff_dist_tendsto_zero]
  68  refine squeeze_zero' (Filter.Eventually.of_forall fun N => dist_nonneg) ?_
  69    (const_div_sq_tendsto_zero C)
  70  filter_upwards [Filter.eventually_ge_atTop N₀] with N hN
  71  rw [Real.dist_eq]
  72  exact h N hN
  73
  74/-- THEOREM (global cubic sine lower bound). For `t ≥ 0`,
  75`t - t³/6 ≤ sin t`. Proof: `g(s) = sin s - s + s³/6` has derivative
  76`cos s - 1 + s²/2 ≥ 0` (by `Real.one_sub_sq_div_two_le_cos`), so `g` is
  77monotone and `g(t) ≥ g(0) = 0`. No smallness hypothesis on `t`. -/
  78theorem sub_cube_le_sin (t : ℝ) (ht : 0 ≤ t) :
  79    t - t ^ 3 / 6 ≤ Real.sin t := by
  80  have hderiv : ∀ s : ℝ,
  81      HasDerivAt (fun x : ℝ => Real.sin x - x + x ^ 3 / 6)
  82        (Real.cos s - 1 + (3 : ℝ) * s ^ 2 / 6) s := by
  83    intro s
  84    have hp : HasDerivAt (fun x : ℝ => x ^ 3) ((3 : ℝ) * s ^ 2) s := by
  85      have h := hasDerivAt_pow 3 s
  86      norm_num at h
  87      exact h
  88    exact ((Real.hasDerivAt_sin s).sub (hasDerivAt_id s)).add (hp.div_const 6)
  89  have hmono : Monotone (fun x : ℝ => Real.sin x - x + x ^ 3 / 6) := by
  90    refine monotone_of_hasDerivAt_nonneg hderiv ?_
  91    rw [Pi.le_def]
  92    intro s
  93    simp only [Pi.zero_apply]
  94    have hc := Real.one_sub_sq_div_two_le_cos (x := s)
  95    linarith
  96  have h0 : (fun x : ℝ => Real.sin x - x + x ^ 3 / 6) 0 = 0 := by
  97    simp
  98  have h := hmono ht
  99  rw [h0] at h
 100  simp only at h
 101  linarith
 102
 103/-- THEOREM (global cubic Taylor bound for sine). For `t ≥ 0`,
 104`|sin t - t| ≤ t³/6`. Combines `Real.sin_le` (upper) with
 105`sub_cube_le_sin` (lower). Unlike Mathlib's `Real.sin_bound`, no `|t| ≤ 1`
 106hypothesis is needed. -/
 107theorem abs_sin_sub_le_cube (t : ℝ) (ht : 0 ≤ t) :
 108    |Real.sin t - t| ≤ t ^ 3 / 6 := by
 109  have h1 : Real.sin t ≤ t := Real.sin_le ht
 110  have h2 : t - t ^ 3 / 6 ≤ Real.sin t := sub_cube_le_sin t ht
 111  have h3 : 0 ≤ t ^ 3 / 6 := by positivity
 112  rw [abs_le]
 113  constructor <;> linarith
 114
 115/-- THEOREM (quantitative flat TT eigenvalue expansion). For every
 116wavenumber `k` and lattice resolution `N ≥ 1`,
 117
 118`|4N² sin²(πk/N) - (2πk)²| ≤ ((2πk)⁴/12) / N²`.
 119
 120This is the sharp rate behind the qualitative limit
 121`DiscreteLichnerowicz.discreteEigenvalue_tendsto`. Derivation: with
 122`x = πk/N` we have `(2πk)² = 4N²x²`, so the error factors as
 123`4N² (sin x - x)(sin x + x)`; then `|sin x - x| ≤ x³/6`
 124(`abs_sin_sub_le_cube`) and `|sin x + x| ≤ 2x` give the bound
 125`(4/3) N² x⁴ = ((2πk)⁴/12)/N²`. Phase 4 curved perturbation bounds consume
 126this explicit constant `C(k) = (2πk)⁴/12`. -/
 127theorem discrete_sine_eigenvalue_expansion (k N : ℕ) (hN : 1 ≤ N) :
 128    |4 * (N : ℝ) ^ 2 * Real.sin (Real.pi * (k : ℝ) / (N : ℝ)) ^ 2
 129        - (2 * Real.pi * (k : ℝ)) ^ 2|
 130      ≤ (2 * Real.pi * (k : ℝ)) ^ 4 / 12 / (N : ℝ) ^ 2 := by
 131  have hNpos : (0 : ℝ) < (N : ℝ) := by exact_mod_cast hN
 132  have hN0 : (N : ℝ) ≠ 0 := ne_of_gt hNpos
 133  set x : ℝ := Real.pi * (k : ℝ) / (N : ℝ) with hxdef
 134  have hx0 : 0 ≤ x := by
 135    rw [hxdef]
 136    exact div_nonneg (mul_nonneg Real.pi_pos.le (Nat.cast_nonneg k)) hNpos.le
 137  have hkey : (2 * Real.pi * (k : ℝ)) ^ 2 = 4 * (N : ℝ) ^ 2 * x ^ 2 := by
 138    rw [hxdef]
 139    field_simp
 140    ring
 141  have hfac : 4 * (N : ℝ) ^ 2 * Real.sin x ^ 2 - (2 * Real.pi * (k : ℝ)) ^ 2
 142      = (4 * (N : ℝ) ^ 2) * ((Real.sin x - x) * (Real.sin x + x)) := by
 143    rw [hkey]
 144    ring
 145  have h4N : |4 * (N : ℝ) ^ 2| = 4 * (N : ℝ) ^ 2 := abs_of_nonneg (by positivity)
 146  have hbound1 : |Real.sin x - x| ≤ x ^ 3 / 6 := abs_sin_sub_le_cube x hx0
 147  have hbound2 : |Real.sin x + x| ≤ 2 * x := by
 148    calc |Real.sin x + x| ≤ |Real.sin x| + |x| := abs_add_le _ _
 149      _ ≤ |x| + |x| := by
 150          have := Real.abs_sin_le_abs (x := x)
 151          linarith
 152      _ = 2 * x := by rw [abs_of_nonneg hx0]; ring
 153  calc |4 * (N : ℝ) ^ 2 * Real.sin x ^ 2 - (2 * Real.pi * (k : ℝ)) ^ 2|
 154      = (4 * (N : ℝ) ^ 2) * (|Real.sin x - x| * |Real.sin x + x|) := by
 155        rw [hfac, abs_mul, h4N, abs_mul]
 156    _ ≤ (4 * (N : ℝ) ^ 2) * (x ^ 3 / 6 * (2 * x)) := by
 157        refine mul_le_mul_of_nonneg_left ?_ (by positivity)
 158        exact mul_le_mul hbound1 hbound2 (abs_nonneg _) (by positivity)
 159    _ = (2 * Real.pi * (k : ℝ)) ^ 4 / 12 / (N : ℝ) ^ 2 := by
 160        rw [hxdef]
 161        field_simp
 162        ring
 163
 164/-- THEOREM (rated limit, composing the toolkit). The flat discrete TT
 165eigenvalue `4N² sin²(πk/N)` converges to `(2πk)²`, obtained by feeding the
 166quantitative expansion into `eigenvalue_limit_of_uniform_bound` with
 167`C = (2πk)⁴/12`. Re-derives
 168`DiscreteLichnerowicz.discreteEigenvalue_tendsto` with an explicit rate. -/
 169theorem discrete_sine_eigenvalue_tendsto (k : ℕ) :
 170    Filter.Tendsto
 171      (fun N : ℕ => 4 * (N : ℝ) ^ 2 * Real.sin (Real.pi * (k : ℝ) / (N : ℝ)) ^ 2)
 172      Filter.atTop (nhds ((2 * Real.pi * (k : ℝ)) ^ 2)) :=
 173  eigenvalue_limit_of_uniform_bound _ _ ((2 * Real.pi * (k : ℝ)) ^ 4 / 12) 1
 174    (fun N hN => discrete_sine_eigenvalue_expansion k N hN)
 175
 176/-- THEOREM (gap persistence). If two eigenvalue branches converge to
 177distinct limits `Λ < Μ`, then eventually `lam N < mu N`: spectral gaps
 178survive discretization for large `N`. The tool Phase 4 uses to separate
 179curved eigenvalue branches. -/
 180theorem spectrum_gap_persistence (lam mu : ℕ → ℝ) (Λ Μ : ℝ)
 181    (hlam : Filter.Tendsto lam Filter.atTop (nhds Λ))
 182    (hmu : Filter.Tendsto mu Filter.atTop (nhds Μ))
 183    (hlt : Λ < Μ) :
 184    ∀ᶠ N : ℕ in Filter.atTop, lam N < mu N :=
 185  hlam.eventually_lt hmu hlt
 186
 187end Analysis
 188end Gravity
 189end IndisputableMonolith
 190

source mirrored from github.com/jonwashburn/shape-of-logic