Theorem: dist_le_of_approx_trajectories_ODE_of_mem_set
File: Mathlib/Analysis/ODE/Gronwall.lean

tactic: simp only [dist_eq_norm] at ha ⊢
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type ?u.38955
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
v : ℝ → E → E
s : ℝ → Set E
K : ℝ
hv : ∀ (t : ℝ) (x : E), x ∈ s t → ∀ (y : E), y ∈ s t → dist (v t x) (v t y) ≤ K * dist x y
f g f' g' : ℝ → E
a b εf εg δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (f' t) (Ici t) t
f_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (f' t) (v t (f t)) ≤ εf
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (g' t) (Ici t) t
g_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (g' t) (v t (g t)) ≤ εg
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : dist (f a) (g a) ≤ δ
⊢ ∀ (t : ℝ), t ∈ Icc a b → dist (f t) (g t) ≤ gronwallBound δ K (εf + εg) (t - a)

tactic: have h_deriv : ∀ t ∈ Ico a b, HasDerivWithinAt (fun t => f t - g t) (f' t - g' t) (Ici t) t :=
  fun t ht => (hf' t ht).sub (hg' t ht)
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type ?u.38955
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
v : ℝ → E → E
s : ℝ → Set E
K : ℝ
hv : ∀ (t : ℝ) (x : E), x ∈ s t → ∀ (y : E), y ∈ s t → dist (v t x) (v t y) ≤ K * dist x y
f g f' g' : ℝ → E
a b εf εg δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (f' t) (Ici t) t
f_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (f' t) (v t (f t)) ≤ εf
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (g' t) (Ici t) t
g_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (g' t) (v t (g t)) ≤ εg
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : ‖f a - g a‖ ≤ δ
⊢ ∀ (t : ℝ), t ∈ Icc a b → ‖f t - g t‖ ≤ gronwallBound δ K (εf + εg) (t - a)

tactic: apply norm_le_gronwallBound_of_norm_deriv_right_le (hf.sub hg) h_deriv ha
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type ?u.38955
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
v : ℝ → E → E
s : ℝ → Set E
K : ℝ
hv : ∀ (t : ℝ) (x : E), x ∈ s t → ∀ (y : E), y ∈ s t → dist (v t x) (v t y) ≤ K * dist x y
f g f' g' : ℝ → E
a b εf εg δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (f' t) (Ici t) t
f_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (f' t) (v t (f t)) ≤ εf
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (g' t) (Ici t) t
g_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (g' t) (v t (g t)) ≤ εg
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : ‖f a - g a‖ ≤ δ
h_deriv : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt (fun t => f t - g t) (f' t - g' t) (Ici t) t
⊢ ∀ (t : ℝ), t ∈ Icc a b → ‖f t - g t‖ ≤ gronwallBound δ K (εf + εg) (t - a)

tactic: intro t ht
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type ?u.38955
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
v : ℝ → E → E
s : ℝ → Set E
K : ℝ
hv : ∀ (t : ℝ) (x : E), x ∈ s t → ∀ (y : E), y ∈ s t → dist (v t x) (v t y) ≤ K * dist x y
f g f' g' : ℝ → E
a b εf εg δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (f' t) (Ici t) t
f_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (f' t) (v t (f t)) ≤ εf
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (g' t) (Ici t) t
g_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (g' t) (v t (g t)) ≤ εg
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : ‖f a - g a‖ ≤ δ
h_deriv : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt (fun t => f t - g t) (f' t - g' t) (Ici t) t
⊢ ∀ (x : ℝ), x ∈ Ico a b → ‖f' x - g' x‖ ≤ K * ‖f x - g x‖ + (εf + εg)

tactic: have := dist_triangle4_right (f' t) (g' t) (v t (f t)) (v t (g t))
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type ?u.38955
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
v : ℝ → E → E
s : ℝ → Set E
K : ℝ
hv : ∀ (t : ℝ) (x : E), x ∈ s t → ∀ (y : E), y ∈ s t → dist (v t x) (v t y) ≤ K * dist x y
f g f' g' : ℝ → E
a b εf εg δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (f' t) (Ici t) t
f_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (f' t) (v t (f t)) ≤ εf
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (g' t) (Ici t) t
g_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (g' t) (v t (g t)) ≤ εg
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : ‖f a - g a‖ ≤ δ
h_deriv : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt (fun t => f t - g t) (f' t - g' t) (Ici t) t
t : ℝ
ht : t ∈ Ico a b
⊢ ‖f' t - g' t‖ ≤ K * ‖f t - g t‖ + (εf + εg)

tactic: rw [dist_eq_norm] at this
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type ?u.38955
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
v : ℝ → E → E
s : ℝ → Set E
K : ℝ
hv : ∀ (t : ℝ) (x : E), x ∈ s t → ∀ (y : E), y ∈ s t → dist (v t x) (v t y) ≤ K * dist x y
f g f' g' : ℝ → E
a b εf εg δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (f' t) (Ici t) t
f_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (f' t) (v t (f t)) ≤ εf
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (g' t) (Ici t) t
g_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (g' t) (v t (g t)) ≤ εg
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : ‖f a - g a‖ ≤ δ
h_deriv : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt (fun t => f t - g t) (f' t - g' t) (Ici t) t
t : ℝ
ht : t ∈ Ico a b
this : dist (f' t) (g' t) ≤ dist (f' t) (v t (f t)) + dist (g' t) (v t (g t)) + dist (v t (f t)) (v t (g t))
⊢ ‖f' t - g' t‖ ≤ K * ‖f t - g t‖ + (εf + εg)

tactic: refine' this.trans ((add_le_add (add_le_add (f_bound t ht) (g_bound t ht))
  (hv t (f t) (hfs t ht) (g t) (hgs t ht))).trans _)
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type ?u.38955
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
v : ℝ → E → E
s : ℝ → Set E
K : ℝ
hv : ∀ (t : ℝ) (x : E), x ∈ s t → ∀ (y : E), y ∈ s t → dist (v t x) (v t y) ≤ K * dist x y
f g f' g' : ℝ → E
a b εf εg δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (f' t) (Ici t) t
f_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (f' t) (v t (f t)) ≤ εf
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (g' t) (Ici t) t
g_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (g' t) (v t (g t)) ≤ εg
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : ‖f a - g a‖ ≤ δ
h_deriv : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt (fun t => f t - g t) (f' t - g' t) (Ici t) t
t : ℝ
ht : t ∈ Ico a b
this : ‖f' t - g' t‖ ≤ dist (f' t) (v t (f t)) + dist (g' t) (v t (g t)) + dist (v t (f t)) (v t (g t))
⊢ ‖f' t - g' t‖ ≤ K * ‖f t - g t‖ + (εf + εg)

tactic: rw [dist_eq_norm, add_comm]
state_before: E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type ?u.38955
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
v : ℝ → E → E
s : ℝ → Set E
K : ℝ
hv : ∀ (t : ℝ) (x : E), x ∈ s t → ∀ (y : E), y ∈ s t → dist (v t x) (v t y) ≤ K * dist x y
f g f' g' : ℝ → E
a b εf εg δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (f' t) (Ici t) t
f_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (f' t) (v t (f t)) ≤ εf
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (g' t) (Ici t) t
g_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (g' t) (v t (g t)) ≤ εg
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : ‖f a - g a‖ ≤ δ
h_deriv : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt (fun t => f t - g t) (f' t - g' t) (Ici t) t
t : ℝ
ht : t ∈ Ico a b
this : ‖f' t - g' t‖ ≤ dist (f' t) (v t (f t)) + dist (g' t) (v t (g t)) + dist (v t (f t)) (v t (g t))
⊢ εf + εg + K * dist (f t) (g t) ≤ K * ‖f t - g t‖ + (εf + εg)