pith. machine review for the scientific record. sign in

IndisputableMonolith.Chemistry.MaillardTemperatureLadder

IndisputableMonolith/Chemistry/MaillardTemperatureLadder.lean · 80 lines · 8 declarations

show as:
view math explainer →

open module explainer GitHub source

Explainer status: ready · generated 2026-05-15 07:22:54.110229+00:00

   1import Mathlib
   2import IndisputableMonolith.Constants
   3
   4/-!
   5# Maillard Reaction Temperature on the Phi-Ladder
   6
   7The Maillard wrapper (`Chemistry/MaillardReactionThresholdFromJCost`)
   8applies the canonical band to the J-cost on the surface-temperature
   9ratio. This deep follow-on adds the explicit temperature-rung ladder.
  10
  11Reference: Maillard onset at 140°C = rung 0.
  12Predicted ladder:
  13- rung 0: 140°C (Maillard onset, first browning)
  14- rung 1: 140 · φ ≈ 226°C (Maillard peak, optimal browning)
  15- rung 2: 140 · φ² ≈ 366°C (Maillard–char boundary, acrylamide formation)
  16
  17Empirical bench: caramelisation peak ≈ 170-190°C (close to rung 1 but
  18at a lower sub-step); thermal degradation / charring > 350°C (near rung
  192). The ladder gives a structural prediction for any sugar-amine pair.
  20
  21Lean status: 0 sorry, 0 axiom.
  22-/
  23
  24namespace IndisputableMonolith
  25namespace Chemistry
  26namespace MaillardTemperatureLadder
  27
  28open Constants
  29
  30noncomputable section
  31
  32/-- Reference Maillard onset temperature (RS-native dimensionless 1,
  33calibrated at 140°C). -/
  34def referenceTemp : ℝ := 1
  35
  36/-- Maillard reaction temperature at φ-ladder rung `k`. -/
  37def tempAtRung (k : ℕ) : ℝ := referenceTemp * phi ^ k
  38
  39theorem tempAtRung_pos (k : ℕ) : 0 < tempAtRung k := by
  40  unfold tempAtRung referenceTemp
  41  have : 0 < phi ^ k := pow_pos Constants.phi_pos k
  42  linarith [this]
  43
  44theorem tempAtRung_succ_ratio (k : ℕ) :
  45    tempAtRung (k + 1) = tempAtRung k * phi := by
  46  unfold tempAtRung; rw [pow_succ]; ring
  47
  48theorem tempAtRung_strictly_increasing (k : ℕ) :
  49    tempAtRung k < tempAtRung (k + 1) := by
  50  rw [tempAtRung_succ_ratio]
  51  have hk : 0 < tempAtRung k := tempAtRung_pos k
  52  have hphi_gt_one : (1 : ℝ) < phi := by
  53    have := Constants.phi_gt_onePointFive; linarith
  54  have : tempAtRung k * 1 < tempAtRung k * phi :=
  55    mul_lt_mul_of_pos_left hphi_gt_one hk
  56  simpa using this
  57
  58theorem temp_adjacent_ratio (k : ℕ) :
  59    tempAtRung (k + 1) / tempAtRung k = phi := by
  60  rw [tempAtRung_succ_ratio]
  61  field_simp [(tempAtRung_pos k).ne']
  62
  63structure MaillardTemperatureCert where
  64  temp_pos : ∀ k, 0 < tempAtRung k
  65  one_step_ratio : ∀ k, tempAtRung (k + 1) = tempAtRung k * phi
  66  strictly_increasing : ∀ k, tempAtRung k < tempAtRung (k + 1)
  67  adjacent_ratio_eq_phi : ∀ k, tempAtRung (k + 1) / tempAtRung k = phi
  68
  69/-- Maillard-temperature-ladder certificate. -/
  70def maillardTemperatureCert : MaillardTemperatureCert where
  71  temp_pos := tempAtRung_pos
  72  one_step_ratio := tempAtRung_succ_ratio
  73  strictly_increasing := tempAtRung_strictly_increasing
  74  adjacent_ratio_eq_phi := temp_adjacent_ratio
  75
  76end
  77end MaillardTemperatureLadder
  78end Chemistry
  79end IndisputableMonolith
  80

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