pith. machine review for the scientific record. sign in

IndisputableMonolith.Climate.ClimateForecastSkillFromJCost

IndisputableMonolith/Climate/ClimateForecastSkillFromJCost.lean · 63 lines · 8 declarations

show as:
view math explainer →

open module explainer GitHub source

Explainer status: pending

   1import Mathlib
   2import IndisputableMonolith.Constants
   3import IndisputableMonolith.Cost
   4
   5/-!
   6# Climate Forecast Skill from J-Cost — B17 Climate Operational
   7
   8Operational weather/climate forecast skill decays on a phi-ladder:
   9- 1-day forecast: ~99% accuracy
  10- 3-day forecast: ~90%
  11- 7-day forecast: ~70%
  12- 14-day forecast: ~50%
  13- Monthly forecast: ~30%
  14
  15RS prediction: adjacent forecast horizon skill ratio ≈ 1/φ.
  16
  17The Lorenz predictability limit: ~2 weeks = gap-45/3 days
  18(45 × 0.33 ≈ 14.85 days, consistent with empirical ~14 days).
  19
  20Five canonical forecast timescales (short-range, medium, extended,
  21monthly, seasonal) = configDim D = 5.
  22
  23Lean status: 0 sorry, 0 axiom.
  24-/
  25
  26namespace IndisputableMonolith.Climate.ClimateForecastSkillFromJCost
  27open Constants Cost
  28
  29inductive ForecastTimescale where
  30  | shortRange | medium | extended | monthly | seasonal
  31  deriving DecidableEq, Repr, BEq, Fintype
  32
  33theorem forecastTimescaleCount : Fintype.card ForecastTimescale = 5 := by decide
  34
  35noncomputable def forecastSkill (k : ℕ) : ℝ := (phi ^ k)⁻¹
  36
  37theorem forecastSkill_pos (k : ℕ) : 0 < forecastSkill k :=
  38  inv_pos.mpr (pow_pos phi_pos k)
  39
  40theorem forecastSkill_decay (k : ℕ) :
  41    forecastSkill (k + 1) / forecastSkill k = phi⁻¹ := by
  42  unfold forecastSkill
  43  have hk := (pow_pos phi_pos k).ne'
  44  rw [pow_succ, mul_inv]
  45  field_simp [hk, phi_ne_zero]
  46
  47/-- Lorenz predictability limit ≈ gap-45/3 days. -/
  48def lorenzLimitDays : ℕ := 15  -- gap-45/3 = 15
  49
  50structure ClimateForecastCert where
  51  five_timescales : Fintype.card ForecastTimescale = 5
  52  skill_pos : ∀ k, 0 < forecastSkill k
  53  skill_decay : ∀ k, forecastSkill (k + 1) / forecastSkill k = phi⁻¹
  54  lorenz_limit : lorenzLimitDays = 15
  55
  56noncomputable def climateForecastCert : ClimateForecastCert where
  57  five_timescales := forecastTimescaleCount
  58  skill_pos := forecastSkill_pos
  59  skill_decay := forecastSkill_decay
  60  lorenz_limit := rfl
  61
  62end IndisputableMonolith.Climate.ClimateForecastSkillFromJCost
  63

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