theorem
proved
dAlembert_contDiff_smooth
show as:
view math explainer →
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
depends on
-
H -
dAlembert_contDiff_nat -
smooth -
dAlembert_contDiff_nat -
dAlembert_contDiff_smooth -
smooth -
H -
Phase -
Phase
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 :=