pith. machine review for the scientific record. sign in
theorem

dAlembert_contDiff_smooth

proved
show as:
view math explainer →
module
IndisputableMonolith.Cost.AczelProof
domain
Cost
line
165 · github
papers citing
none yet

open explainer

Generate a durable explainer page for this declaration.

open lean source

IndisputableMonolith.Cost.AczelProof on GitHub at line 165.

browse module

All declarations in this module, on Recognition.

explainer page

Tracked in the explainer inventory; generation is lazy so crawlers do not trigger LLM jobs.

open explainer

depends on

used by

formal source

 162      (h1.sub h2).div_const _
 163    exact (funext h_rep) ▸ h4
 164
 165private theorem dAlembert_contDiff_smooth (H : ℝ → ℝ) (h_one : H 0 = 1) (h_cont : Continuous H)
 166    (h_dAl : ∀ t u, H (t + u) + H (t - u) = 2 * H t * H u) :
 167    ContDiff ℝ smooth H :=
 168  contDiff_infty.mpr (dAlembert_contDiff_nat H h_one h_cont h_dAl)
 169
 170/-! ## Phase 2: General ODE Derivation -/
 171
 172private theorem dAlembert_to_ODE_general (H : ℝ → ℝ)
 173    (h_smooth : ContDiff ℝ smooth H)
 174    (h_dAl : ∀ t u, H (t + u) + H (t - u) = 2 * H t * H u) :
 175    ∀ t, deriv (deriv H) t = deriv (deriv H) 0 * H t := by
 176  have h2 : ContDiff ℝ 2 H := by exact_mod_cast (contDiff_infty.mp h_smooth) 2
 177  have hDiff : Differentiable ℝ H := h2.differentiable (by decide : (2 : WithTop ℕ∞) ≠ 0)
 178  have hCDiff1_H' : ContDiff ℝ 1 (deriv H) := by
 179    rw [show (2 : WithTop ℕ∞) = 1 + 1 from rfl] at h2
 180    rw [contDiff_succ_iff_deriv] at h2; exact h2.2.2
 181  have hDiffDeriv : Differentiable ℝ (deriv H) :=
 182    hCDiff1_H'.differentiable (by decide : (1 : WithTop ℕ∞) ≠ 0)
 183  have hsh_add : ∀ (s v : ℝ), HasDerivAt (fun u => s + u) (1 : ℝ) v := fun s v => by
 184    have h := (hasDerivAt_id v).add_const s; simp only [id] at h
 185    rwa [show (fun u : ℝ => u + s) = fun u => s + u from funext fun u => add_comm u s] at h
 186  have hsh_sub : ∀ (s v : ℝ), HasDerivAt (fun u => s - u) (-1 : ℝ) v := fun s v => by
 187    have h1 : HasDerivAt (fun u : ℝ => -u) (-1 : ℝ) v := by
 188      have := (hasDerivAt_id v).neg; simp only [id] at this; exact this
 189    have h2 := h1.const_add s
 190    rwa [show (fun u : ℝ => s + -u) = fun u => s - u from funext fun u => by ring] at h2
 191  intro t
 192  have h_feq : (fun u => H (t + u) + H (t - u)) = (fun u => 2 * H t * H u) :=
 193    funext (h_dAl t)
 194  have key : deriv (deriv (fun u => H (t + u) + H (t - u))) 0 =
 195             deriv (deriv (fun u => 2 * H t * H u)) 0 :=