theorem
proved
ode_neg_zero_uniqueness
show as:
view math explainer →
open explainer
Generate a durable explainer page for this declaration.
open lean source
IndisputableMonolith.Foundation.AxiomDischargePlan on GitHub at line 76.
browse module
All declarations in this module, on Recognition.
explainer page
depends on
used by
formal source
73/-- **Zero uniqueness for `f'' = -f`**: if `f(0)=0` and `f'(0)=0`,
74then `f ≡ 0`. Proof by conservation of the energy
75`E(t) = f(t)^2 + f'(t)^2`. -/
76theorem ode_neg_zero_uniqueness (f : ℝ → ℝ)
77 (h_diff2 : ContDiff ℝ 2 f)
78 (h_ode : ∀ t, deriv (deriv f) t = -(f t))
79 (h_f0 : f 0 = 0) (h_f'0 : deriv f 0 = 0) :
80 ∀ t, f t = 0 := by
81 have h_d1 : Differentiable ℝ f := h_diff2.differentiable (by decide : (2 : WithTop ℕ∞) ≠ 0)
82 have hCD1 : ContDiff ℝ 1 (deriv f) := by
83 rw [show (2 : WithTop ℕ∞) = 1 + 1 from rfl] at h_diff2
84 rw [contDiff_succ_iff_deriv] at h_diff2
85 exact h_diff2.2.2
86 have h_dd : Differentiable ℝ (deriv f) :=
87 hCD1.differentiable (by decide : (1 : WithTop ℕ∞) ≠ 0)
88 have hE_deriv_zero : ∀ s, deriv (fun t => f t ^ 2 + deriv f t ^ 2) s = 0 := by
89 intro s
90 have h1 : HasDerivAt (fun x => f x ^ 2 + deriv f x ^ 2)
91 (↑2 * f s ^ (2 - 1) * deriv f s + ↑2 * deriv f s ^ (2 - 1) * deriv (deriv f) s) s :=
92 ((h_d1 s).hasDerivAt.pow 2).add ((h_dd s).hasDerivAt.pow 2)
93 have h2 := h1.deriv
94 rw [h_ode s] at h2
95 push_cast at h2
96 simp only [pow_one] at h2
97 linarith
98 have hE_eq := is_const_of_deriv_eq_zero
99 (show Differentiable ℝ (fun t => f t ^ 2 + deriv f t ^ 2) from
100 (h_d1.pow 2).add (h_dd.pow 2))
101 hE_deriv_zero
102 intro t
103 have hE0 : f 0 ^ 2 + deriv f 0 ^ 2 = 0 := by rw [h_f0, h_f'0]; ring
104 have hEt := hE_eq t 0
105 simp only [hE0] at hEt
106 nlinarith [sq_nonneg (f t), sq_nonneg (deriv f t)]