Skip to content

Commit 4bde836

Browse files
winstonyingrunweg
andcommitted
feat: uniqueness of integral curves of a vector field on a manifold (#8886)
We prove the uniqueness of integral curves of a vector field on a manifold using the uniqueness theorem for solutions to ODEs. Co-authored-by: Michael Rothgang <rothgami@math.hu-berlin.de>
1 parent 2475f30 commit 4bde836

File tree

4 files changed

+391
-66
lines changed

4 files changed

+391
-66
lines changed

Mathlib/Algebra/Order/Ring/Abs.lean

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,12 @@ lemma sq_eq_sq_iff_abs_eq_abs (a b : α) : a ^ 2 = b ^ 2 ↔ |a| = |b| := by
158158
simpa only [one_pow, abs_one] using @sq_lt_sq _ _ 1 a
159159
#align one_lt_sq_iff_one_lt_abs one_lt_sq_iff_one_lt_abs
160160

161+
lemma exists_abs_lt {α : Type*} [LinearOrderedRing α] (a : α) : ∃ b > 0, |a| < b := by
162+
refine ⟨|a| + 1, lt_of_lt_of_le zero_lt_one <| by simp, ?_⟩
163+
cases' le_or_lt 0 a with ht ht
164+
· simp only [abs_of_nonneg ht, lt_add_iff_pos_right, zero_lt_one]
165+
· simp only [abs_of_neg ht, lt_add_iff_pos_right, zero_lt_one]
166+
161167
end LinearOrderedRing
162168

163169
section LinearOrderedCommRing

Mathlib/Analysis/ODE/Gronwall.lean

Lines changed: 160 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -144,19 +144,24 @@ theorem norm_le_gronwallBound_of_norm_deriv_right_le {f f' : ℝ → E} {δ K ε
144144
(fun x hx _r hr => (hf' x hx).liminf_right_slope_norm_le hr) ha bound
145145
#align norm_le_gronwall_bound_of_norm_deriv_right_le norm_le_gronwallBound_of_norm_deriv_right_le
146146

147+
variable {v : ℝ → E → E} {s : ℝ → Set E} {K : ℝ≥0} {f g f' g' : ℝ → E} {a b t₀ : ℝ} {εf εg δ : ℝ}
148+
(hv : ∀ t, LipschitzOnWith K (v t) (s t))
149+
147150
/-- If `f` and `g` are two approximate solutions of the same ODE, then the distance between them
148151
can't grow faster than exponentially. This is a simple corollary of Grönwall's inequality, and some
149152
people call this Grönwall's inequality too.
150153
151154
This version assumes all inequalities to be true in some time-dependent set `s t`,
152155
and assumes that the solutions never leave this set. -/
153-
theorem dist_le_of_approx_trajectories_ODE_of_mem_set {v : ℝ → E → E} {s : ℝ → Set E} {K : ℝ≥0}
154-
(hv : ∀ t, LipschitzOnWith K (v t) (s t))
155-
{f g f' g' : ℝ → E} {a b : ℝ} {εf εg δ : ℝ} (hf : ContinuousOn f (Icc a b))
156+
theorem dist_le_of_approx_trajectories_ODE_of_mem
157+
(hf : ContinuousOn f (Icc a b))
156158
(hf' : ∀ t ∈ Ico a b, HasDerivWithinAt f (f' t) (Ici t) t)
157-
(f_bound : ∀ t ∈ Ico a b, dist (f' t) (v t (f t)) ≤ εf) (hfs : ∀ t ∈ Ico a b, f t ∈ s t)
158-
(hg : ContinuousOn g (Icc a b)) (hg' : ∀ t ∈ Ico a b, HasDerivWithinAt g (g' t) (Ici t) t)
159-
(g_bound : ∀ t ∈ Ico a b, dist (g' t) (v t (g t)) ≤ εg) (hgs : ∀ t ∈ Ico a b, g t ∈ s t)
159+
(f_bound : ∀ t ∈ Ico a b, dist (f' t) (v t (f t)) ≤ εf)
160+
(hfs : ∀ t ∈ Ico a b, f t ∈ s t)
161+
(hg : ContinuousOn g (Icc a b))
162+
(hg' : ∀ t ∈ Ico a b, HasDerivWithinAt g (g' t) (Ici t) t)
163+
(g_bound : ∀ t ∈ Ico a b, dist (g' t) (v t (g t)) ≤ εg)
164+
(hgs : ∀ t ∈ Ico a b, g t ∈ s t)
160165
(ha : dist (f a) (g a) ≤ δ) :
161166
∀ t ∈ Icc a b, dist (f t) (g t) ≤ gronwallBound δ K (εf + εg) (t - a) := by
162167
simp only [dist_eq_norm] at ha ⊢
@@ -170,22 +175,25 @@ theorem dist_le_of_approx_trajectories_ODE_of_mem_set {v : ℝ → E → E} {s :
170175
refine this.trans ((add_le_add (add_le_add (f_bound t ht) (g_bound t ht)) hv).trans ?_)
171176
rw [add_comm]
172177
set_option linter.uppercaseLean3 false in
173-
#align dist_le_of_approx_trajectories_ODE_of_mem_set dist_le_of_approx_trajectories_ODE_of_mem_set
178+
#align dist_le_of_approx_trajectories_ODE_of_mem_set dist_le_of_approx_trajectories_ODE_of_mem
174179

175180
/-- If `f` and `g` are two approximate solutions of the same ODE, then the distance between them
176181
can't grow faster than exponentially. This is a simple corollary of Grönwall's inequality, and some
177182
people call this Grönwall's inequality too.
178183
179184
This version assumes all inequalities to be true in the whole space. -/
180-
theorem dist_le_of_approx_trajectories_ODE {v : ℝ → E → E} {K : ℝ≥0}
181-
(hv : ∀ t, LipschitzWith K (v t)) {f g f' g' : ℝ → E} {a b : ℝ} {εf εg δ : ℝ}
182-
(hf : ContinuousOn f (Icc a b)) (hf' : ∀ t ∈ Ico a b, HasDerivWithinAt f (f' t) (Ici t) t)
183-
(f_bound : ∀ t ∈ Ico a b, dist (f' t) (v t (f t)) ≤ εf) (hg : ContinuousOn g (Icc a b))
185+
theorem dist_le_of_approx_trajectories_ODE
186+
(hv : ∀ t, LipschitzWith K (v t))
187+
(hf : ContinuousOn f (Icc a b))
188+
(hf' : ∀ t ∈ Ico a b, HasDerivWithinAt f (f' t) (Ici t) t)
189+
(f_bound : ∀ t ∈ Ico a b, dist (f' t) (v t (f t)) ≤ εf)
190+
(hg : ContinuousOn g (Icc a b))
184191
(hg' : ∀ t ∈ Ico a b, HasDerivWithinAt g (g' t) (Ici t) t)
185-
(g_bound : ∀ t ∈ Ico a b, dist (g' t) (v t (g t)) ≤ εg) (ha : dist (f a) (g a) ≤ δ) :
192+
(g_bound : ∀ t ∈ Ico a b, dist (g' t) (v t (g t)) ≤ εg)
193+
(ha : dist (f a) (g a) ≤ δ) :
186194
∀ t ∈ Icc a b, dist (f t) (g t) ≤ gronwallBound δ K (εf + εg) (t - a) :=
187195
have hfs : ∀ t ∈ Ico a b, f t ∈ @univ E := fun _ _ => trivial
188-
dist_le_of_approx_trajectories_ODE_of_mem_set (fun t => (hv t).lipschitzOnWith _) hf hf'
196+
dist_le_of_approx_trajectories_ODE_of_mem (fun t => (hv t).lipschitzOnWith _) hf hf'
189197
f_bound hfs hg hg' g_bound (fun _ _ => trivial) ha
190198
set_option linter.uppercaseLean3 false in
191199
#align dist_le_of_approx_trajectories_ODE dist_le_of_approx_trajectories_ODE
@@ -196,34 +204,37 @@ people call this Grönwall's inequality too.
196204
197205
This version assumes all inequalities to be true in some time-dependent set `s t`,
198206
and assumes that the solutions never leave this set. -/
199-
theorem dist_le_of_trajectories_ODE_of_mem_set {v : ℝ → E → E} {s : ℝ → Set E} {K : ℝ≥0}
200-
(hv : ∀ t, LipschitzOnWith K (v t) (s t))
201-
{f g : ℝ → E} {a b : ℝ} {δ : ℝ} (hf : ContinuousOn f (Icc a b))
202-
(hf' : ∀ t ∈ Ico a b, HasDerivWithinAt f (v t (f t)) (Ici t) t) (hfs : ∀ t ∈ Ico a b, f t ∈ s t)
207+
theorem dist_le_of_trajectories_ODE_of_mem
208+
(hf : ContinuousOn f (Icc a b))
209+
(hf' : ∀ t ∈ Ico a b, HasDerivWithinAt f (v t (f t)) (Ici t) t)
210+
(hfs : ∀ t ∈ Ico a b, f t ∈ s t)
203211
(hg : ContinuousOn g (Icc a b)) (hg' : ∀ t ∈ Ico a b, HasDerivWithinAt g (v t (g t)) (Ici t) t)
204212
(hgs : ∀ t ∈ Ico a b, g t ∈ s t) (ha : dist (f a) (g a) ≤ δ) :
205213
∀ t ∈ Icc a b, dist (f t) (g t) ≤ δ * exp (K * (t - a)) := by
206214
have f_bound : ∀ t ∈ Ico a b, dist (v t (f t)) (v t (f t)) ≤ 0 := by intros; rw [dist_self]
207215
have g_bound : ∀ t ∈ Ico a b, dist (v t (g t)) (v t (g t)) ≤ 0 := by intros; rw [dist_self]
208216
intro t ht
209217
have :=
210-
dist_le_of_approx_trajectories_ODE_of_mem_set hv hf hf' f_bound hfs hg hg' g_bound hgs ha t ht
218+
dist_le_of_approx_trajectories_ODE_of_mem hv hf hf' f_bound hfs hg hg' g_bound hgs ha t ht
211219
rwa [zero_add, gronwallBound_ε0] at this
212220
set_option linter.uppercaseLean3 false in
213-
#align dist_le_of_trajectories_ODE_of_mem_set dist_le_of_trajectories_ODE_of_mem_set
221+
#align dist_le_of_trajectories_ODE_of_mem_set dist_le_of_trajectories_ODE_of_mem
214222

215223
/-- If `f` and `g` are two exact solutions of the same ODE, then the distance between them
216224
can't grow faster than exponentially. This is a simple corollary of Grönwall's inequality, and some
217225
people call this Grönwall's inequality too.
218226
219227
This version assumes all inequalities to be true in the whole space. -/
220-
theorem dist_le_of_trajectories_ODE {v : ℝ → E → E} {K : ℝ≥0} (hv : ∀ t, LipschitzWith K (v t))
221-
{f g : ℝ → E} {a b : ℝ} {δ : ℝ} (hf : ContinuousOn f (Icc a b))
222-
(hf' : ∀ t ∈ Ico a b, HasDerivWithinAt f (v t (f t)) (Ici t) t) (hg : ContinuousOn g (Icc a b))
223-
(hg' : ∀ t ∈ Ico a b, HasDerivWithinAt g (v t (g t)) (Ici t) t) (ha : dist (f a) (g a) ≤ δ) :
228+
theorem dist_le_of_trajectories_ODE
229+
(hv : ∀ t, LipschitzWith K (v t))
230+
(hf : ContinuousOn f (Icc a b))
231+
(hf' : ∀ t ∈ Ico a b, HasDerivWithinAt f (v t (f t)) (Ici t) t)
232+
(hg : ContinuousOn g (Icc a b))
233+
(hg' : ∀ t ∈ Ico a b, HasDerivWithinAt g (v t (g t)) (Ici t) t)
234+
(ha : dist (f a) (g a) ≤ δ) :
224235
∀ t ∈ Icc a b, dist (f t) (g t) ≤ δ * exp (K * (t - a)) :=
225236
have hfs : ∀ t ∈ Ico a b, f t ∈ @univ E := fun _ _ => trivial
226-
dist_le_of_trajectories_ODE_of_mem_set (fun t => (hv t).lipschitzOnWith _) hf hf' hfs hg
237+
dist_le_of_trajectories_ODE_of_mem (fun t => (hv t).lipschitzOnWith _) hf hf' hfs hg
227238
hg' (fun _ _ => trivial) ha
228239
set_option linter.uppercaseLean3 false in
229240
#align dist_le_of_trajectories_ODE dist_le_of_trajectories_ODE
@@ -233,26 +244,137 @@ a given initial value provided that the RHS is Lipschitz continuous in `x` withi
233244
and we consider only solutions included in `s`.
234245
235246
This version shows uniqueness in a closed interval `Icc a b`, where `a` is the initial time. -/
236-
theorem ODE_solution_unique_of_mem_set {v : ℝ → E → E} {s : ℝ → Set E} {K : ℝ≥0}
237-
(hv : ∀ t, LipschitzOnWith K (v t) (s t))
238-
{f g : ℝ → E} {a b : ℝ} (hf : ContinuousOn f (Icc a b))
239-
(hf' : ∀ t ∈ Ico a b, HasDerivWithinAt f (v t (f t)) (Ici t) t) (hfs : ∀ t ∈ Ico a b, f t ∈ s t)
240-
(hg : ContinuousOn g (Icc a b)) (hg' : ∀ t ∈ Ico a b, HasDerivWithinAt g (v t (g t)) (Ici t) t)
241-
(hgs : ∀ t ∈ Ico a b, g t ∈ s t) (ha : f a = g a) : EqOn f g (Icc a b) := fun t ht ↦ by
242-
have := dist_le_of_trajectories_ODE_of_mem_set hv hf hf' hfs hg hg' hgs (dist_le_zero.2 ha) t ht
247+
theorem ODE_solution_unique_of_mem_Icc_right
248+
(hf : ContinuousOn f (Icc a b))
249+
(hf' : ∀ t ∈ Ico a b, HasDerivWithinAt f (v t (f t)) (Ici t) t)
250+
(hfs : ∀ t ∈ Ico a b, f t ∈ s t)
251+
(hg : ContinuousOn g (Icc a b))
252+
(hg' : ∀ t ∈ Ico a b, HasDerivWithinAt g (v t (g t)) (Ici t) t)
253+
(hgs : ∀ t ∈ Ico a b, g t ∈ s t)
254+
(ha : f a = g a) :
255+
EqOn f g (Icc a b) := fun t ht ↦ by
256+
have := dist_le_of_trajectories_ODE_of_mem hv hf hf' hfs hg hg' hgs (dist_le_zero.2 ha) t ht
243257
rwa [zero_mul, dist_le_zero] at this
244258
set_option linter.uppercaseLean3 false in
245-
#align ODE_solution_unique_of_mem_set ODE_solution_unique_of_mem_set
259+
#align ODE_solution_unique_of_mem_set ODE_solution_unique_of_mem_Icc_right
260+
261+
/-- A time-reversed version of `ODE_solution_unique_of_mem_Icc_right`. Uniqueness is shown in a
262+
closed interval `Icc a b`, where `b` is the "initial" time. -/
263+
theorem ODE_solution_unique_of_mem_Icc_left
264+
(hf : ContinuousOn f (Icc a b))
265+
(hf' : ∀ t ∈ Ioc a b, HasDerivWithinAt f (v t (f t)) (Iic t) t)
266+
(hfs : ∀ t ∈ Ioc a b, f t ∈ s t)
267+
(hg : ContinuousOn g (Icc a b))
268+
(hg' : ∀ t ∈ Ioc a b, HasDerivWithinAt g (v t (g t)) (Iic t) t)
269+
(hgs : ∀ t ∈ Ioc a b, g t ∈ s t)
270+
(hb : f b = g b) :
271+
EqOn f g (Icc a b) := by
272+
have hv' t : LipschitzOnWith K (Neg.neg ∘ (v (-t))) (s (-t)) := by
273+
rw [← one_mul K]
274+
exact LipschitzWith.id.neg.comp_lipschitzOnWith (hv _)
275+
have hmt1 : MapsTo Neg.neg (Icc (-b) (-a)) (Icc a b) :=
276+
fun _ ht ↦ ⟨le_neg.mp ht.2, neg_le.mp ht.1
277+
have hmt2 : MapsTo Neg.neg (Ico (-b) (-a)) (Ioc a b) :=
278+
fun _ ht ↦ ⟨lt_neg.mp ht.2, neg_le.mp ht.1
279+
have hmt3 (t : ℝ) : MapsTo Neg.neg (Ici t) (Iic (-t)) :=
280+
fun _ ht' ↦ mem_Iic.mpr <| neg_le_neg ht'
281+
suffices EqOn (f ∘ Neg.neg) (g ∘ Neg.neg) (Icc (-b) (-a)) by
282+
rw [eqOn_comp_right_iff] at this
283+
convert this
284+
simp
285+
apply ODE_solution_unique_of_mem_Icc_right hv'
286+
(hf.comp continuousOn_neg hmt1) _ (fun _ ht ↦ hfs _ (hmt2 ht))
287+
(hg.comp continuousOn_neg hmt1) _ (fun _ ht ↦ hgs _ (hmt2 ht)) (by simp [hb])
288+
· intros t ht
289+
convert HasFDerivWithinAt.comp_hasDerivWithinAt t (hf' (-t) (hmt2 ht))
290+
(hasDerivAt_neg t).hasDerivWithinAt (hmt3 t)
291+
simp
292+
· intros t ht
293+
convert HasFDerivWithinAt.comp_hasDerivWithinAt t (hg' (-t) (hmt2 ht))
294+
(hasDerivAt_neg t).hasDerivWithinAt (hmt3 t)
295+
simp
296+
297+
/-- A version of `ODE_solution_unique_of_mem_Icc_right` for uniqueness in a closed interval whose
298+
interior contains the initial time. -/
299+
theorem ODE_solution_unique_of_mem_Icc
300+
(ht : t₀ ∈ Ioo a b)
301+
(hf : ContinuousOn f (Icc a b))
302+
(hf' : ∀ t ∈ Ioo a b, HasDerivAt f (v t (f t)) t)
303+
(hfs : ∀ t ∈ Ioo a b, f t ∈ s t)
304+
(hg : ContinuousOn g (Icc a b))
305+
(hg' : ∀ t ∈ Ioo a b, HasDerivAt g (v t (g t)) t)
306+
(hgs : ∀ t ∈ Ioo a b, g t ∈ s t)
307+
(heq : f t₀ = g t₀) :
308+
EqOn f g (Icc a b) := by
309+
rw [← Icc_union_Icc_eq_Icc (le_of_lt ht.1) (le_of_lt ht.2)]
310+
apply EqOn.union
311+
· have hss : Ioc a t₀ ⊆ Ioo a b := Ioc_subset_Ioo_right ht.2
312+
exact ODE_solution_unique_of_mem_Icc_left hv
313+
(hf.mono <| Icc_subset_Icc_right <| le_of_lt ht.2)
314+
(fun _ ht' ↦ (hf' _ (hss ht')).hasDerivWithinAt) (fun _ ht' ↦ (hfs _ (hss ht')))
315+
(hg.mono <| Icc_subset_Icc_right <| le_of_lt ht.2)
316+
(fun _ ht' ↦ (hg' _ (hss ht')).hasDerivWithinAt) (fun _ ht' ↦ (hgs _ (hss ht'))) heq
317+
· have hss : Ico t₀ b ⊆ Ioo a b := Ico_subset_Ioo_left ht.1
318+
exact ODE_solution_unique_of_mem_Icc_right hv
319+
(hf.mono <| Icc_subset_Icc_left <| le_of_lt ht.1)
320+
(fun _ ht' ↦ (hf' _ (hss ht')).hasDerivWithinAt) (fun _ ht' ↦ (hfs _ (hss ht')))
321+
(hg.mono <| Icc_subset_Icc_left <| le_of_lt ht.1)
322+
(fun _ ht' ↦ (hg' _ (hss ht')).hasDerivWithinAt) (fun _ ht' ↦ (hgs _ (hss ht'))) heq
323+
324+
/-- A version of `ODE_solution_unique_of_mem_Icc` for uniqueness in an open interval. -/
325+
theorem ODE_solution_unique_of_mem_Ioo
326+
(ht : t₀ ∈ Ioo a b)
327+
(hf : ∀ t ∈ Ioo a b, HasDerivAt f (v t (f t)) t ∧ f t ∈ s t)
328+
(hg : ∀ t ∈ Ioo a b, HasDerivAt g (v t (g t)) t ∧ g t ∈ s t)
329+
(heq : f t₀ = g t₀) :
330+
EqOn f g (Ioo a b) := by
331+
intros t' ht'
332+
rcases lt_or_le t' t₀ with (h | h)
333+
· have hss : Icc t' t₀ ⊆ Ioo a b :=
334+
fun _ ht'' ↦ ⟨lt_of_lt_of_le ht'.1 ht''.1, lt_of_le_of_lt ht''.2 ht.2
335+
exact ODE_solution_unique_of_mem_Icc_left hv
336+
(ContinuousAt.continuousOn fun _ ht'' ↦ (hf _ <| hss ht'').1.continuousAt)
337+
(fun _ ht'' ↦ (hf _ <| hss <| Ioc_subset_Icc_self ht'').1.hasDerivWithinAt)
338+
(fun _ ht'' ↦ (hf _ <| hss <| Ioc_subset_Icc_self ht'').2)
339+
(ContinuousAt.continuousOn fun _ ht'' ↦ (hg _ <| hss ht'').1.continuousAt)
340+
(fun _ ht'' ↦ (hg _ <| hss <| Ioc_subset_Icc_self ht'').1.hasDerivWithinAt)
341+
(fun _ ht'' ↦ (hg _ <| hss <| Ioc_subset_Icc_self ht'').2) heq
342+
⟨le_rfl, le_of_lt h⟩
343+
· have hss : Icc t₀ t' ⊆ Ioo a b :=
344+
fun _ ht'' ↦ ⟨lt_of_lt_of_le ht.1 ht''.1, lt_of_le_of_lt ht''.2 ht'.2
345+
exact ODE_solution_unique_of_mem_Icc_right hv
346+
(ContinuousAt.continuousOn fun _ ht'' ↦ (hf _ <| hss ht'').1.continuousAt)
347+
(fun _ ht'' ↦ (hf _ <| hss <| Ico_subset_Icc_self ht'').1.hasDerivWithinAt)
348+
(fun _ ht'' ↦ (hf _ <| hss <| Ico_subset_Icc_self ht'').2)
349+
(ContinuousAt.continuousOn fun _ ht'' ↦ (hg _ <| hss ht'').1.continuousAt)
350+
(fun _ ht'' ↦ (hg _ <| hss <| Ico_subset_Icc_self ht'').1.hasDerivWithinAt)
351+
(fun _ ht'' ↦ (hg _ <| hss <| Ico_subset_Icc_self ht'').2) heq
352+
⟨h, le_rfl⟩
353+
354+
/-- Local unqueness of ODE solutions. -/
355+
theorem ODE_solution_unique_of_eventually
356+
(hf : ∀ᶠ t in 𝓝 t₀, HasDerivAt f (v t (f t)) t ∧ f t ∈ s t)
357+
(hg : ∀ᶠ t in 𝓝 t₀, HasDerivAt g (v t (g t)) t ∧ g t ∈ s t)
358+
(heq : f t₀ = g t₀) : f =ᶠ[𝓝 t₀] g := by
359+
obtain ⟨ε, hε, h⟩ := eventually_nhds_iff_ball.mp (hf.and hg)
360+
rw [Filter.eventuallyEq_iff_exists_mem]
361+
refine ⟨ball t₀ ε, ball_mem_nhds _ hε, ?_⟩
362+
simp_rw [Real.ball_eq_Ioo] at *
363+
apply ODE_solution_unique_of_mem_Ioo hv (Real.ball_eq_Ioo t₀ ε ▸ mem_ball_self hε)
364+
(fun _ ht ↦ (h _ ht).1) (fun _ ht ↦ (h _ ht).2) heq
246365

247366
/-- There exists only one solution of an ODE \(\dot x=v(t, x)\) with
248-
a given initial value provided that RHS is Lipschitz continuous in `x`. -/
249-
theorem ODE_solution_unique {v : ℝ → E → E} {K : ℝ≥0} (hv : ∀ t, LipschitzWith K (v t))
250-
{f g : ℝ → E} {a b : ℝ} (hf : ContinuousOn f (Icc a b))
251-
(hf' : ∀ t ∈ Ico a b, HasDerivWithinAt f (v t (f t)) (Ici t) t) (hg : ContinuousOn g (Icc a b))
252-
(hg' : ∀ t ∈ Ico a b, HasDerivWithinAt g (v t (g t)) (Ici t) t) (ha : f a = g a) :
367+
a given initial value provided that the RHS is Lipschitz continuous in `x`. -/
368+
theorem ODE_solution_unique
369+
(hv : ∀ t, LipschitzWith K (v t))
370+
(hf : ContinuousOn f (Icc a b))
371+
(hf' : ∀ t ∈ Ico a b, HasDerivWithinAt f (v t (f t)) (Ici t) t)
372+
(hg : ContinuousOn g (Icc a b))
373+
(hg' : ∀ t ∈ Ico a b, HasDerivWithinAt g (v t (g t)) (Ici t) t)
374+
(ha : f a = g a) :
253375
EqOn f g (Icc a b) :=
254376
have hfs : ∀ t ∈ Ico a b, f t ∈ @univ E := fun _ _ => trivial
255-
ODE_solution_unique_of_mem_set (fun t => (hv t).lipschitzOnWith _) hf hf' hfs hg hg'
377+
ODE_solution_unique_of_mem_Icc_right (fun t => (hv t).lipschitzOnWith _) hf hf' hfs hg hg'
256378
(fun _ _ => trivial) ha
257379
set_option linter.uppercaseLean3 false in
258380
#align ODE_solution_unique ODE_solution_unique

0 commit comments

Comments
 (0)