Encyclopedia Foundation Foundation Primitive Recognition Calculus Prcmonotone Dalembert Monotone Additiv
ARTICLE 3 claims 3 theorems
Foundation Primitive Recognition Calculus Prcmonotone Dalembert Monotone Additiv
A single, simple assumption about a function's shape, monotonicity, replaces the heavy analytic machinery of continuity in forcing a linear form.
Order replaces continuity
In mathematics, a function is additive if it preserves addition: the value at a sum equals the sum of the values. The classic question is whether an additive function must be linear, meaning it looks like a straight line through the origin. The answer is no in general, but yes if the function is also monotone, meaning it never decreases as its input increases. The theorem monotone_additive_nonneg_isLinear states this for functions defined on the nonnegative real numbers: if such a function is additive for nonnegative inputs, monotone on that domain, and maps zero to zero, then it is exactly f t = f 1 * t for all nonnegative t.
The classical result, often attributed to Cauchy, requires continuity to force linearity. This theorem shows that monotonicity alone, a purely order-theoretic property, is enough. The proof uses only the density of rational numbers in an Archimedean ordered field, not the least-upper-bound axiom. This means the statement holds in any such field, not just the real numbers with their completeness property.
In Recognition Science, this result is a load-bearing brick. The framework's central cost function is derived from a d'Alembert equation, and its solution is shown to be a hyperbolic cosine composed with a linear map. The linear map is exactly what this theorem forces, using monotonicity instead of continuity. This removes the need for the continuum as a hypothesis: the cost form is forced by order alone, with only a single unit of scale remaining as an arbitrary choice.
The theorem does not claim that all additive functions are linear, only those that are monotone. It does not apply to functions that are merely additive on the whole real line without the monotonicity condition, where pathological solutions exist. It also does not claim anything about the value of the slope f 1; that remains a free parameter, the unit of scale.
THEOREM monotone_additive_nonneg_isLinear · IndisputableMonolith/Foundation/PrimitiveRecognitionCalculus/PRCMonotoneDAlembert.lean
/-- **Nonnegative version: additive-on-`[0,∞)` + monotone ⇒ linear on `[0,∞)`.**
A function additive for nonnegative arguments and monotone on `[0,∞)` with
`f 0 = 0` satisfies `f t = f 1 · t` for `t ≥ 0`. Proved by the odd extension to
all of `ℝ` plus `monotone_additive_isLinear`; completeness-free. This is the form
the `log∘φ` exponent of the d'Alembert/monotone route actually has (additivity
only comes from `φ(s+t)=φ(s)φ(t)` for nonnegative `s,t`). -/
theorem monotone_additive_nonneg_isLinear {f : ℝ → ℝ}
(hadd : ∀ a b, 0 ≤ a → 0 ≤ b → f (a + b) = f a + f b)
(hmono : MonotoneOn f (Set.Ici (0 : ℝ))) (hf0 : f 0 = 0) :
∀ t, 0 ≤ t → f t = f 1 * t := by
classical
have hsub : ∀ a b, 0 ≤ b → b ≤ a → f (a - b) = f a - f b := by
intro a b hb hba
have h := hadd (a - b) b (by linarith) hb
rw [sub_add_cancel] at h
linarith
set g : ℝ → ℝ := fun t => if 0 ≤ t then f t else - f (-t) with hg
have hg_pos : ∀ t, 0 ≤ t → g t = f t := by intro t ht; simp [hg, ht]
have hg_neg : ∀ t, t < 0 → g t = - f (-t) := by
intro t ht; simp [hg, not_le.mpr ht]
have hgadd : ∀ s t, g (s + t) = g s + g t := by
intro s t
rcases le_or_lt 0 s with hs | hs <;> rcases le_or_lt 0 t with ht | ht
· rw [hg_pos s hs, hg_pos t ht, hg_pos (s + t) (by linarith), hadd s t hs ht]
· rw [hg_pos s hs, hg_neg t ht]
rcases le_or_lt 0 (s + t) with hst | hst
· rw [hg_pos (s + t) hst]
have hh := hsub s (-t) (by linarith) (by linarith)
rw [sub_neg_eq_add] at hh
rw [hh]; ring
· rw [hg_neg (s + t) hst]
have hh := hsub (-t) s (by linarith) (by linarith)
rw [show -t - s = -(s + t) by ring] at hh
rw [hh]; ring
· rw [hg_neg s hs, hg_pos t ht]
rcases le_or_lt 0 (s + t) with hst | hst
· rw [hg_pos (s + t) hst]
have hh := hsub t (-s) (by linarith) (by linarith)
rw [show t - -s = s + t by ring] at hh
rw [hh]; ring
· rw [hg_neg (s + t) hst]
have hh := hsub (-s) t (by linarith) (by linarith)
rw [show -s - t = -(s + t) by ring] at hh
rw [hh]; ring
· rw [hg_neg s hs, hg_neg t ht, hg_neg (s + t) (by linarith),
show -(s + t) = (-s) + (-t) by ring, hadd (-s) (-t) (by linarith) (by linarith)]
ring
have hgmono : Monotone g := by
intro x y hxy
rcases le_or_lt 0 x with hx | hx
· have hy : 0 ≤ y := le_trans hx hxy
rw [hg_pos x hx, hg_pos y hy]
exact hmono (Set.mem_Ici.mpr hx) (Set.mem_Ici.mpr hy) hxy
· rcases le_or_lt 0 y with hy | hy
· rw [hg_neg x hx, hg_pos y hy]
have hfnx : f 0 ≤ f (-x) :=
hmono (Set.mem_Ici.mpr le_rfl) (Set.mem_Ici.mpr (by linarith)) (by linarith)
have hfy : f 0 ≤ f y :=
hmono (Set.mem_Ici.mpr le_rfl) (Set.mem_Ici.mpr hy) hy
rw [hf0] at hfnx hfy
linarith
· rw [hg_neg x hx, hg_neg y hy]
have hle : f (-y) ≤ f (-x) :=
hmono (Set.mem_Ici.mpr (by linarith)) (Set.mem_Ici.mpr (by linarith)) (by linarith)
linarith
have hlin := monotone_additive_isLinear hgadd hgmono
have hg1 : g 1 = f 1 := hg_pos 1 (by norm_num)
intro t ht
have hlt := hlin t
rw [hg_pos t ht, hg1] at hlt
exact hlt
THEOREM monotone_additive_nonneg_isLinear · IndisputableMonolith/Foundation/PrimitiveRecognitionCalculus/PRCMonotoneDAlembert.lean
/-- **Nonnegative version: additive-on-`[0,∞)` + monotone ⇒ linear on `[0,∞)`.**
A function additive for nonnegative arguments and monotone on `[0,∞)` with
`f 0 = 0` satisfies `f t = f 1 · t` for `t ≥ 0`. Proved by the odd extension to
all of `ℝ` plus `monotone_additive_isLinear`; completeness-free. This is the form
the `log∘φ` exponent of the d'Alembert/monotone route actually has (additivity
only comes from `φ(s+t)=φ(s)φ(t)` for nonnegative `s,t`). -/
theorem monotone_additive_nonneg_isLinear {f : ℝ → ℝ}
(hadd : ∀ a b, 0 ≤ a → 0 ≤ b → f (a + b) = f a + f b)
(hmono : MonotoneOn f (Set.Ici (0 : ℝ))) (hf0 : f 0 = 0) :
∀ t, 0 ≤ t → f t = f 1 * t := by
classical
have hsub : ∀ a b, 0 ≤ b → b ≤ a → f (a - b) = f a - f b := by
intro a b hb hba
have h := hadd (a - b) b (by linarith) hb
rw [sub_add_cancel] at h
linarith
set g : ℝ → ℝ := fun t => if 0 ≤ t then f t else - f (-t) with hg
have hg_pos : ∀ t, 0 ≤ t → g t = f t := by intro t ht; simp [hg, ht]
have hg_neg : ∀ t, t < 0 → g t = - f (-t) := by
intro t ht; simp [hg, not_le.mpr ht]
have hgadd : ∀ s t, g (s + t) = g s + g t := by
intro s t
rcases le_or_lt 0 s with hs | hs <;> rcases le_or_lt 0 t with ht | ht
· rw [hg_pos s hs, hg_pos t ht, hg_pos (s + t) (by linarith), hadd s t hs ht]
· rw [hg_pos s hs, hg_neg t ht]
rcases le_or_lt 0 (s + t) with hst | hst
· rw [hg_pos (s + t) hst]
have hh := hsub s (-t) (by linarith) (by linarith)
rw [sub_neg_eq_add] at hh
rw [hh]; ring
· rw [hg_neg (s + t) hst]
have hh := hsub (-t) s (by linarith) (by linarith)
rw [show -t - s = -(s + t) by ring] at hh
rw [hh]; ring
· rw [hg_neg s hs, hg_pos t ht]
rcases le_or_lt 0 (s + t) with hst | hst
· rw [hg_pos (s + t) hst]
have hh := hsub t (-s) (by linarith) (by linarith)
rw [show t - -s = s + t by ring] at hh
rw [hh]; ring
· rw [hg_neg (s + t) hst]
have hh := hsub (-s) t (by linarith) (by linarith)
rw [show -s - t = -(s + t) by ring] at hh
rw [hh]; ring
· rw [hg_neg s hs, hg_neg t ht, hg_neg (s + t) (by linarith),
show -(s + t) = (-s) + (-t) by ring, hadd (-s) (-t) (by linarith) (by linarith)]
ring
have hgmono : Monotone g := by
intro x y hxy
rcases le_or_lt 0 x with hx | hx
· have hy : 0 ≤ y := le_trans hx hxy
rw [hg_pos x hx, hg_pos y hy]
exact hmono (Set.mem_Ici.mpr hx) (Set.mem_Ici.mpr hy) hxy
· rcases le_or_lt 0 y with hy | hy
· rw [hg_neg x hx, hg_pos y hy]
have hfnx : f 0 ≤ f (-x) :=
hmono (Set.mem_Ici.mpr le_rfl) (Set.mem_Ici.mpr (by linarith)) (by linarith)
have hfy : f 0 ≤ f y :=
hmono (Set.mem_Ici.mpr le_rfl) (Set.mem_Ici.mpr hy) hy
rw [hf0] at hfnx hfy
linarith
· rw [hg_neg x hx, hg_neg y hy]
have hle : f (-y) ≤ f (-x) :=
hmono (Set.mem_Ici.mpr (by linarith)) (Set.mem_Ici.mpr (by linarith)) (by linarith)
linarith
have hlin := monotone_additive_isLinear hgadd hgmono
have hg1 : g 1 = f 1 := hg_pos 1 (by norm_num)
intro t ht
have hlt := hlin t
rw [hg_pos t ht, hg1] at hlt
exact hlt
THEOREM dAlembert_cosh_of_monotone · IndisputableMonolith/Foundation/PrimitiveRecognitionCalculus/PRCMonotoneDAlembert.lean
/-- **§9 RESOLVED, POSITIVE: the cosh cost form is forced WITHOUT completeness.**
A solution `H` of the d'Alembert equation that is even, normalized (`H 0 = 1`),
and monotone on `[0,∞)` is `H t = cosh (c · t)` for a single real `c`. The proof
uses no continuity, no smoothness, no Aczél package, and no least-upper-bound
axiom — only field operations, square roots, the order, and Archimedean density
(inside `monotone_additive_isLinear`). It therefore transfers verbatim to any
Archimedean real-closed field.
Consequence for the δ program (the §9 question): the continuum is NOT required to
force the cost form. Monotonicity — an order property present on any ordered
field — does everything continuity was doing. The single residual `c` is exactly
the known unit-of-scale posit. So the framework's arbitrary content drops from
two nested posits (continuum + unit) to one (unit), and the continuum posit for
the cost dissolves. This is the positive resolution of the sharper §9 target. -/
theorem dAlembert_cosh_of_monotone {H : ℝ → ℝ}
(hd : ∀ s t, H (s + t) + H (s - t) = 2 * H s * H t) (h0 : H 0 = 1)
(heven : Function.Even H) (hmono : MonotoneOn H (Set.Ici (0 : ℝ))) :
∃ c : ℝ, ∀ t, H t = Real.cosh (c * t) := by
have hφmul : ∀ a b, 0 ≤ a → 0 ≤ b →
(H (a + b) + Real.sqrt ((H (a + b)) ^ 2 - 1))
= (H a + Real.sqrt ((H a) ^ 2 - 1)) * (H b + Real.sqrt ((H b) ^ 2 - 1)) := by
intro a b ha hb
rcases le_total b a with hba | hab
· exact phi_mul_of_monotone hd h0 hmono a b hb hba
· have hp := phi_mul_of_monotone hd h0 hmono b a ha hab
rw [add_comm b a] at hp
rw [hp]; ring
have hφpos : ∀ x, 0 ≤ x → (1 : ℝ) ≤ H x + Real.sqrt ((H x) ^ 2 - 1) := by
intro x hx
have h1 := dAlembert_ge_one_of_monotone h0 hmono x hx
have h2 : 0 ≤ Real.sqrt ((H x) ^ 2 - 1) := Real.sqrt_nonneg _
linarith
have hφmono : MonotoneOn (fun x => Real.log (H x + Real.sqrt ((H x) ^ 2 - 1)))
(Set.Ici (0 : ℝ)) := by
intro x hx y hy hxy
have hx0 := Set.mem_Ici.mp hx
have hy0 := Set.mem_Ici.mp hy
have hHxy : H x ≤ H y := hmono hx hy hxy
have hge1x := dAlembert_ge_one_of_monotone h0 hmono x hx0
have hsqle : Real.sqrt ((H x) ^ 2 - 1) ≤ Real.sqrt ((H y) ^ 2 - 1) :=
Real.sqrt_le_sqrt (by nlinarith [hHxy, hge1x])
show Real.log (H x + Real.sqrt ((H x) ^ 2 - 1))
≤ Real.log (H y + Real.sqrt ((H y) ^ 2 - 1))
exact Real.log_le_log (by linarith [hφpos x hx0]) (by linarith)
have hγadd : ∀ a b, 0 ≤ a → 0 ≤ b →
Real.log (H (a + b) + Real.sqrt ((H (a + b)) ^ 2 - 1))
= Real.log (H a + Real.sqrt ((H a) ^ 2 - 1))
+ Real.log (H b + Real.sqrt ((H b) ^ 2 - 1)) := by
intro a b ha hb
rw [hφmul a b ha hb]
exact Real.log_mul (by have := hφpos a ha; linarith) (by have := hφpos b hb; linarith)
have hγ0 : Real.log (H 0 + Real.sqrt ((H 0) ^ 2 - 1)) = 0 := by
rw [h0]
have h01 : (1 : ℝ) ^ 2 - 1 = 0 := by norm_num
rw [h01, Real.sqrt_zero, add_zero, Real.log_one]
have hlin := monotone_additive_nonneg_isLinear
(f := fun x => Real.log (H x + Real.sqrt ((H x) ^ 2 - 1))) hγadd hφmono hγ0
refine ⟨Real.log (H 1 + Real.sqrt ((H 1) ^ 2 - 1)), ?_⟩
set c := Real.log (H 1 + Real.sqrt ((H 1) ^ 2 - 1)) with hc
have hcosh_nonneg : ∀ t, 0 ≤ t → H t = Real.cosh (c * t) := by
intro t ht
have hge1t := dAlembert_ge_one_of_monotone h0 hmono t ht
have hSt : 0 ≤ (H t) ^ 2 - 1 := by nlinarith [hge1t]
have hφtpos : 0 < H t + Real.sqrt ((H t) ^ 2 - 1) := by linarith [hφpos t ht]
have hloglin : Real.log (H t + Real.sqrt ((H t) ^ 2 - 1)) = c * t := hlin t ht
have hφexp : H t + Real.sqrt ((H t) ^ 2 - 1) = Real.exp (c * t) := by
rw [← hloglin]; exact (Real.exp_log hφtpos).symm
have hsqsq : (Real.sqrt ((H t) ^ 2 - 1)) ^ 2 = (H t) ^ 2 - 1 := Real.sq_sqrt hSt
have hprod :
(H t + Real.sqrt ((H t) ^ 2 - 1)) * (H t - Real.sqrt ((H t) ^ 2 - 1)) = 1 := by
have hexp :
(H t + Real.sqrt ((H t) ^ 2 - 1)) * (H t - Real.sqrt ((H t) ^ 2 - 1))
= (H t) ^ 2 - (Real.sqrt ((H t) ^ 2 - 1)) ^ 2 := by ring
rw [hexp, hsqsq]; ring
have hinv : H t - Real.sqrt ((H t) ^ 2 - 1) = (H t + Real.sqrt ((H t) ^ 2 - 1))⁻¹ :=
eq_inv_of_mul_eq_one_right hprod
have hHt : H t = (Real.exp (c * t) + (Real.exp (c * t))⁻¹) / 2 := by
have e : H t
= ((H t + Real.sqrt ((H t) ^ 2 - 1)) + (H t - Real.sqrt ((H t) ^ 2 - 1))) / 2 := by
ring
rw [e, hinv, hφexp]
rw [hHt, Real.cosh_eq, Real.exp_neg]
intro t
rcases le_or_lt 0 t with ht | ht
· exact hcosh_nonneg t ht
· have hnt : H t = H (-t) := (heven t).symm
rw [hnt, hcosh_nonneg (-t) (by linarith), show c * (-t) = -(c * t) by ring, Real.cosh_neg]
What this page does not claim
This theorem does not claim that all additive functions are linear, only those that are monotone. It does not apply to functions that are merely additive on the whole real line without the monotonicity condition. It does not claim anything about the value of the slope f 1; that remains a free parameter.
Verify this page
Every tagged claim above names its theorem. To check one yourself rather than trust this page, elaborate the source module with Lean 4 and audit its axiom basis:
$ lake env lean IndisputableMonolith/Foundation/PrimitiveRecognitionCalculus/PRCMonotoneDAlembert.lean
expected axiom basis: [propext, Classical.choice, Quot.sound] (the Lean kernel's standard three; no RS-specific axioms)
A page whose claims cannot be reproduced this way does not ship. In production, every anchor links to the exact declaration in the public source release, and this block carries the build receipt for the page itself.
Derived articles
This page is generated by a question-recursion engine: the questions its answers raise become the next pages. The current agenda, with open targets marked red:
- What is the full statement of the d'Alembert equation and how does it arise from the recognition cost composition law?
- How does the monotone route connect to the classical J-uniqueness theorem that uses continuity?
- What is the role of the unit of scale c in the final cost function J?
- What are the pathological additive functions that exist without the monotonicity condition?
MACHINE LAYER · GROUNDED CLAIM TABLE · CLICK TO EXPAND
THEOREM monotone_additive_nonneg_isLinear · IndisputableMonolith/Foundation/PrimitiveRecognitionCalculus/PRCMonotoneDAlembert.lean
/-- **Nonnegative version: additive-on-`[0,∞)` + monotone ⇒ linear on `[0,∞)`.** A function additive for nonnegative arguments and monotone on `[0,∞)` with `f 0 = 0` satisfies `f t = f 1 · t` for `t ≥ 0`. Proved by the odd extension to all of `ℝ` plus `monotone_additive_isLinear`; completeness-free. This is the form the `log∘φ` exponent of the d'Alembert/monotone route actually has (additivity only comes from `φ(s+t)=φ(s)φ(t)` for nonnegative `s,t`). -/ theorem monotone_additive_nonneg_isLinear {f : ℝ → ℝ} (hadd : ∀ a b, 0 ≤ a → 0 ≤ b → f (a + b) = f a + f b) (hmono : MonotoneOn f (Set.Ici (0 : ℝ))) (hf0 : f 0 = 0) : ∀ t, 0 ≤ t → f t = f 1 * t := by classical have hsub : ∀ a b, 0 ≤ b → b ≤ a → f (a - b) = f a - f b := by intro a b hb hba have h := hadd (a - b) b (by linarith) hb rw [sub_add_cancel] at h linarith set g : ℝ → ℝ := fun t => if 0 ≤ t then f t else - f (-t) with hg have hg_pos : ∀ t, 0 ≤ t → g t = f t := by intro t ht; simp [hg, ht] have hg_neg : ∀ t, t < 0 → g t = - f (-t) := by intro t ht; simp [hg, not_le.mpr ht] have hgadd : ∀ s t, g (s + t) = g s + g t := by intro s t rcases le_or_lt 0 s with hs | hs <;> rcases le_or_lt 0 t with ht | ht · rw [hg_pos s hs, hg_pos t ht, hg_pos (s + t) (by linarith), hadd s t hs ht] · rw [hg_pos s hs, hg_neg t ht] rcases le_or_lt 0 (s + t) with hst | hst · rw [hg_pos (s + t) hst] have hh := hsub s (-t) (by linarith) (by linarith) rw [sub_neg_eq_add] at hh rw [hh]; ring · rw [hg_neg (s + t) hst] have hh := hsub (-t) s (by linarith) (by linarith) rw [show -t - s = -(s + t) by ring] at hh rw [hh]; ring · rw [hg_neg s hs, hg_pos t ht] rcases le_or_lt 0 (s + t) with hst | hst · rw [hg_pos (s + t) hst] have hh := hsub t (-s) (by linarith) (by linarith) rw [show t - -s = s + t by ring] at hh rw [hh]; ring · rw [hg_neg (s + t) hst] have hh := hsub (-s) t (by linarith) (by linarith) rw [show -s - t = -(s + t) by ring] at hh rw [hh]; ring · rw [hg_neg s hs, hg_neg t ht, hg_neg (s + t) (by linarith), show -(s + t) = (-s) + (-t) by ring, hadd (-s) (-t) (by linarith) (by linarith)] ring have hgmono : Monotone g := by intro x y hxy rcases le_or_lt 0 x with hx | hx · have hy : 0 ≤ y := le_trans hx hxy rw [hg_pos x hx, hg_pos y hy] exact hmono (Set.mem_Ici.mpr hx) (Set.mem_Ici.mpr hy) hxy · rcases le_or_lt 0 y with hy | hy · rw [hg_neg x hx, hg_pos y hy] have hfnx : f 0 ≤ f (-x) := hmono (Set.mem_Ici.mpr le_rfl) (Set.mem_Ici.mpr (by linarith)) (by linarith) have hfy : f 0 ≤ f y := hmono (Set.mem_Ici.mpr le_rfl) (Set.mem_Ici.mpr hy) hy rw [hf0] at hfnx hfy linarith · rw [hg_neg x hx, hg_neg y hy] have hle : f (-y) ≤ f (-x) := hmono (Set.mem_Ici.mpr (by linarith)) (Set.mem_Ici.mpr (by linarith)) (by linarith) linarith have hlin := monotone_additive_isLinear hgadd hgmono have hg1 : g 1 = f 1 := hg_pos 1 (by norm_num) intro t ht have hlt := hlin t rw [hg_pos t ht, hg1] at hlt exact hltA function additive for nonnegative arguments and monotone on [0,∞) with f 0 = 0 satisfies f t = f 1 · t for t ≥ 0. monotone_additive_nonneg_isLinear · IndisputableMonolith/Foundation/PrimitiveRecognitionCalculus/PRCMonotoneDAlembert.leanTHEOREM monotone_additive_nonneg_isLinear · IndisputableMonolith/Foundation/PrimitiveRecognitionCalculus/PRCMonotoneDAlembert.lean
/-- **Nonnegative version: additive-on-`[0,∞)` + monotone ⇒ linear on `[0,∞)`.** A function additive for nonnegative arguments and monotone on `[0,∞)` with `f 0 = 0` satisfies `f t = f 1 · t` for `t ≥ 0`. Proved by the odd extension to all of `ℝ` plus `monotone_additive_isLinear`; completeness-free. This is the form the `log∘φ` exponent of the d'Alembert/monotone route actually has (additivity only comes from `φ(s+t)=φ(s)φ(t)` for nonnegative `s,t`). -/ theorem monotone_additive_nonneg_isLinear {f : ℝ → ℝ} (hadd : ∀ a b, 0 ≤ a → 0 ≤ b → f (a + b) = f a + f b) (hmono : MonotoneOn f (Set.Ici (0 : ℝ))) (hf0 : f 0 = 0) : ∀ t, 0 ≤ t → f t = f 1 * t := by classical have hsub : ∀ a b, 0 ≤ b → b ≤ a → f (a - b) = f a - f b := by intro a b hb hba have h := hadd (a - b) b (by linarith) hb rw [sub_add_cancel] at h linarith set g : ℝ → ℝ := fun t => if 0 ≤ t then f t else - f (-t) with hg have hg_pos : ∀ t, 0 ≤ t → g t = f t := by intro t ht; simp [hg, ht] have hg_neg : ∀ t, t < 0 → g t = - f (-t) := by intro t ht; simp [hg, not_le.mpr ht] have hgadd : ∀ s t, g (s + t) = g s + g t := by intro s t rcases le_or_lt 0 s with hs | hs <;> rcases le_or_lt 0 t with ht | ht · rw [hg_pos s hs, hg_pos t ht, hg_pos (s + t) (by linarith), hadd s t hs ht] · rw [hg_pos s hs, hg_neg t ht] rcases le_or_lt 0 (s + t) with hst | hst · rw [hg_pos (s + t) hst] have hh := hsub s (-t) (by linarith) (by linarith) rw [sub_neg_eq_add] at hh rw [hh]; ring · rw [hg_neg (s + t) hst] have hh := hsub (-t) s (by linarith) (by linarith) rw [show -t - s = -(s + t) by ring] at hh rw [hh]; ring · rw [hg_neg s hs, hg_pos t ht] rcases le_or_lt 0 (s + t) with hst | hst · rw [hg_pos (s + t) hst] have hh := hsub t (-s) (by linarith) (by linarith) rw [show t - -s = s + t by ring] at hh rw [hh]; ring · rw [hg_neg (s + t) hst] have hh := hsub (-s) t (by linarith) (by linarith) rw [show -s - t = -(s + t) by ring] at hh rw [hh]; ring · rw [hg_neg s hs, hg_neg t ht, hg_neg (s + t) (by linarith), show -(s + t) = (-s) + (-t) by ring, hadd (-s) (-t) (by linarith) (by linarith)] ring have hgmono : Monotone g := by intro x y hxy rcases le_or_lt 0 x with hx | hx · have hy : 0 ≤ y := le_trans hx hxy rw [hg_pos x hx, hg_pos y hy] exact hmono (Set.mem_Ici.mpr hx) (Set.mem_Ici.mpr hy) hxy · rcases le_or_lt 0 y with hy | hy · rw [hg_neg x hx, hg_pos y hy] have hfnx : f 0 ≤ f (-x) := hmono (Set.mem_Ici.mpr le_rfl) (Set.mem_Ici.mpr (by linarith)) (by linarith) have hfy : f 0 ≤ f y := hmono (Set.mem_Ici.mpr le_rfl) (Set.mem_Ici.mpr hy) hy rw [hf0] at hfnx hfy linarith · rw [hg_neg x hx, hg_neg y hy] have hle : f (-y) ≤ f (-x) := hmono (Set.mem_Ici.mpr (by linarith)) (Set.mem_Ici.mpr (by linarith)) (by linarith) linarith have hlin := monotone_additive_isLinear hgadd hgmono have hg1 : g 1 = f 1 := hg_pos 1 (by norm_num) intro t ht have hlt := hlin t rw [hg_pos t ht, hg1] at hlt exact hltThe proof uses only the density of ℚ in an Archimedean field, never the least-upper-bound axiom. monotone_additive_nonneg_isLinear · IndisputableMonolith/Foundation/PrimitiveRecognitionCalculus/PRCMonotoneDAlembert.leanTHEOREM dAlembert_cosh_of_monotone · IndisputableMonolith/Foundation/PrimitiveRecognitionCalculus/PRCMonotoneDAlembert.lean
/-- **§9 RESOLVED, POSITIVE: the cosh cost form is forced WITHOUT completeness.** A solution `H` of the d'Alembert equation that is even, normalized (`H 0 = 1`), and monotone on `[0,∞)` is `H t = cosh (c · t)` for a single real `c`. The proof uses no continuity, no smoothness, no Aczél package, and no least-upper-bound axiom — only field operations, square roots, the order, and Archimedean density (inside `monotone_additive_isLinear`). It therefore transfers verbatim to any Archimedean real-closed field. Consequence for the δ program (the §9 question): the continuum is NOT required to force the cost form. Monotonicity — an order property present on any ordered field — does everything continuity was doing. The single residual `c` is exactly the known unit-of-scale posit. So the framework's arbitrary content drops from two nested posits (continuum + unit) to one (unit), and the continuum posit for the cost dissolves. This is the positive resolution of the sharper §9 target. -/ theorem dAlembert_cosh_of_monotone {H : ℝ → ℝ} (hd : ∀ s t, H (s + t) + H (s - t) = 2 * H s * H t) (h0 : H 0 = 1) (heven : Function.Even H) (hmono : MonotoneOn H (Set.Ici (0 : ℝ))) : ∃ c : ℝ, ∀ t, H t = Real.cosh (c * t) := by have hφmul : ∀ a b, 0 ≤ a → 0 ≤ b → (H (a + b) + Real.sqrt ((H (a + b)) ^ 2 - 1)) = (H a + Real.sqrt ((H a) ^ 2 - 1)) * (H b + Real.sqrt ((H b) ^ 2 - 1)) := by intro a b ha hb rcases le_total b a with hba | hab · exact phi_mul_of_monotone hd h0 hmono a b hb hba · have hp := phi_mul_of_monotone hd h0 hmono b a ha hab rw [add_comm b a] at hp rw [hp]; ring have hφpos : ∀ x, 0 ≤ x → (1 : ℝ) ≤ H x + Real.sqrt ((H x) ^ 2 - 1) := by intro x hx have h1 := dAlembert_ge_one_of_monotone h0 hmono x hx have h2 : 0 ≤ Real.sqrt ((H x) ^ 2 - 1) := Real.sqrt_nonneg _ linarith have hφmono : MonotoneOn (fun x => Real.log (H x + Real.sqrt ((H x) ^ 2 - 1))) (Set.Ici (0 : ℝ)) := by intro x hx y hy hxy have hx0 := Set.mem_Ici.mp hx have hy0 := Set.mem_Ici.mp hy have hHxy : H x ≤ H y := hmono hx hy hxy have hge1x := dAlembert_ge_one_of_monotone h0 hmono x hx0 have hsqle : Real.sqrt ((H x) ^ 2 - 1) ≤ Real.sqrt ((H y) ^ 2 - 1) := Real.sqrt_le_sqrt (by nlinarith [hHxy, hge1x]) show Real.log (H x + Real.sqrt ((H x) ^ 2 - 1)) ≤ Real.log (H y + Real.sqrt ((H y) ^ 2 - 1)) exact Real.log_le_log (by linarith [hφpos x hx0]) (by linarith) have hγadd : ∀ a b, 0 ≤ a → 0 ≤ b → Real.log (H (a + b) + Real.sqrt ((H (a + b)) ^ 2 - 1)) = Real.log (H a + Real.sqrt ((H a) ^ 2 - 1)) + Real.log (H b + Real.sqrt ((H b) ^ 2 - 1)) := by intro a b ha hb rw [hφmul a b ha hb] exact Real.log_mul (by have := hφpos a ha; linarith) (by have := hφpos b hb; linarith) have hγ0 : Real.log (H 0 + Real.sqrt ((H 0) ^ 2 - 1)) = 0 := by rw [h0] have h01 : (1 : ℝ) ^ 2 - 1 = 0 := by norm_num rw [h01, Real.sqrt_zero, add_zero, Real.log_one] have hlin := monotone_additive_nonneg_isLinear (f := fun x => Real.log (H x + Real.sqrt ((H x) ^ 2 - 1))) hγadd hφmono hγ0 refine ⟨Real.log (H 1 + Real.sqrt ((H 1) ^ 2 - 1)), ?_⟩ set c := Real.log (H 1 + Real.sqrt ((H 1) ^ 2 - 1)) with hc have hcosh_nonneg : ∀ t, 0 ≤ t → H t = Real.cosh (c * t) := by intro t ht have hge1t := dAlembert_ge_one_of_monotone h0 hmono t ht have hSt : 0 ≤ (H t) ^ 2 - 1 := by nlinarith [hge1t] have hφtpos : 0 < H t + Real.sqrt ((H t) ^ 2 - 1) := by linarith [hφpos t ht] have hloglin : Real.log (H t + Real.sqrt ((H t) ^ 2 - 1)) = c * t := hlin t ht have hφexp : H t + Real.sqrt ((H t) ^ 2 - 1) = Real.exp (c * t) := by rw [← hloglin]; exact (Real.exp_log hφtpos).symm have hsqsq : (Real.sqrt ((H t) ^ 2 - 1)) ^ 2 = (H t) ^ 2 - 1 := Real.sq_sqrt hSt have hprod : (H t + Real.sqrt ((H t) ^ 2 - 1)) * (H t - Real.sqrt ((H t) ^ 2 - 1)) = 1 := by have hexp : (H t + Real.sqrt ((H t) ^ 2 - 1)) * (H t - Real.sqrt ((H t) ^ 2 - 1)) = (H t) ^ 2 - (Real.sqrt ((H t) ^ 2 - 1)) ^ 2 := by ring rw [hexp, hsqsq]; ring have hinv : H t - Real.sqrt ((H t) ^ 2 - 1) = (H t + Real.sqrt ((H t) ^ 2 - 1))⁻¹ := eq_inv_of_mul_eq_one_right hprod have hHt : H t = (Real.exp (c * t) + (Real.exp (c * t))⁻¹) / 2 := by have e : H t = ((H t + Real.sqrt ((H t) ^ 2 - 1)) + (H t - Real.sqrt ((H t) ^ 2 - 1))) / 2 := by ring rw [e, hinv, hφexp] rw [hHt, Real.cosh_eq, Real.exp_neg] intro t rcases le_or_lt 0 t with ht | ht · exact hcosh_nonneg t ht · have hnt : H t = H (-t) := (heven t).symm rw [hnt, hcosh_nonneg (-t) (by linarith), show c * (-t) = -(c * t) by ring, Real.cosh_neg]A solution H of the d'Alembert equation that is even, normalized, and monotone on [0,∞) is H t = cosh (c · t) for a single real c. dAlembert_cosh_of_monotone · IndisputableMonolith/Foundation/PrimitiveRecognitionCalculus/PRCMonotoneDAlembert.lean