Encyclopedia Cost Cost Functional Equation D Alembert To Ode General Theorem
Cost Functional Equation D Alembert To Ode General Theorem
A single functional equation, the d'Alembert equation, forces its smooth solutions to obey a second-order differential equation, a bridge that Recognition Science uses to prove the uniqueness of its cost function.
From a functional equation to a differential equation
The d'Alembert functional equation, H(t+u) + H(t-u) = 2 H(t) H(u), is a classical object in mathematics. It asks for functions H that behave like the hyperbolic cosine, cosh, in the sense that the value at a sum plus the value at a difference equals twice the product of the values. The equation appears in the study of wave propagation and in the characterization of trigonometric functions. A natural question is: what functions satisfy it? The answer depends on the regularity assumed.
If H is smooth, meaning it has derivatives of all orders, then the d'Alembert equation forces a striking consequence: the second derivative of H at any point t equals the second derivative at zero times H(t) itself. In symbols, H''(t) = H''(0) H(t). This is the theorem dAlembert_to_ODE_general_theorem in the framework's machine-checked library of formal theorems. It converts a global functional equation into a local differential equation, a bridge that makes the equation tractable. With the additional initial condition H(0) = 1, the differential equation becomes H'' = H, whose solution is cosh, up to a constant factor.
The theorem does not claim that the d'Alembert equation alone forces H to be cosh. Without the normalization H(0) = 1, the equation admits other smooth solutions, such as H(t) = cosh(kt) for any constant k. The theorem also does not claim that every continuous solution is smooth; that is a separate, deeper result. The theorem's role in Recognition Science is precise: it is a stepping stone, not the final result. The final uniqueness of the cost function J(x) = (x + 1/x)/2 - 1 requires the full set of five conditions, including the composition law and calibration, not just the d'Alembert equation.
In Recognition Science, this bridge is part of a chain that forces the cost function's form. The framework models recognition events as a ledger, a discrete record of events, and postulates that the cost of recognition obeys a composition law. The d'Alembert equation emerges after a logarithmic change of variables. The theorem dAlembert_to_ODE_general_theorem is what allows the framework to move from the functional equation to a differential equation, which is then solved uniquely. This is a key step in the proof that any cost function satisfying the five plain conditions must equal J(x). The theorem itself, however, is a general mathematical fact, independent of the framework's interpretation.
THEOREM dAlembert_to_ODE_general_theorem · IndisputableMonolith/Cost/FunctionalEquation.lean
/-- **Theorem (ODE Derivation, universal coefficient)**: If H is C∞ and
satisfies d'Alembert, then `H''(t) = H''(0) * H(t)` everywhere.
This is the unnormalized form of `dAlembert_to_ODE_theorem`. -/
theorem dAlembert_to_ODE_general_theorem (H : ℝ → ℝ)
(h_smooth : ContDiff ℝ ⊤ H)
(h_dAlembert : ∀ t u, H (t+u) + H (t-u) = 2 * H t * H u) :
∀ t, deriv (deriv H) t = deriv (deriv H) 0 * H t := by
have hCDiff2 : ContDiff ℝ 2 H := h_smooth.of_le le_top
have hDiff : Differentiable ℝ H :=
hCDiff2.differentiable (by decide : (2 : WithTop ℕ∞) ≠ 0)
have hCDiff1_H' : ContDiff ℝ 1 (deriv H) := by
rw [show (2 : WithTop ℕ∞) = 1 + 1 from rfl] at hCDiff2
rw [contDiff_succ_iff_deriv] at hCDiff2
exact hCDiff2.2.2
have hDiffDeriv : Differentiable ℝ (deriv H) :=
hCDiff1_H'.differentiable (by decide : (1 : WithTop ℕ∞) ≠ 0)
have hsh_add : ∀ (s v : ℝ), HasDerivAt (fun u => s + u) (1 : ℝ) v := fun s v => by
have h := (hasDerivAt_id v).add_const s; simp only [id] at h
rwa [show (fun u : ℝ => u + s) = fun u => s + u from funext fun u => add_comm u s] at h
have hsh_sub : ∀ (s v : ℝ), HasDerivAt (fun u => s - u) (-1 : ℝ) v := fun s v => by
have h1 : HasDerivAt (fun u : ℝ => -u) (-1 : ℝ) v := by
have := (hasDerivAt_id v).neg; simp only [id] at this; exact this
have h2 := h1.const_add s
rwa [show (fun u : ℝ => s + -u) = fun u => s - u from funext fun u => by ring] at h2
intro t
have h_feq : (fun u => H (t + u) + H (t - u)) = (fun u => 2 * H t * H u) :=
funext (h_dAlembert t)
have key : deriv (deriv (fun u => H (t + u) + H (t - u))) 0 =
deriv (deriv (fun u => 2 * H t * H u)) 0 :=
congr_arg (fun f => deriv (deriv f) 0) h_feq
have lhs_eq : deriv (deriv (fun u => H (t + u) + H (t - u))) 0 = 2 * deriv (deriv H) t := by
have h_plus : ∀ v, HasDerivAt (fun u => H (t + u)) (deriv H (t + v)) v := fun v => by
have hH := (hDiff (t + v)).hasDerivAt
have hcomp := hH.comp v (hsh_add t v)
simp only [mul_one, Function.comp_apply] at hcomp; exact hcomp
have h_minus : ∀ v, HasDerivAt (fun u => H (t - u)) (-deriv H (t - v)) v := fun v => by
have hH := (hDiff (t - v)).hasDerivAt
have hcomp := hH.comp v (hsh_sub t v)
simp only [mul_neg, mul_one, Function.comp_apply] at hcomp; exact hcomp
have hfirst_fun : deriv (fun u => H (t + u) + H (t - u)) =
fun v => deriv H (t + v) - deriv H (t - v) := funext fun v => by
have heq : (fun u => H (t + u)) + (fun u => H (t - u)) =
fun u => H (t + u) + H (t - u) := by ext u; rfl
have h12 : deriv (fun u => H (t + u) + H (t - u)) v = deriv H (t + v) + -deriv H (t - v) := by
rw [← heq]; exact ((h_plus v).add (h_minus v)).deriv
linarith [show deriv H (t + v) + -deriv H (t - v) =
deriv H (t + v) - deriv H (t - v) from by ring]
have hd2_plus : HasDerivAt (fun v => deriv H (t + v)) (deriv (deriv H) t) 0 := by
have hDH : HasDerivAt (deriv H) (deriv (deriv H) (t + 0)) (t + 0) :=
(hDiffDeriv (t + 0)).hasDerivAt
have hcomp := hDH.comp 0 (hsh_add t 0)
simp only [mul_one, add_zero, Function.comp_apply] at hcomp; exact hcomp
have hd2_minus : HasDerivAt (fun v => deriv H (t - v)) (-deriv (deriv H) t) 0 := by
have hDH : HasDerivAt (deriv H) (deriv (deriv H) (t - 0)) (t - 0) :=
(hDiffDeriv (t - 0)).hasDerivAt
have hcomp := hDH.comp 0 (hsh_sub t 0)
simp only [mul_neg, mul_one, sub_zero, Function.comp_apply] at hcomp; exact hcomp
rw [congr_fun (congr_arg deriv hfirst_fun) 0]
have heq2 : (fun v => deriv H (t + v)) - (fun v => deriv H (t - v)) =
fun v => deriv H (t + v) - deriv H (t - v) := by ext v; rfl
have h : deriv (fun v => deriv H (t + v) - deriv H (t - v)) 0 =
deriv (deriv H) t - -deriv (deriv H) t := by
rw [← heq2]; exact (hd2_plus.sub hd2_minus).deriv
linarith [show deriv (deriv H) t - -deriv (deriv H) t = 2 * deriv (deriv H) t from by ring]
have rhs_eq : deriv (deriv (fun u => 2 * H t * H u)) 0 =
2 * H t * deriv (deriv H) 0 := by
have hfirst_fun : deriv (fun u => 2 * H t * H u) = fun v => 2 * H t * deriv H v :=
funext fun v => ((hDiff v).hasDerivAt.const_mul (2 * H t)).deriv
have hsecond := (hDiffDeriv 0).hasDerivAt.const_mul (2 * H t)
rw [congr_fun (congr_arg deriv hfirst_fun) 0, hsecond.deriv]
rw [lhs_eq, rhs_eq] at key
linarith
What this page does not claim
The d'Alembert equation alone forces H to be cosh; other smooth solutions exist without normalization. Every continuous solution of the d'Alembert equation is smooth; that is a separate theorem. This theorem proves the uniqueness of the cost function J; that requires all five conditions.
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/Cost/FunctionalEquation.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 exactly is the Aczél smoothness package and why is it needed for the full uniqueness proof?
- How does the d'Alembert equation arise from the composition law after a logarithmic change of variables?
- What is the role of the log-curvature condition in selecting the cosh solution?
MACHINE LAYER · GROUNDED CLAIM TABLE · CLICK TO EXPAND
THEOREM dAlembert_to_ODE_general_theorem · IndisputableMonolith/Cost/FunctionalEquation.lean
/-- **Theorem (ODE Derivation, universal coefficient)**: If H is C∞ and satisfies d'Alembert, then `H''(t) = H''(0) * H(t)` everywhere. This is the unnormalized form of `dAlembert_to_ODE_theorem`. -/ theorem dAlembert_to_ODE_general_theorem (H : ℝ → ℝ) (h_smooth : ContDiff ℝ ⊤ H) (h_dAlembert : ∀ t u, H (t+u) + H (t-u) = 2 * H t * H u) : ∀ t, deriv (deriv H) t = deriv (deriv H) 0 * H t := by have hCDiff2 : ContDiff ℝ 2 H := h_smooth.of_le le_top have hDiff : Differentiable ℝ H := hCDiff2.differentiable (by decide : (2 : WithTop ℕ∞) ≠ 0) have hCDiff1_H' : ContDiff ℝ 1 (deriv H) := by rw [show (2 : WithTop ℕ∞) = 1 + 1 from rfl] at hCDiff2 rw [contDiff_succ_iff_deriv] at hCDiff2 exact hCDiff2.2.2 have hDiffDeriv : Differentiable ℝ (deriv H) := hCDiff1_H'.differentiable (by decide : (1 : WithTop ℕ∞) ≠ 0) have hsh_add : ∀ (s v : ℝ), HasDerivAt (fun u => s + u) (1 : ℝ) v := fun s v => by have h := (hasDerivAt_id v).add_const s; simp only [id] at h rwa [show (fun u : ℝ => u + s) = fun u => s + u from funext fun u => add_comm u s] at h have hsh_sub : ∀ (s v : ℝ), HasDerivAt (fun u => s - u) (-1 : ℝ) v := fun s v => by have h1 : HasDerivAt (fun u : ℝ => -u) (-1 : ℝ) v := by have := (hasDerivAt_id v).neg; simp only [id] at this; exact this have h2 := h1.const_add s rwa [show (fun u : ℝ => s + -u) = fun u => s - u from funext fun u => by ring] at h2 intro t have h_feq : (fun u => H (t + u) + H (t - u)) = (fun u => 2 * H t * H u) := funext (h_dAlembert t) have key : deriv (deriv (fun u => H (t + u) + H (t - u))) 0 = deriv (deriv (fun u => 2 * H t * H u)) 0 := congr_arg (fun f => deriv (deriv f) 0) h_feq have lhs_eq : deriv (deriv (fun u => H (t + u) + H (t - u))) 0 = 2 * deriv (deriv H) t := by have h_plus : ∀ v, HasDerivAt (fun u => H (t + u)) (deriv H (t + v)) v := fun v => by have hH := (hDiff (t + v)).hasDerivAt have hcomp := hH.comp v (hsh_add t v) simp only [mul_one, Function.comp_apply] at hcomp; exact hcomp have h_minus : ∀ v, HasDerivAt (fun u => H (t - u)) (-deriv H (t - v)) v := fun v => by have hH := (hDiff (t - v)).hasDerivAt have hcomp := hH.comp v (hsh_sub t v) simp only [mul_neg, mul_one, Function.comp_apply] at hcomp; exact hcomp have hfirst_fun : deriv (fun u => H (t + u) + H (t - u)) = fun v => deriv H (t + v) - deriv H (t - v) := funext fun v => by have heq : (fun u => H (t + u)) + (fun u => H (t - u)) = fun u => H (t + u) + H (t - u) := by ext u; rfl have h12 : deriv (fun u => H (t + u) + H (t - u)) v = deriv H (t + v) + -deriv H (t - v) := by rw [← heq]; exact ((h_plus v).add (h_minus v)).deriv linarith [show deriv H (t + v) + -deriv H (t - v) = deriv H (t + v) - deriv H (t - v) from by ring] have hd2_plus : HasDerivAt (fun v => deriv H (t + v)) (deriv (deriv H) t) 0 := by have hDH : HasDerivAt (deriv H) (deriv (deriv H) (t + 0)) (t + 0) := (hDiffDeriv (t + 0)).hasDerivAt have hcomp := hDH.comp 0 (hsh_add t 0) simp only [mul_one, add_zero, Function.comp_apply] at hcomp; exact hcomp have hd2_minus : HasDerivAt (fun v => deriv H (t - v)) (-deriv (deriv H) t) 0 := by have hDH : HasDerivAt (deriv H) (deriv (deriv H) (t - 0)) (t - 0) := (hDiffDeriv (t - 0)).hasDerivAt have hcomp := hDH.comp 0 (hsh_sub t 0) simp only [mul_neg, mul_one, sub_zero, Function.comp_apply] at hcomp; exact hcomp rw [congr_fun (congr_arg deriv hfirst_fun) 0] have heq2 : (fun v => deriv H (t + v)) - (fun v => deriv H (t - v)) = fun v => deriv H (t + v) - deriv H (t - v) := by ext v; rfl have h : deriv (fun v => deriv H (t + v) - deriv H (t - v)) 0 = deriv (deriv H) t - -deriv (deriv H) t := by rw [← heq2]; exact (hd2_plus.sub hd2_minus).deriv linarith [show deriv (deriv H) t - -deriv (deriv H) t = 2 * deriv (deriv H) t from by ring] have rhs_eq : deriv (deriv (fun u => 2 * H t * H u)) 0 = 2 * H t * deriv (deriv H) 0 := by have hfirst_fun : deriv (fun u => 2 * H t * H u) = fun v => 2 * H t * deriv H v := funext fun v => ((hDiff v).hasDerivAt.const_mul (2 * H t)).deriv have hsecond := (hDiffDeriv 0).hasDerivAt.const_mul (2 * H t) rw [congr_fun (congr_arg deriv hfirst_fun) 0, hsecond.deriv] rw [lhs_eq, rhs_eq] at key linarithIf H is smooth, then the d'Alembert equation forces H''(t) = H''(0) H(t). dAlembert_to_ODE_general_theorem · IndisputableMonolith/Cost/FunctionalEquation.lean