pith. sign in

IndisputableMonolith.Numerics.Interval.AlphaBounds

IndisputableMonolith/Numerics/Interval/AlphaBounds.lean · 369 lines · 31 declarations

show as:
view math explainer →

open module explainer GitHub source

Explainer status: ready · generated 2026-06-09 12:41:08.631878+00:00

   1-- import IndisputableMonolith.Numerics.Interval.Basic  -- [not in public release]
   2-- import IndisputableMonolith.Numerics.Interval.PiBounds  -- [not in public release]
   3-- import IndisputableMonolith.Numerics.Interval.Log  -- [not in public release]
   4import IndisputableMonolith.Numerics.Interval.W8Bounds
   5import IndisputableMonolith.Constants.Alpha
   6
   7/-!
   8# Rigorous Bounds on α⁻¹ (Inverse Fine-Structure Constant)
   9
  10This module provides interval bounds on alphaInv using the symbolic derivation.
  11-/
  12
  13namespace IndisputableMonolith.Numerics
  14
  15open Interval
  16open Real (pi log)
  17open IndisputableMonolith.Constants (alphaInv alpha_seed f_gap w8_from_eight_tick)
  18
  19/-- alpha_seed = 4π·11 > 138.230048 -/
  20theorem alpha_seed_gt : (138.230048 : ℝ) < alpha_seed := by
  21  simp only [alpha_seed]
  22  have h := Real.pi_gt_d6
  23  linarith
  24
  25/-- alpha_seed = 4π·11 < 138.230092 -/
  26theorem alpha_seed_lt : alpha_seed < (138.230092 : ℝ) := by
  27  simp only [alpha_seed]
  28  have h := Real.pi_lt_d6
  29  linarith
  30
  31/-! ## f_gap bounds -/
  32
  33private def exp_taylor_10_at_048 : ℚ :=
  34  let x : ℚ := (48 : ℚ) / 100
  35  1 + x + x^2/2 + x^3/6 + x^4/24 + x^5/120 + x^6/720 + x^7/5040 + x^8/40320 + x^9/362880
  36
  37private def exp_error_10_at_048 : ℚ :=
  38  let x : ℚ := (48 : ℚ) / 100
  39  x^10 * 11 / (Nat.factorial 10 * 10)
  40
  41private lemma exp_048_taylor_ceiling :
  42    exp_taylor_10_at_048 + exp_error_10_at_048 < (16161 / 10000 : ℚ) := by
  43  native_decide
  44
  45private lemma exp_048_lt : Real.exp (0.48 : ℝ) < (((16161 / 10000 : ℚ) : ℝ)) := by
  46  have hx_abs : |(0.48 : ℝ)| ≤ 1 := by norm_num
  47  have h_bound := Real.exp_bound hx_abs (n := 10) (by norm_num : 0 < 10)
  48  have h_abs := abs_sub_le_iff.mp h_bound
  49  have h_taylor_eq :
  50      (∑ m ∈ Finset.range 10, (0.48 : ℝ)^m / m.factorial) =
  51        (exp_taylor_10_at_048 : ℝ) := by
  52    simp only [exp_taylor_10_at_048, Finset.sum_range_succ, Finset.sum_range_zero, Nat.factorial]
  53    norm_num
  54  have h_err_eq :
  55      |(0.48 : ℝ)|^10 * ((Nat.succ 10 : ℕ) / ((Nat.factorial 10 : ℕ) * 10)) =
  56        (exp_error_10_at_048 : ℝ) := by
  57    simp only [exp_error_10_at_048, Nat.factorial, Nat.succ_eq_add_one]
  58    norm_num
  59  have h_upper_raw :
  60      Real.exp (0.48 : ℝ) ≤
  61        |(0.48 : ℝ)|^10 * ((Nat.succ 10 : ℕ) / ((Nat.factorial 10 : ℕ) * 10)) +
  62          (exp_taylor_10_at_048 : ℝ) := by
  63    simpa [h_taylor_eq, add_comm, add_left_comm, add_assoc] using h_abs.1
  64  have h_upper :
  65      Real.exp (0.48 : ℝ) ≤ (exp_taylor_10_at_048 : ℝ) + (exp_error_10_at_048 : ℝ) := by
  66    calc
  67      Real.exp (0.48 : ℝ)
  68          ≤ |(0.48 : ℝ)|^10 * ((Nat.succ 10 : ℕ) / ((Nat.factorial 10 : ℕ) * 10)) +
  69              (exp_taylor_10_at_048 : ℝ) := h_upper_raw
  70      _ = (exp_error_10_at_048 : ℝ) + (exp_taylor_10_at_048 : ℝ) := by rw [h_err_eq]
  71      _ = (exp_taylor_10_at_048 : ℝ) + (exp_error_10_at_048 : ℝ) := by ring
  72  have h_num :
  73      (exp_taylor_10_at_048 : ℝ) + (exp_error_10_at_048 : ℝ) <
  74        (((16161 / 10000 : ℚ) : ℝ)) := by
  75    exact_mod_cast exp_048_taylor_ceiling
  76  exact lt_of_le_of_lt h_upper h_num
  77
  78private def exp_taylor_10_at_0481 : ℚ :=
  79  let x : ℚ := (481 : ℚ) / 1000
  80  1 + x + x^2/2 + x^3/6 + x^4/24 + x^5/120 + x^6/720 + x^7/5040 + x^8/40320 + x^9/362880
  81
  82private def exp_error_10_at_0481 : ℚ :=
  83  let x : ℚ := (481 : ℚ) / 1000
  84  x^10 * 11 / (Nat.factorial 10 * 10)
  85
  86private lemma exp_0481_taylor_ceiling :
  87    exp_taylor_10_at_0481 + exp_error_10_at_0481 < (16177 / 10000 : ℚ) := by
  88  native_decide
  89
  90private lemma exp_0481_lt : Real.exp (0.481 : ℝ) < (((16177 / 10000 : ℚ) : ℝ)) := by
  91  have hx_abs : |(0.481 : ℝ)| ≤ 1 := by norm_num
  92  have h_bound := Real.exp_bound hx_abs (n := 10) (by norm_num : 0 < 10)
  93  have h_abs := abs_sub_le_iff.mp h_bound
  94  have h_taylor_eq :
  95      (∑ m ∈ Finset.range 10, (0.481 : ℝ)^m / m.factorial) =
  96        (exp_taylor_10_at_0481 : ℝ) := by
  97    simp only [exp_taylor_10_at_0481, Finset.sum_range_succ, Finset.sum_range_zero, Nat.factorial]
  98    norm_num
  99  have h_err_eq :
 100      |(0.481 : ℝ)|^10 * ((Nat.succ 10 : ℕ) / ((Nat.factorial 10 : ℕ) * 10)) =
 101        (exp_error_10_at_0481 : ℝ) := by
 102    simp only [exp_error_10_at_0481, Nat.factorial, Nat.succ_eq_add_one]
 103    norm_num
 104  have h_upper_raw :
 105      Real.exp (0.481 : ℝ) ≤
 106        |(0.481 : ℝ)|^10 * ((Nat.succ 10 : ℕ) / ((Nat.factorial 10 : ℕ) * 10)) +
 107          (exp_taylor_10_at_0481 : ℝ) := by
 108    simpa [h_taylor_eq, add_comm, add_left_comm, add_assoc] using h_abs.1
 109  have h_upper :
 110      Real.exp (0.481 : ℝ) ≤ (exp_taylor_10_at_0481 : ℝ) + (exp_error_10_at_0481 : ℝ) := by
 111    calc
 112      Real.exp (0.481 : ℝ)
 113          ≤ |(0.481 : ℝ)|^10 * ((Nat.succ 10 : ℕ) / ((Nat.factorial 10 : ℕ) * 10)) +
 114              (exp_taylor_10_at_0481 : ℝ) := h_upper_raw
 115      _ = (exp_error_10_at_0481 : ℝ) + (exp_taylor_10_at_0481 : ℝ) := by rw [h_err_eq]
 116      _ = (exp_taylor_10_at_0481 : ℝ) + (exp_error_10_at_0481 : ℝ) := by ring
 117  have h_num :
 118      (exp_taylor_10_at_0481 : ℝ) + (exp_error_10_at_0481 : ℝ) <
 119        (((16177 / 10000 : ℚ) : ℝ)) := by
 120    exact_mod_cast exp_0481_taylor_ceiling
 121  exact lt_of_le_of_lt h_upper h_num
 122
 123private def exp_taylor_10_at_0483 : ℚ :=
 124  let x : ℚ := (483 : ℚ) / 1000
 125  1 + x + x^2/2 + x^3/6 + x^4/24 + x^5/120 + x^6/720 + x^7/5040 + x^8/40320 + x^9/362880
 126
 127private def exp_error_10_at_0483 : ℚ :=
 128  let x : ℚ := (483 : ℚ) / 1000
 129  x^10 * 11 / (Nat.factorial 10 * 10)
 130
 131private lemma exp_0483_taylor_floor :
 132    (16209 / 10000 : ℚ) < exp_taylor_10_at_0483 - exp_error_10_at_0483 := by
 133  native_decide
 134
 135private lemma exp_0483_gt : (((16209 / 10000 : ℚ) : ℝ)) < Real.exp (0.483 : ℝ) := by
 136  have hx_abs : |(0.483 : ℝ)| ≤ 1 := by norm_num
 137  have h_bound := Real.exp_bound hx_abs (n := 10) (by norm_num : 0 < 10)
 138  have h_abs := abs_sub_le_iff.mp h_bound
 139  have h_taylor_eq :
 140      (∑ m ∈ Finset.range 10, (0.483 : ℝ)^m / m.factorial) =
 141        (exp_taylor_10_at_0483 : ℝ) := by
 142    simp only [exp_taylor_10_at_0483, Finset.sum_range_succ, Finset.sum_range_zero, Nat.factorial]
 143    norm_num
 144  have h_err_eq :
 145      |(0.483 : ℝ)|^10 * ((Nat.succ 10 : ℕ) / ((Nat.factorial 10 : ℕ) * 10)) =
 146        (exp_error_10_at_0483 : ℝ) := by
 147    simp only [exp_error_10_at_0483, Nat.factorial, Nat.succ_eq_add_one]
 148    norm_num
 149  have h_lower_raw :
 150      (exp_taylor_10_at_0483 : ℝ) ≤
 151        |(0.483 : ℝ)|^10 * ((Nat.succ 10 : ℕ) / ((Nat.factorial 10 : ℕ) * 10)) +
 152          Real.exp (0.483 : ℝ) := by
 153    simpa [h_taylor_eq, add_comm, add_left_comm, add_assoc] using h_abs.2
 154  have h_lower :
 155      (exp_taylor_10_at_0483 : ℝ) - (exp_error_10_at_0483 : ℝ) ≤ Real.exp (0.483 : ℝ) := by
 156    have h_lower' :
 157        (exp_taylor_10_at_0483 : ℝ) ≤ (exp_error_10_at_0483 : ℝ) + Real.exp (0.483 : ℝ) := by
 158      calc
 159        (exp_taylor_10_at_0483 : ℝ)
 160            ≤ |(0.483 : ℝ)|^10 * ((Nat.succ 10 : ℕ) / ((Nat.factorial 10 : ℕ) * 10)) +
 161                Real.exp (0.483 : ℝ) := h_lower_raw
 162        _ = (exp_error_10_at_0483 : ℝ) + Real.exp (0.483 : ℝ) := by rw [h_err_eq]
 163    linarith
 164  have h_num : (((16209 / 10000 : ℚ) : ℝ)) <
 165      (exp_taylor_10_at_0483 : ℝ) - (exp_error_10_at_0483 : ℝ) := by
 166    exact_mod_cast exp_0483_taylor_floor
 167  exact lt_of_lt_of_le h_num h_lower
 168
 169private lemma log_phi_gt_048 : (0.48 : ℝ) < log IndisputableMonolith.Constants.phi := by
 170  rw [Real.lt_log_iff_exp_lt IndisputableMonolith.Constants.phi_pos]
 171  have hphi_lo : (((16161 / 10000 : ℚ) : ℝ)) < IndisputableMonolith.Constants.phi := by
 172    have hphi : (1.61803395 : ℝ) < IndisputableMonolith.Constants.phi := W8Bounds.phi_gt_161803395
 173    linarith
 174  exact lt_trans exp_048_lt hphi_lo
 175
 176private lemma log_phi_gt_0481 : (0.481 : ℝ) < log IndisputableMonolith.Constants.phi := by
 177  rw [Real.lt_log_iff_exp_lt IndisputableMonolith.Constants.phi_pos]
 178  have hphi_lo : (((16177 / 10000 : ℚ) : ℝ)) < IndisputableMonolith.Constants.phi := by
 179    have hphi : (1.61803395 : ℝ) < IndisputableMonolith.Constants.phi := W8Bounds.phi_gt_161803395
 180    linarith
 181  exact lt_trans exp_0481_lt hphi_lo
 182
 183private lemma log_phi_lt_0483 : log IndisputableMonolith.Constants.phi < (0.483 : ℝ) := by
 184  rw [Real.log_lt_iff_lt_exp IndisputableMonolith.Constants.phi_pos]
 185  have hphi_hi : IndisputableMonolith.Constants.phi < (((16209 / 10000 : ℚ) : ℝ)) := by
 186    have hphi : IndisputableMonolith.Constants.phi < (1.6180340 : ℝ) := W8Bounds.phi_lt_16180340
 187    linarith
 188  exact lt_trans hphi_hi exp_0483_gt
 189
 190theorem f_gap_gt : (1.195 : ℝ) < f_gap := by
 191  simp only [f_gap]
 192  have h_w8_lo := W8Bounds.w8_computed_gt
 193  have h_log_lo := log_phi_gt_048
 194  have h_w8_pos : 0 < w8_from_eight_tick := IndisputableMonolith.Constants.w8_pos
 195  have h048 : 0 < (0.48 : ℝ) := by norm_num
 196  -- f_gap = w8 * log(phi) > 2.490564399 * 0.48 = 1.19547...
 197  calc (1.195 : ℝ) < 2.490564399 * (0.48 : ℝ) := by norm_num
 198    _ < w8_from_eight_tick * (0.48 : ℝ) := by
 199      exact mul_lt_mul_of_pos_right h_w8_lo h048
 200    _ < w8_from_eight_tick * log IndisputableMonolith.Constants.phi := by
 201      exact mul_lt_mul_of_pos_left h_log_lo h_w8_pos
 202
 203/-- Stronger lower bound for the gap term using log(φ) > 0.481. -/
 204theorem f_gap_gt_strong : (1.1979 : ℝ) < f_gap := by
 205  simp only [f_gap]
 206  have h_w8_lo := W8Bounds.w8_computed_gt
 207  have h_log_lo := log_phi_gt_0481
 208  have h_w8_pos : 0 < w8_from_eight_tick := IndisputableMonolith.Constants.w8_pos
 209  have h0481 : 0 < (0.481 : ℝ) := by norm_num
 210  calc (1.1979 : ℝ) < 2.490564399 * (0.481 : ℝ) := by norm_num
 211    _ < w8_from_eight_tick * (0.481 : ℝ) := by
 212      exact mul_lt_mul_of_pos_right h_w8_lo h0481
 213    _ < w8_from_eight_tick * log IndisputableMonolith.Constants.phi := by
 214      exact mul_lt_mul_of_pos_left h_log_lo h_w8_pos
 215
 216theorem f_gap_lt : f_gap < (1.203 : ℝ) := by
 217  simp only [f_gap]
 218  have h_w8_hi := W8Bounds.w8_computed_lt
 219  have h_log_hi := log_phi_lt_0483
 220  have h_w8_pos : 0 < w8_from_eight_tick := IndisputableMonolith.Constants.w8_pos
 221  have h0483 : 0 < (0.483 : ℝ) := by norm_num
 222  -- f_gap = w8 * log(phi) < 2.490572090 * 0.483 = 1.202946...
 223  calc w8_from_eight_tick * log IndisputableMonolith.Constants.phi
 224      < w8_from_eight_tick * (0.483 : ℝ) := by
 225        exact mul_lt_mul_of_pos_left h_log_hi h_w8_pos
 226    _ < (2.490572090 : ℝ) * (0.483 : ℝ) := by
 227        exact mul_lt_mul_of_pos_right h_w8_hi h0483
 228    _ < (1.203 : ℝ) := by norm_num
 229
 230/-! ## Local exp bounds used by the exponential α formula -/
 231
 232private def exp_taylor_10_at_neg_00871 : ℚ :=
 233  let x : ℚ := -(871 : ℚ) / 100000
 234  1 + x + x^2/2 + x^3/6 + x^4/24 + x^5/120 + x^6/720 + x^7/5040 + x^8/40320 + x^9/362880
 235
 236private def exp_error_10_at_neg_00871 : ℚ :=
 237  let x : ℚ := (871 : ℚ) / 100000
 238  x^10 * 11 / (Nat.factorial 10 * 10)
 239
 240private lemma exp_neg_00871_taylor_floor :
 241    (991327 / 1000000 : ℚ) < exp_taylor_10_at_neg_00871 - exp_error_10_at_neg_00871 := by
 242  native_decide
 243
 244private lemma exp_neg_00871_gt : ((991327 / 1000000 : ℚ) : ℝ) < Real.exp (-0.00871 : ℝ) := by
 245  have hx_abs : |(-0.00871 : ℝ)| ≤ 1 := by norm_num
 246  have h_bound := Real.exp_bound hx_abs (n := 10) (by norm_num : 0 < 10)
 247  have h_abs := abs_sub_le_iff.mp h_bound
 248  have h_taylor_eq :
 249      (∑ m ∈ Finset.range 10, (-0.00871 : ℝ)^m / m.factorial) =
 250        (exp_taylor_10_at_neg_00871 : ℝ) := by
 251    simp only [exp_taylor_10_at_neg_00871, Finset.sum_range_succ, Finset.sum_range_zero, Nat.factorial]
 252    norm_num
 253  have h_err_eq :
 254      |(-0.00871 : ℝ)|^10 * ((Nat.succ 10 : ℕ) / ((Nat.factorial 10 : ℕ) * 10)) =
 255        (exp_error_10_at_neg_00871 : ℝ) := by
 256    simp only [exp_error_10_at_neg_00871,
 257      Nat.factorial, Nat.succ_eq_add_one]
 258    norm_num
 259  have h_lower : (exp_taylor_10_at_neg_00871 : ℝ) - (exp_error_10_at_neg_00871 : ℝ) ≤ Real.exp (-0.00871 : ℝ) := by
 260    have h2 := h_abs.2
 261    simp only [h_taylor_eq] at h2
 262    linarith
 263  have h_num : ((991327 / 1000000 : ℚ) : ℝ) <
 264      (exp_taylor_10_at_neg_00871 : ℝ) - (exp_error_10_at_neg_00871 : ℝ) := by
 265    exact_mod_cast exp_neg_00871_taylor_floor
 266  exact lt_of_lt_of_le h_num h_lower
 267
 268private def exp_taylor_10_at_neg_00866 : ℚ :=
 269  let x : ℚ := -(866 : ℚ) / 100000
 270  1 + x + x^2/2 + x^3/6 + x^4/24 + x^5/120 + x^6/720 + x^7/5040 + x^8/40320 + x^9/362880
 271
 272private def exp_error_10_at_neg_00866 : ℚ :=
 273  let x : ℚ := (866 : ℚ) / 100000
 274  x^10 * 11 / (Nat.factorial 10 * 10)
 275
 276private lemma exp_neg_00866_taylor_ceiling :
 277    exp_taylor_10_at_neg_00866 + exp_error_10_at_neg_00866 < (495689 / 500000 : ℚ) := by
 278  native_decide
 279
 280private lemma exp_neg_00866_lt : Real.exp (-0.00866 : ℝ) < ((495689 / 500000 : ℚ) : ℝ) := by
 281  have hx_abs : |(-0.00866 : ℝ)| ≤ 1 := by norm_num
 282  have h_bound := Real.exp_bound hx_abs (n := 10) (by norm_num : 0 < 10)
 283  have h_abs := abs_sub_le_iff.mp h_bound
 284  have h_taylor_eq :
 285      (∑ m ∈ Finset.range 10, (-0.00866 : ℝ)^m / m.factorial) =
 286        (exp_taylor_10_at_neg_00866 : ℝ) := by
 287    simp only [exp_taylor_10_at_neg_00866, Finset.sum_range_succ, Finset.sum_range_zero, Nat.factorial]
 288    norm_num
 289  have h_err_eq :
 290      |(-0.00866 : ℝ)|^10 * ((Nat.succ 10 : ℕ) / ((Nat.factorial 10 : ℕ) * 10)) =
 291        (exp_error_10_at_neg_00866 : ℝ) := by
 292    simp only [exp_error_10_at_neg_00866,
 293      Nat.factorial, Nat.succ_eq_add_one]
 294    norm_num
 295  have h_upper : Real.exp (-0.00866 : ℝ) ≤
 296      (exp_taylor_10_at_neg_00866 : ℝ) + (exp_error_10_at_neg_00866 : ℝ) := by
 297    have h1 := h_abs.1
 298    simp only [h_taylor_eq] at h1
 299    linarith
 300  have h_num : (exp_taylor_10_at_neg_00866 : ℝ) + (exp_error_10_at_neg_00866 : ℝ) <
 301      ((495689 / 500000 : ℚ) : ℝ) := by
 302    exact_mod_cast exp_neg_00866_taylor_ceiling
 303  exact lt_of_le_of_lt h_upper h_num
 304
 305/-! ## alphaInv bounds -/
 306
 307theorem alphaInv_gt : (137.030 : ℝ) < alphaInv := by
 308  simp only [alphaInv]
 309  have hseed_pos : (0 : ℝ) < alpha_seed := lt_trans (by norm_num) alpha_seed_gt
 310  have hy_hi : f_gap / alpha_seed < (0.00871 : ℝ) := by
 311    have hmul : f_gap < (0.00871 : ℝ) * alpha_seed := by
 312      have h1 : f_gap < (1.203 : ℝ) := f_gap_lt
 313      have h2 : (1.203 : ℝ) < (0.00871 : ℝ) * (138.230048 : ℝ) := by norm_num
 314      have h3 : (0.00871 : ℝ) * (138.230048 : ℝ) < (0.00871 : ℝ) * alpha_seed := by
 315        exact mul_lt_mul_of_pos_left alpha_seed_gt (by norm_num)
 316      exact lt_trans h1 (lt_trans h2 h3)
 317    exact (div_lt_iff₀ hseed_pos).2 (by simpa [mul_comm, mul_left_comm, mul_assoc] using hmul)
 318  have hexp_lo : ((991327 / 1000000 : ℚ) : ℝ) < Real.exp (-(f_gap / alpha_seed)) := by
 319    have hmono : Real.exp (-(0.00871 : ℝ)) < Real.exp (-(f_gap / alpha_seed)) := by
 320      exact Real.exp_lt_exp.mpr (by linarith [hy_hi])
 321    exact lt_trans exp_neg_00871_gt hmono
 322  have hseed_mul :
 323      (138.230048 : ℝ) * (((991327 / 1000000 : ℚ) : ℝ)) <
 324        alpha_seed * (((991327 / 1000000 : ℚ) : ℝ)) := by
 325    exact mul_lt_mul_of_pos_right alpha_seed_gt (by norm_num)
 326  have hmul :
 327      alpha_seed * (((991327 / 1000000 : ℚ) : ℝ)) <
 328        alpha_seed * Real.exp (-(f_gap / alpha_seed)) := by
 329    exact mul_lt_mul_of_pos_left hexp_lo hseed_pos
 330  calc
 331    (137.030 : ℝ) < (138.230048 : ℝ) * (((991327 / 1000000 : ℚ) : ℝ) : ℝ) := by norm_num
 332    _ < alpha_seed * (((991327 / 1000000 : ℚ) : ℝ) : ℝ) := hseed_mul
 333    _ < alpha_seed * Real.exp (-(f_gap / alpha_seed)) := hmul
 334
 335theorem alphaInv_lt : alphaInv < (137.039 : ℝ) := by
 336  simp only [alphaInv]
 337  have hseed_pos : (0 : ℝ) < alpha_seed := lt_trans (by norm_num) alpha_seed_gt
 338  have hy_lo : (0.00866 : ℝ) < f_gap / alpha_seed := by
 339    have hmul : (0.00866 : ℝ) * alpha_seed < f_gap := by
 340      have h1 : (0.00866 : ℝ) * alpha_seed < (0.00866 : ℝ) * (138.230092 : ℝ) := by
 341        exact mul_lt_mul_of_pos_left alpha_seed_lt (by norm_num)
 342      have h2 : (0.00866 : ℝ) * (138.230092 : ℝ) < (1.1979 : ℝ) := by norm_num
 343      exact lt_trans h1 (lt_trans h2 f_gap_gt_strong)
 344    exact (lt_div_iff₀ hseed_pos).2 (by simpa [mul_comm, mul_left_comm, mul_assoc] using hmul)
 345  have hexp_hi : Real.exp (-(f_gap / alpha_seed)) < ((495689 / 500000 : ℚ) : ℝ) := by
 346    have hmono : Real.exp (-(f_gap / alpha_seed)) < Real.exp (-(0.00866 : ℝ)) := by
 347      exact Real.exp_lt_exp.mpr (by linarith [hy_lo])
 348    exact lt_trans hmono exp_neg_00866_lt
 349  have hmul :
 350      alpha_seed * Real.exp (-(f_gap / alpha_seed)) <
 351        alpha_seed * (((495689 / 500000 : ℚ) : ℝ)) := by
 352    exact mul_lt_mul_of_pos_left hexp_hi hseed_pos
 353  have hseed_hi :
 354      alpha_seed * (((495689 / 500000 : ℚ) : ℝ)) <
 355        (138.230092 : ℝ) * (((495689 / 500000 : ℚ) : ℝ)) := by
 356    exact mul_lt_mul_of_pos_right alpha_seed_lt (by norm_num)
 357  calc
 358    alpha_seed * Real.exp (-(f_gap / alpha_seed))
 359        < alpha_seed * (((495689 / 500000 : ℚ) : ℝ) : ℝ) := hmul
 360    _ < (138.230092 : ℝ) * (((495689 / 500000 : ℚ) : ℝ) : ℝ) := hseed_hi
 361    _ < (137.039 : ℝ) := by norm_num
 362
 363/-- Upper bound alias retained for backwards compatibility after the canonical
 364exponential α update. -/
 365theorem alphaInv_lt_strong : alphaInv < (137.039 : ℝ) := by
 366  exact alphaInv_lt
 367
 368end IndisputableMonolith.Numerics
 369

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