pith. machine review for the scientific record. sign in

IndisputableMonolith.RRF.Theorems.MonotoneArgmin

IndisputableMonolith/RRF/Theorems/MonotoneArgmin.lean · 93 lines · 8 declarations

show as:
view math explainer →

open module explainer GitHub source

Explainer status: ready · generated 2026-05-16 15:17:03.525102+00:00

   1import Mathlib.Order.Basic
   2import Mathlib.Order.Monotone.Basic
   3import Mathlib.Data.Real.Basic
   4import Mathlib.Tactic
   5
   6/-!
   7# RRF Theorems: Monotone Transform Invariance
   8
   9If `g : ℝ → ℝ` is strictly monotone, then `argmin (g ∘ J) = argmin J`.
  10
  11This is fundamental to RRF: the "meaning" of strain is preserved under any
  12monotone rescaling. What matters is the ordering, not the absolute values.
  13
  14## Main Results
  15
  16- `argmin_comp_strictMono`: argmin is invariant under strictly monotone transforms
  17- `order_preserving_strictMono`: strict monotonicity preserves all ordering relations
  18-/
  19
  20
  21namespace IndisputableMonolith
  22namespace RRF.Theorems
  23
  24variable {State : Type*} {J : State → ℝ} {g : ℝ → ℝ}
  25
  26/-- A state x is an argmin of J if J(x) ≤ J(y) for all y. -/
  27def isArgmin (J : State → ℝ) (x : State) : Prop :=
  28  ∀ y : State, J x ≤ J y
  29
  30/-- Strictly monotone transforms preserve argmin.
  31
  32If g is strictly monotone and x is an argmin of J,
  33then x is also an argmin of g ∘ J.
  34-/
  35theorem argmin_comp_strictMono
  36    (hg : StrictMono g)
  37    (x : State) (hx : isArgmin J x) :
  38    isArgmin (g ∘ J) x := by
  39  intro y
  40  exact hg.monotone (hx y)
  41
  42/-- Strictly monotone transforms preserve the converse: if x is argmin of g ∘ J, then x is argmin of J (assuming g is onto the relevant range). -/
  43theorem argmin_of_comp_strictMono
  44    (hg : StrictMono g)
  45    (x : State) (hgx : isArgmin (g ∘ J) x) :
  46    isArgmin J x := by
  47  intro y
  48  -- g(J(x)) ≤ g(J(y)) and g strictly mono → J(x) ≤ J(y)
  49  by_contra h
  50  push_neg at h
  51  have : g (J x) > g (J y) := hg h
  52  have : ¬ (g ∘ J) x ≤ (g ∘ J) y := not_le_of_gt this
  53  exact this (hgx y)
  54
  55/-- Strictly monotone transforms preserve strict ordering. -/
  56theorem strictOrder_comp_strictMono
  57    (hg : StrictMono g)
  58    {x y : State} (hxy : J x < J y) :
  59    (g ∘ J) x < (g ∘ J) y :=
  60  hg hxy
  61
  62/-- Monotone transforms preserve weak ordering. -/
  63theorem weakOrder_comp_mono
  64    (hg : Monotone g)
  65    {x y : State} (hxy : J x ≤ J y) :
  66    (g ∘ J) x ≤ (g ∘ J) y :=
  67  hg hxy
  68
  69/-- The key theorem: strictly monotone transforms induce an equivalence on argmin sets. -/
  70theorem argmin_equiv_strictMono (hg : StrictMono g) (x : State) :
  71    isArgmin J x ↔ isArgmin (g ∘ J) x :=
  72  ⟨argmin_comp_strictMono hg x, argmin_of_comp_strictMono hg x⟩
  73
  74/-- Application: shifting J by a constant preserves argmin. -/
  75theorem argmin_add_const (c : ℝ) (x : State) :
  76    isArgmin J x ↔ isArgmin (fun s => J s + c) x := by
  77  constructor
  78  · intro h y
  79    have := h y
  80    linarith
  81  · intro h y
  82    have := h y
  83    linarith
  84
  85/-- Application: scaling J by a positive constant preserves argmin. -/
  86theorem argmin_mul_pos (c : ℝ) (hc : 0 < c) (x : State) :
  87    isArgmin J x ↔ isArgmin (fun s => c * J s) x := by
  88  have hg : StrictMono (fun t => c * t) := strictMono_mul_left_of_pos hc
  89  exact argmin_equiv_strictMono hg x
  90
  91end RRF.Theorems
  92end IndisputableMonolith
  93

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