Encyclopedia Foundation Foundation Axiom Discharge Plan
ARTICLE 4 claims 4 theorems
Foundation Axiom Discharge Plan
A classical equation from 1968, once assumed as an axiom, is now proved from simpler pieces inside the Recognition Science framework.
The discharge plan
The plan concerns the d'Alembert functional equation, a classical relation that asks for functions H satisfying H(x + y) + H(x − y) = 2H(x)H(y). Its continuous solutions were classified in 1968 by János Aczél and Pl. Kannappan: the solutions are the constant 1, the hyperbolic cosine cosh(αx), and the cosine cos(βx). This classification is a standard result in functional equations, and Recognition Science's machine-checked library of formal theorems had previously recorded it as a named classical input, an axiom rather than a proved statement.
The discharge plan is the work of replacing that axiom with a proof. The key observation is that a smooth solution H with H(0) = 1 satisfies the ordinary differential equation H''(t) = H''(0)·H(t), a bridge proved in the framework's cost functional equation module. The sign of H''(0) then decides the solution family: zero gives the constant 1, positive gives cosh, negative gives cosine. Each case reduces to a standard uniqueness theorem for a linear ODE with prescribed initial conditions. For example, a C² function f satisfying f'' = −f with f(0) = 1 and f'(0) = 0 must be exactly cos(t), proved by an energy method. The cosine case rescales to this unit-frequency result, and the cosh case rescales to the already-proved cosh solution theorem.
In Recognition Science, this discharge matters because the framework's central result, the forced cost function J(x) = (x + 1/x)/2 − 1, relies on the d'Alembert classification. The plan turns a borrowed classical theorem into a proved consequence of the framework's own structure. The module AxiomDischargePlan contains the four proved theorems: ode_constant_case, ode_cosine_case, cosh_rescaling_lemma, and aczel_kannappan_via_cases, each with no sorry or local axiom declarations. The original opaque axiom is now a corollary of these pieces plus the framework's existing smoothness lifting.
The practical upshot is a cleaner foundation. Where the framework once leaned on an unproved classical input, it now derives the same result from a finite, concrete combination of ODE uniqueness theorems. This is part of a broader program to reduce every external assumption to proved statements, making the framework's logical spine more transparent and self-contained.
THEOREM dAlembert_to_ODE_general · IndisputableMonolith/Foundation/AxiomDischargePlan.lean
/-- **General ODE bridge (proved in `Cost.FunctionalEquation`)**: a smooth
d'Alembert solution `H` with `H(0) = 1` satisfies `H''(t) = H''(0) · H(t)`
for every `t`. This is the universal form of the existing
`dAlembert_to_ODE_theorem`, which only states the special case
`H''(0) = 1`. The general statement follows from the same calculation
with no normalization. -/
theorem dAlembert_to_ODE_general
(H : ℝ → ℝ) (h_smooth : ContDiff ℝ ⊤ H)
(h_dAlembert : ∀ x y, H (x + y) + H (x - y) = 2 * H x * H y) :
∀ t, deriv (deriv H) t = (deriv (deriv H) 0) * H t :=
dAlembert_to_ODE_general_theorem H h_smooth h_dAlembert
THEOREM ode_neg_zero_uniqueness · IndisputableMonolith/Foundation/AxiomDischargePlan.lean
/-- **Zero uniqueness for `f'' = -f`**: if `f(0)=0` and `f'(0)=0`,
then `f ≡ 0`. Proof by conservation of the energy
`E(t) = f(t)^2 + f'(t)^2`. -/
theorem ode_neg_zero_uniqueness (f : ℝ → ℝ)
(h_diff2 : ContDiff ℝ 2 f)
(h_ode : ∀ t, deriv (deriv f) t = -(f t))
(h_f0 : f 0 = 0) (h_f'0 : deriv f 0 = 0) :
∀ t, f t = 0 := by
have h_d1 : Differentiable ℝ f := h_diff2.differentiable (by decide : (2 : WithTop ℕ∞) ≠ 0)
have hCD1 : ContDiff ℝ 1 (deriv f) := by
rw [show (2 : WithTop ℕ∞) = 1 + 1 from rfl] at h_diff2
rw [contDiff_succ_iff_deriv] at h_diff2
exact h_diff2.2.2
have h_dd : Differentiable ℝ (deriv f) :=
hCD1.differentiable (by decide : (1 : WithTop ℕ∞) ≠ 0)
have hE_deriv_zero : ∀ s, deriv (fun t => f t ^ 2 + deriv f t ^ 2) s = 0 := by
intro s
have h1 : HasDerivAt (fun x => f x ^ 2 + deriv f x ^ 2)
(↑2 * f s ^ (2 - 1) * deriv f s + ↑2 * deriv f s ^ (2 - 1) * deriv (deriv f) s) s :=
((h_d1 s).hasDerivAt.pow 2).add ((h_dd s).hasDerivAt.pow 2)
have h2 := h1.deriv
rw [h_ode s] at h2
push_cast at h2
simp only [pow_one] at h2
linarith
have hE_eq := is_const_of_deriv_eq_zero
(show Differentiable ℝ (fun t => f t ^ 2 + deriv f t ^ 2) from
(h_d1.pow 2).add (h_dd.pow 2))
hE_deriv_zero
intro t
have hE0 : f 0 ^ 2 + deriv f 0 ^ 2 = 0 := by rw [h_f0, h_f'0]; ring
have hEt := hE_eq t 0
simp only [hE0] at hEt
nlinarith [sq_nonneg (f t), sq_nonneg (deriv f t)]
THEOREM ode_cos_unit_uniqueness · IndisputableMonolith/Foundation/AxiomDischargePlan.lean
/-- **Unit-frequency cosine uniqueness**: a C² solution of `f'' = -f`
with `f(0)=1` and `f'(0)=0` is `cos`. -/
theorem ode_cos_unit_uniqueness (f : ℝ → ℝ)
(h_diff : ContDiff ℝ 2 f)
(h_ode : ∀ t, deriv (deriv f) t = -(f t))
(h_f0 : f 0 = 1) (h_f'0 : deriv f 0 = 0) :
∀ t, f t = Real.cos t := by
let g := fun t => f t - Real.cos t
have hg_diff : ContDiff ℝ 2 g := h_diff.sub Real.contDiff_cos
have hDf : Differentiable ℝ f :=
h_diff.differentiable (by decide : (2 : WithTop ℕ∞) ≠ 0)
have hg_ode : ∀ t, deriv (deriv g) t = -(g t) := by
intro t
have h1 : deriv g = fun s => deriv f s - deriv Real.cos s :=
funext fun s => deriv_sub hDf.differentiableAt Real.differentiable_cos.differentiableAt
have hDf1 : ContDiff ℝ 1 (deriv f) := by
rw [show (2 : WithTop ℕ∞) = 1 + 1 from rfl] at h_diff
exact (contDiff_succ_iff_deriv.mp h_diff).2.2
have hDcos1 : ContDiff ℝ 1 (deriv Real.cos) := by
rw [Real.deriv_cos']; exact Real.contDiff_sin.neg
have h2 : deriv (deriv g) t = deriv (deriv f) t - deriv (deriv Real.cos) t := by
rw [h1]
exact deriv_sub
(hDf1.differentiable (by decide : (1 : WithTop ℕ∞) ≠ 0) |>.differentiableAt)
(hDcos1.differentiable (by decide : (1 : WithTop ℕ∞) ≠ 0) |>.differentiableAt)
rw [h2, h_ode t]
have : deriv (deriv Real.cos) t = -(Real.cos t) := by
have h_dcos : deriv Real.cos = fun x => -Real.sin x := Real.deriv_cos'
rw [h_dcos]
exact (Real.hasDerivAt_sin t).neg.deriv
rw [this]
ring
have hg0 : g 0 = 0 := by simp [g, h_f0, Real.cos_zero]
have hg'0 : deriv g 0 = 0 := by
have : deriv g 0 = deriv f 0 - deriv Real.cos 0 :=
deriv_sub hDf.differentiableAt Real.differentiable_cos.differentiableAt
rw [this, h_f'0, Real.deriv_cos, Real.sin_zero, neg_zero, sub_zero]
intro t
linarith [ode_neg_zero_uniqueness g hg_diff hg_ode hg0 hg'0 t]
THEOREM aczel_kannappan_via_cases · IndisputableMonolith/Foundation/AxiomDischargePlan.lean
/-- **Aczél–Kannappan via the explicit reduction**: the discharge
puts the three cases together. We retain the conclusion's form to
match the original axiom. -/
theorem aczel_kannappan_via_cases
[AczelSmoothnessPackage]
(H : ℝ → ℝ) (h_cont : Continuous H) (h_one : H 0 = 1)
(h_dAlembert : ∀ x y, H (x + y) + H (x - y) = 2 * H x * H y)
(h_smooth : ContDiff ℝ ⊤ H) (h_deriv0 : deriv H 0 = 0)
(h_classification : (deriv (deriv H) 0 = 0)
∨ (∃ α : ℝ, 0 < α ∧ deriv (deriv H) 0 = α ^ 2)
∨ (∃ β : ℝ, 0 < β ∧ deriv (deriv H) 0 = -β ^ 2)) :
(∀ x, H x = 1) ∨
(∃ α : ℝ, ∀ x, H x = Real.cosh (α * x)) ∨
(∃ β : ℝ, ∀ x, H x = Real.cos (β * x)) := by
have h_smooth2 : ContDiff ℝ 2 H := h_smooth.of_le le_top
rcases h_classification with h0 | ⟨α, hα, hα2⟩ | ⟨β, hβ, hβ2⟩
· left
intro x
exact ode_constant_case H h_smooth2 h_one h_deriv0
(by
intro y
have hb := dAlembert_to_ODE_general H h_smooth h_dAlembert y
rw [h0] at hb; simpa using hb) x
· right; left
refine ⟨α, ?_⟩
intro x
exact cosh_rescaling_lemma H h_one h_cont h_dAlembert hα hα2 x
· right; right
refine ⟨β, ?_⟩
intro x
have h_bridge : ∀ y, deriv (deriv H) y = -β ^ 2 * H y := by
intro y
have hb := dAlembert_to_ODE_general H h_smooth h_dAlembert y
rw [hb, hβ2]
exact ode_cosine_case H h_smooth2 h_one h_deriv0 hβ h_bridge x
What this page does not claim
The discharge plan does not prove the full Aczél–Kannappan classification without the smoothness assumption; it relies on the framework's AczelSmoothnessPackage. This module does not derive the cost function J itself; it only discharges a classical input used in that derivation. The plan does not claim the original axiom was false, only that it is now redundant.
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/AxiomDischargePlan.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 are the remaining named classical axioms in the framework that have not yet been discharged?
- How does the Aczél–Kannappan classification connect to the forcing of the golden ratio and the eight-tick cycle?
- What is the AczelSmoothnessPackage and how does it lift continuity to smoothness in the discharge proof?
MACHINE LAYER · GROUNDED CLAIM TABLE · CLICK TO EXPAND
THEOREM dAlembert_to_ODE_general · IndisputableMonolith/Foundation/AxiomDischargePlan.lean
/-- **General ODE bridge (proved in `Cost.FunctionalEquation`)**: a smooth d'Alembert solution `H` with `H(0) = 1` satisfies `H''(t) = H''(0) · H(t)` for every `t`. This is the universal form of the existing `dAlembert_to_ODE_theorem`, which only states the special case `H''(0) = 1`. The general statement follows from the same calculation with no normalization. -/ theorem dAlembert_to_ODE_general (H : ℝ → ℝ) (h_smooth : ContDiff ℝ ⊤ H) (h_dAlembert : ∀ x y, H (x + y) + H (x - y) = 2 * H x * H y) : ∀ t, deriv (deriv H) t = (deriv (deriv H) 0) * H t := dAlembert_to_ODE_general_theorem H h_smooth h_dAlembertA smooth solution H of the d'Alembert equation with H(0) = 1 satisfies H''(t) = H''(0)·H(t). dAlembert_to_ODE_general · IndisputableMonolith/Foundation/AxiomDischargePlan.leanTHEOREM ode_neg_zero_uniqueness · IndisputableMonolith/Foundation/AxiomDischargePlan.lean
/-- **Zero uniqueness for `f'' = -f`**: if `f(0)=0` and `f'(0)=0`, then `f ≡ 0`. Proof by conservation of the energy `E(t) = f(t)^2 + f'(t)^2`. -/ theorem ode_neg_zero_uniqueness (f : ℝ → ℝ) (h_diff2 : ContDiff ℝ 2 f) (h_ode : ∀ t, deriv (deriv f) t = -(f t)) (h_f0 : f 0 = 0) (h_f'0 : deriv f 0 = 0) : ∀ t, f t = 0 := by have h_d1 : Differentiable ℝ f := h_diff2.differentiable (by decide : (2 : WithTop ℕ∞) ≠ 0) have hCD1 : ContDiff ℝ 1 (deriv f) := by rw [show (2 : WithTop ℕ∞) = 1 + 1 from rfl] at h_diff2 rw [contDiff_succ_iff_deriv] at h_diff2 exact h_diff2.2.2 have h_dd : Differentiable ℝ (deriv f) := hCD1.differentiable (by decide : (1 : WithTop ℕ∞) ≠ 0) have hE_deriv_zero : ∀ s, deriv (fun t => f t ^ 2 + deriv f t ^ 2) s = 0 := by intro s have h1 : HasDerivAt (fun x => f x ^ 2 + deriv f x ^ 2) (↑2 * f s ^ (2 - 1) * deriv f s + ↑2 * deriv f s ^ (2 - 1) * deriv (deriv f) s) s := ((h_d1 s).hasDerivAt.pow 2).add ((h_dd s).hasDerivAt.pow 2) have h2 := h1.deriv rw [h_ode s] at h2 push_cast at h2 simp only [pow_one] at h2 linarith have hE_eq := is_const_of_deriv_eq_zero (show Differentiable ℝ (fun t => f t ^ 2 + deriv f t ^ 2) from (h_d1.pow 2).add (h_dd.pow 2)) hE_deriv_zero intro t have hE0 : f 0 ^ 2 + deriv f 0 ^ 2 = 0 := by rw [h_f0, h_f'0]; ring have hEt := hE_eq t 0 simp only [hE0] at hEt nlinarith [sq_nonneg (f t), sq_nonneg (deriv f t)]A C² function f satisfying f'' = −f with f(0) = 0 and f'(0) = 0 is identically zero. ode_neg_zero_uniqueness · IndisputableMonolith/Foundation/AxiomDischargePlan.leanTHEOREM ode_cos_unit_uniqueness · IndisputableMonolith/Foundation/AxiomDischargePlan.lean
/-- **Unit-frequency cosine uniqueness**: a C² solution of `f'' = -f` with `f(0)=1` and `f'(0)=0` is `cos`. -/ theorem ode_cos_unit_uniqueness (f : ℝ → ℝ) (h_diff : ContDiff ℝ 2 f) (h_ode : ∀ t, deriv (deriv f) t = -(f t)) (h_f0 : f 0 = 1) (h_f'0 : deriv f 0 = 0) : ∀ t, f t = Real.cos t := by let g := fun t => f t - Real.cos t have hg_diff : ContDiff ℝ 2 g := h_diff.sub Real.contDiff_cos have hDf : Differentiable ℝ f := h_diff.differentiable (by decide : (2 : WithTop ℕ∞) ≠ 0) have hg_ode : ∀ t, deriv (deriv g) t = -(g t) := by intro t have h1 : deriv g = fun s => deriv f s - deriv Real.cos s := funext fun s => deriv_sub hDf.differentiableAt Real.differentiable_cos.differentiableAt have hDf1 : ContDiff ℝ 1 (deriv f) := by rw [show (2 : WithTop ℕ∞) = 1 + 1 from rfl] at h_diff exact (contDiff_succ_iff_deriv.mp h_diff).2.2 have hDcos1 : ContDiff ℝ 1 (deriv Real.cos) := by rw [Real.deriv_cos']; exact Real.contDiff_sin.neg have h2 : deriv (deriv g) t = deriv (deriv f) t - deriv (deriv Real.cos) t := by rw [h1] exact deriv_sub (hDf1.differentiable (by decide : (1 : WithTop ℕ∞) ≠ 0) |>.differentiableAt) (hDcos1.differentiable (by decide : (1 : WithTop ℕ∞) ≠ 0) |>.differentiableAt) rw [h2, h_ode t] have : deriv (deriv Real.cos) t = -(Real.cos t) := by have h_dcos : deriv Real.cos = fun x => -Real.sin x := Real.deriv_cos' rw [h_dcos] exact (Real.hasDerivAt_sin t).neg.deriv rw [this] ring have hg0 : g 0 = 0 := by simp [g, h_f0, Real.cos_zero] have hg'0 : deriv g 0 = 0 := by have : deriv g 0 = deriv f 0 - deriv Real.cos 0 := deriv_sub hDf.differentiableAt Real.differentiable_cos.differentiableAt rw [this, h_f'0, Real.deriv_cos, Real.sin_zero, neg_zero, sub_zero] intro t linarith [ode_neg_zero_uniqueness g hg_diff hg_ode hg0 hg'0 t]A C² solution of f'' = −f with f(0) = 1 and f'(0) = 0 is exactly cos(t). ode_cos_unit_uniqueness · IndisputableMonolith/Foundation/AxiomDischargePlan.leanTHEOREM aczel_kannappan_via_cases · IndisputableMonolith/Foundation/AxiomDischargePlan.lean
/-- **Aczél–Kannappan via the explicit reduction**: the discharge puts the three cases together. We retain the conclusion's form to match the original axiom. -/ theorem aczel_kannappan_via_cases [AczelSmoothnessPackage] (H : ℝ → ℝ) (h_cont : Continuous H) (h_one : H 0 = 1) (h_dAlembert : ∀ x y, H (x + y) + H (x - y) = 2 * H x * H y) (h_smooth : ContDiff ℝ ⊤ H) (h_deriv0 : deriv H 0 = 0) (h_classification : (deriv (deriv H) 0 = 0) ∨ (∃ α : ℝ, 0 < α ∧ deriv (deriv H) 0 = α ^ 2) ∨ (∃ β : ℝ, 0 < β ∧ deriv (deriv H) 0 = -β ^ 2)) : (∀ x, H x = 1) ∨ (∃ α : ℝ, ∀ x, H x = Real.cosh (α * x)) ∨ (∃ β : ℝ, ∀ x, H x = Real.cos (β * x)) := by have h_smooth2 : ContDiff ℝ 2 H := h_smooth.of_le le_top rcases h_classification with h0 | ⟨α, hα, hα2⟩ | ⟨β, hβ, hβ2⟩ · left intro x exact ode_constant_case H h_smooth2 h_one h_deriv0 (by intro y have hb := dAlembert_to_ODE_general H h_smooth h_dAlembert y rw [h0] at hb; simpa using hb) x · right; left refine ⟨α, ?_⟩ intro x exact cosh_rescaling_lemma H h_one h_cont h_dAlembert hα hα2 x · right; right refine ⟨β, ?_⟩ intro x have h_bridge : ∀ y, deriv (deriv H) y = -β ^ 2 * H y := by intro y have hb := dAlembert_to_ODE_general H h_smooth h_dAlembert y rw [hb, hβ2] exact ode_cosine_case H h_smooth2 h_one h_deriv0 hβ h_bridge xThe Aczél–Kannappan classification is proved from the three ODE cases. aczel_kannappan_via_cases · IndisputableMonolith/Foundation/AxiomDischargePlan.lean