[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K ε x : ℝ
⊢ HasDerivAt (gronwallBound δ K ε) (K * gronwallBound δ K ε x + ε) x
[PROOFSTEP]
by_cases hK : K = 0
[GOAL]
case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K ε x : ℝ
hK : K = 0
⊢ HasDerivAt (gronwallBound δ K ε) (K * gronwallBound δ K ε x + ε) x
[PROOFSTEP]
subst K
[GOAL]
case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ ε x : ℝ
⊢ HasDerivAt (gronwallBound δ 0 ε) (0 * gronwallBound δ 0 ε x + ε) x
[PROOFSTEP]
simp only [gronwallBound_K0, zero_mul, zero_add]
[GOAL]
case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ ε x : ℝ
⊢ HasDerivAt (fun x => δ + ε * x) ε x
[PROOFSTEP]
convert ((hasDerivAt_id x).const_mul ε).const_add δ
[GOAL]
case h.e'_7
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ ε x : ℝ
⊢ ε = ε * 1
[PROOFSTEP]
rw [mul_one]
[GOAL]
case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K ε x : ℝ
hK : ¬K = 0
⊢ HasDerivAt (gronwallBound δ K ε) (K * gronwallBound δ K ε x + ε) x
[PROOFSTEP]
simp only [gronwallBound_of_K_ne_0 hK]
[GOAL]
case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K ε x : ℝ
hK : ¬K = 0
⊢ HasDerivAt (fun x => δ * exp (K * x) + ε / K * (exp (K * x) - 1))
    (K * (δ * exp (K * x) + ε / K * (exp (K * x) - 1)) + ε) x
[PROOFSTEP]
convert
  (((hasDerivAt_id x).const_mul K).exp.const_mul δ).add
    ((((hasDerivAt_id x).const_mul K).exp.sub_const 1).const_mul (ε / K)) using
  1
[GOAL]
case h.e'_7
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K ε x : ℝ
hK : ¬K = 0
⊢ K * (δ * exp (K * x) + ε / K * (exp (K * x) - 1)) + ε =
    δ * (exp (K * id x) * (K * 1)) + ε / K * (exp (K * id x) * (K * 1))
[PROOFSTEP]
simp only [id, mul_add, (mul_assoc _ _ _).symm, mul_comm _ K, mul_div_cancel' _ hK]
[GOAL]
case h.e'_7
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K ε x : ℝ
hK : ¬K = 0
⊢ K * δ * exp (K * x) + ε * (exp (K * x) - 1) + ε = K * δ * exp (K * x) * 1 + ε * exp (K * x) * 1
[PROOFSTEP]
ring
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K ε x a : ℝ
⊢ HasDerivAt (fun y => gronwallBound δ K ε (y - a)) (K * gronwallBound δ K ε (x - a) + ε) x
[PROOFSTEP]
convert (hasDerivAt_gronwallBound δ K ε _).comp x ((hasDerivAt_id x).sub_const a) using 1
[GOAL]
case h.e'_7
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K ε x a : ℝ
⊢ K * gronwallBound δ K ε (x - a) + ε = (K * gronwallBound δ K ε (id x - a) + ε) * 1
[PROOFSTEP]
rw [id, mul_one]
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K ε : ℝ
⊢ gronwallBound δ K ε 0 = δ
[PROOFSTEP]
by_cases hK : K = 0
[GOAL]
case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K ε : ℝ
hK : K = 0
⊢ gronwallBound δ K ε 0 = δ
[PROOFSTEP]
simp only [gronwallBound, if_pos hK, mul_zero, add_zero]
[GOAL]
case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K ε : ℝ
hK : ¬K = 0
⊢ gronwallBound δ K ε 0 = δ
[PROOFSTEP]
simp only [gronwallBound, if_neg hK, mul_zero, exp_zero, sub_self, mul_one, add_zero]
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K x : ℝ
⊢ gronwallBound δ K 0 x = δ * exp (K * x)
[PROOFSTEP]
by_cases hK : K = 0
[GOAL]
case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K x : ℝ
hK : K = 0
⊢ gronwallBound δ K 0 x = δ * exp (K * x)
[PROOFSTEP]
simp only [gronwallBound_K0, hK, zero_mul, exp_zero, add_zero, mul_one]
[GOAL]
case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K x : ℝ
hK : ¬K = 0
⊢ gronwallBound δ K 0 x = δ * exp (K * x)
[PROOFSTEP]
simp only [gronwallBound_of_K_ne_0 hK, zero_div, zero_mul, add_zero]
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
K x : ℝ
⊢ gronwallBound 0 K 0 x = 0
[PROOFSTEP]
simp only [gronwallBound_ε0, zero_mul]
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K x : ℝ
⊢ Continuous fun ε => gronwallBound δ K ε x
[PROOFSTEP]
by_cases hK : K = 0
[GOAL]
case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K x : ℝ
hK : K = 0
⊢ Continuous fun ε => gronwallBound δ K ε x
[PROOFSTEP]
simp only [gronwallBound_K0, hK]
[GOAL]
case pos
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K x : ℝ
hK : K = 0
⊢ Continuous fun ε => δ + ε * x
[PROOFSTEP]
exact continuous_const.add (continuous_id.mul continuous_const)
[GOAL]
case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K x : ℝ
hK : ¬K = 0
⊢ Continuous fun ε => gronwallBound δ K ε x
[PROOFSTEP]
simp only [gronwallBound_of_K_ne_0 hK]
[GOAL]
case neg
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
δ K x : ℝ
hK : ¬K = 0
⊢ Continuous fun ε => δ * exp (K * x) + ε / K * (exp (K * x) - 1)
[PROOFSTEP]
exact continuous_const.add ((continuous_id.mul continuous_const).mul continuous_const)
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
⊢ ∀ (x : ℝ), x ∈ Icc a b → f x ≤ gronwallBound δ K ε (x - a)
[PROOFSTEP]
have H : ∀ x ∈ Icc a b, ∀ ε' ∈ Ioi ε, f x ≤ gronwallBound δ K ε' (x - a) :=
  by
  intro x hx ε' hε'
  apply image_le_of_liminf_slope_right_lt_deriv_boundary hf hf'
  · rwa [sub_self, gronwallBound_x0]
  · exact fun x => hasDerivAt_gronwallBound_shift δ K ε' x a
  · intro x hx hfB
    rw [← hfB]
    apply lt_of_le_of_lt (bound x hx)
    exact add_lt_add_left (mem_Ioi.1 hε') _
  · exact hx
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
⊢ ∀ (x : ℝ), x ∈ Icc a b → ∀ (ε' : ℝ), ε' ∈ Ioi ε → f x ≤ gronwallBound δ K ε' (x - a)
[PROOFSTEP]
intro x hx ε' hε'
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
x : ℝ
hx : x ∈ Icc a b
ε' : ℝ
hε' : ε' ∈ Ioi ε
⊢ f x ≤ gronwallBound δ K ε' (x - a)
[PROOFSTEP]
apply image_le_of_liminf_slope_right_lt_deriv_boundary hf hf'
[GOAL]
case ha
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
x : ℝ
hx : x ∈ Icc a b
ε' : ℝ
hε' : ε' ∈ Ioi ε
⊢ f a ≤ gronwallBound δ K ε' (a - a)
[PROOFSTEP]
rwa [sub_self, gronwallBound_x0]
[GOAL]
case hB
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
x : ℝ
hx : x ∈ Icc a b
ε' : ℝ
hε' : ε' ∈ Ioi ε
⊢ ∀ (x : ℝ), HasDerivAt (fun x => gronwallBound δ K ε' (x - a)) (?m.35213 x) x
[PROOFSTEP]
exact fun x => hasDerivAt_gronwallBound_shift δ K ε' x a
[GOAL]
case bound
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
x : ℝ
hx : x ∈ Icc a b
ε' : ℝ
hε' : ε' ∈ Ioi ε
⊢ ∀ (x : ℝ), x ∈ Ico a b → f x = gronwallBound δ K ε' (x - a) → f' x < K * gronwallBound δ K ε' (x - a) + ε'
[PROOFSTEP]
intro x hx hfB
[GOAL]
case bound
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
x✝ : ℝ
hx✝ : x✝ ∈ Icc a b
ε' : ℝ
hε' : ε' ∈ Ioi ε
x : ℝ
hx : x ∈ Ico a b
hfB : f x = gronwallBound δ K ε' (x - a)
⊢ f' x < K * gronwallBound δ K ε' (x - a) + ε'
[PROOFSTEP]
rw [← hfB]
[GOAL]
case bound
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
x✝ : ℝ
hx✝ : x✝ ∈ Icc a b
ε' : ℝ
hε' : ε' ∈ Ioi ε
x : ℝ
hx : x ∈ Ico a b
hfB : f x = gronwallBound δ K ε' (x - a)
⊢ f' x < K * f x + ε'
[PROOFSTEP]
apply lt_of_le_of_lt (bound x hx)
[GOAL]
case bound
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
x✝ : ℝ
hx✝ : x✝ ∈ Icc a b
ε' : ℝ
hε' : ε' ∈ Ioi ε
x : ℝ
hx : x ∈ Ico a b
hfB : f x = gronwallBound δ K ε' (x - a)
⊢ K * f x + ε < K * f x + ε'
[PROOFSTEP]
exact add_lt_add_left (mem_Ioi.1 hε') _
[GOAL]
case a
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
x : ℝ
hx : x ∈ Icc a b
ε' : ℝ
hε' : ε' ∈ Ioi ε
⊢ x ∈ Icc a b
[PROOFSTEP]
exact hx
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
H : ∀ (x : ℝ), x ∈ Icc a b → ∀ (ε' : ℝ), ε' ∈ Ioi ε → f x ≤ gronwallBound δ K ε' (x - a)
⊢ ∀ (x : ℝ), x ∈ Icc a b → f x ≤ gronwallBound δ K ε (x - a)
[PROOFSTEP]
intro x hx
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
H : ∀ (x : ℝ), x ∈ Icc a b → ∀ (ε' : ℝ), ε' ∈ Ioi ε → f x ≤ gronwallBound δ K ε' (x - a)
x : ℝ
hx : x ∈ Icc a b
⊢ f x ≤ gronwallBound δ K ε (x - a)
[PROOFSTEP]
change f x ≤ (fun ε' => gronwallBound δ K ε' (x - a)) ε
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
H : ∀ (x : ℝ), x ∈ Icc a b → ∀ (ε' : ℝ), ε' ∈ Ioi ε → f x ≤ gronwallBound δ K ε' (x - a)
x : ℝ
hx : x ∈ Icc a b
⊢ f x ≤ (fun ε' => gronwallBound δ K ε' (x - a)) ε
[PROOFSTEP]
convert continuousWithinAt_const.closure_le _ _ (H x hx)
[GOAL]
case convert_2
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
H : ∀ (x : ℝ), x ∈ Icc a b → ∀ (ε' : ℝ), ε' ∈ Ioi ε → f x ≤ gronwallBound δ K ε' (x - a)
x : ℝ
hx : x ∈ Icc a b
⊢ ε ∈ closure (Ioi ε)
[PROOFSTEP]
simp only [closure_Ioi, left_mem_Ici]
[GOAL]
case convert_3
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
inst✝¹ : NormedAddCommGroup F
inst✝ : NormedSpace ℝ F
f f' : ℝ → ℝ
δ K ε a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (x : ℝ), x ∈ Ico a b → ∀ (r : ℝ), f' x < r → ∃ᶠ (z : ℝ) in 𝓝[Ioi x] x, (z - x)⁻¹ * (f z - f x) < r
ha : f a ≤ δ
bound : ∀ (x : ℝ), x ∈ Ico a b → f' x ≤ K * f x + ε
H : ∀ (x : ℝ), x ∈ Icc a b → ∀ (ε' : ℝ), ε' ∈ Ioi ε → f x ≤ gronwallBound δ K ε' (x - a)
x : ℝ
hx : x ∈ Icc a b
⊢ ContinuousWithinAt (fun y => gronwallBound δ K y (x - a)) (Ioi ε) ε
[PROOFSTEP]
exact (gronwallBound_continuous_ε δ K (x - a)).continuousWithinAt
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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)
[PROOFSTEP]
simp only [dist_eq_norm] at ha ⊢
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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)
[PROOFSTEP]
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)
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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)
[PROOFSTEP]
apply norm_le_gronwallBound_of_norm_deriv_right_le (hf.sub hg) h_deriv ha
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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)
[PROOFSTEP]
intro t ht
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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)
[PROOFSTEP]
have := dist_triangle4_right (f' t) (g' t) (v t (f t)) (v t (g t))
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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)
[PROOFSTEP]
rw [dist_eq_norm] at this
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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)
[PROOFSTEP]
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 _)
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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)
[PROOFSTEP]
rw [dist_eq_norm, add_comm]
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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 : ℝ → E
a b δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (v t (f t)) (Ici t) t
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (v t (g t)) (Ici t) t
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) ≤ δ * exp (K * (t - a))
[PROOFSTEP]
have f_bound : ∀ t ∈ Ico a b, dist (v t (f t)) (v t (f t)) ≤ 0 := by intros; rw [dist_self]
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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 : ℝ → E
a b δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (v t (f t)) (Ici t) t
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (v t (g t)) (Ici t) t
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : dist (f a) (g a) ≤ δ
⊢ ∀ (t : ℝ), t ∈ Ico a b → dist (v t (f t)) (v t (f t)) ≤ 0
[PROOFSTEP]
intros
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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 : ℝ → E
a b δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (v t (f t)) (Ici t) t
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (v t (g t)) (Ici t) t
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : dist (f a) (g a) ≤ δ
t✝ : ℝ
a✝ : t✝ ∈ Ico a b
⊢ dist (v t✝ (f t✝)) (v t✝ (f t✝)) ≤ 0
[PROOFSTEP]
rw [dist_self]
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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 : ℝ → E
a b δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (v t (f t)) (Ici t) t
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (v t (g t)) (Ici t) t
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : dist (f a) (g a) ≤ δ
f_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (v t (f t)) (v t (f t)) ≤ 0
⊢ ∀ (t : ℝ), t ∈ Icc a b → dist (f t) (g t) ≤ δ * exp (K * (t - a))
[PROOFSTEP]
have g_bound : ∀ t ∈ Ico a b, dist (v t (g t)) (v t (g t)) ≤ 0 := by intros; rw [dist_self]
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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 : ℝ → E
a b δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (v t (f t)) (Ici t) t
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (v t (g t)) (Ici t) t
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : dist (f a) (g a) ≤ δ
f_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (v t (f t)) (v t (f t)) ≤ 0
⊢ ∀ (t : ℝ), t ∈ Ico a b → dist (v t (g t)) (v t (g t)) ≤ 0
[PROOFSTEP]
intros
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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 : ℝ → E
a b δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (v t (f t)) (Ici t) t
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (v t (g t)) (Ici t) t
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : dist (f a) (g a) ≤ δ
f_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (v t (f t)) (v t (f t)) ≤ 0
t✝ : ℝ
a✝ : t✝ ∈ Ico a b
⊢ dist (v t✝ (g t✝)) (v t✝ (g t✝)) ≤ 0
[PROOFSTEP]
rw [dist_self]
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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 : ℝ → E
a b δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (v t (f t)) (Ici t) t
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (v t (g t)) (Ici t) t
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : dist (f a) (g a) ≤ δ
f_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (v t (f t)) (v t (f t)) ≤ 0
g_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (v t (g t)) (v t (g t)) ≤ 0
⊢ ∀ (t : ℝ), t ∈ Icc a b → dist (f t) (g t) ≤ δ * exp (K * (t - a))
[PROOFSTEP]
intro t ht
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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 : ℝ → E
a b δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (v t (f t)) (Ici t) t
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (v t (g t)) (Ici t) t
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : dist (f a) (g a) ≤ δ
f_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (v t (f t)) (v t (f t)) ≤ 0
g_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (v t (g t)) (v t (g t)) ≤ 0
t : ℝ
ht : t ∈ Icc a b
⊢ dist (f t) (g t) ≤ δ * exp (K * (t - a))
[PROOFSTEP]
have := dist_le_of_approx_trajectories_ODE_of_mem_set hv hf hf' f_bound hfs hg hg' g_bound hgs ha t ht
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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 : ℝ → E
a b δ : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (v t (f t)) (Ici t) t
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (v t (g t)) (Ici t) t
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : dist (f a) (g a) ≤ δ
f_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (v t (f t)) (v t (f t)) ≤ 0
g_bound : ∀ (t : ℝ), t ∈ Ico a b → dist (v t (g t)) (v t (g t)) ≤ 0
t : ℝ
ht : t ∈ Icc a b
this : dist (f t) (g t) ≤ gronwallBound δ K (0 + 0) (t - a)
⊢ dist (f t) (g t) ≤ δ * exp (K * (t - a))
[PROOFSTEP]
rwa [zero_add, gronwallBound_ε0] at this
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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 : ℝ → E
a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (v t (f t)) (Ici t) t
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (v t (g t)) (Ici t) t
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : f a = g a
t : ℝ
ht : t ∈ Icc a b
⊢ f t = g t
[PROOFSTEP]
have := dist_le_of_trajectories_ODE_of_mem_set hv hf hf' hfs hg hg' hgs (dist_le_zero.2 ha) t ht
[GOAL]
E : Type u_1
inst✝³ : NormedAddCommGroup E
inst✝² : NormedSpace ℝ E
F : Type u_2
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 : ℝ → E
a b : ℝ
hf : ContinuousOn f (Icc a b)
hf' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt f (v t (f t)) (Ici t) t
hfs : ∀ (t : ℝ), t ∈ Ico a b → f t ∈ s t
hg : ContinuousOn g (Icc a b)
hg' : ∀ (t : ℝ), t ∈ Ico a b → HasDerivWithinAt g (v t (g t)) (Ici t) t
hgs : ∀ (t : ℝ), t ∈ Ico a b → g t ∈ s t
ha : f a = g a
t : ℝ
ht : t ∈ Icc a b
this : dist (f t) (g t) ≤ 0 * exp (K * (t - a))
⊢ f t = g t
[PROOFSTEP]
rwa [zero_mul, dist_le_zero] at this


[GOAL]
G : Type u_1
inst✝ : Group G
H : Subgroup G
⊢ Saturated H ↔ ∀ (n : ℤ) (g : G), g ^ n ∈ H → n = 0 ∨ g ∈ H
[PROOFSTEP]
constructor
[GOAL]
case mp
G : Type u_1
inst✝ : Group G
H : Subgroup G
⊢ Saturated H → ∀ (n : ℤ) (g : G), g ^ n ∈ H → n = 0 ∨ g ∈ H
[PROOFSTEP]
intros hH n g hgn
[GOAL]
case mp
G : Type u_1
inst✝ : Group G
H : Subgroup G
hH : Saturated H
n : ℤ
g : G
hgn : g ^ n ∈ H
⊢ n = 0 ∨ g ∈ H
[PROOFSTEP]
induction' n with n n
[GOAL]
case mp.ofNat
G : Type u_1
inst✝ : Group G
H : Subgroup G
hH : Saturated H
n✝ : ℤ
g : G
hgn✝ : g ^ n✝ ∈ H
n : ℕ
hgn : g ^ Int.ofNat n ∈ H
⊢ Int.ofNat n = 0 ∨ g ∈ H
[PROOFSTEP]
simp only [Int.coe_nat_eq_zero, Int.ofNat_eq_coe, zpow_ofNat] at hgn ⊢
[GOAL]
case mp.ofNat
G : Type u_1
inst✝ : Group G
H : Subgroup G
hH : Saturated H
n✝ : ℤ
g : G
hgn✝ : g ^ n✝ ∈ H
n : ℕ
hgn : g ^ n ∈ H
⊢ n = 0 ∨ g ∈ H
[PROOFSTEP]
exact hH hgn
[GOAL]
case mp.negSucc
G : Type u_1
inst✝ : Group G
H : Subgroup G
hH : Saturated H
n✝ : ℤ
g : G
hgn✝ : g ^ n✝ ∈ H
n : ℕ
hgn : g ^ Int.negSucc n ∈ H
⊢ Int.negSucc n = 0 ∨ g ∈ H
[PROOFSTEP]
suffices g ^ (n + 1) ∈ H by
  refine' (hH this).imp _ id
  simp only [IsEmpty.forall_iff, Nat.succ_ne_zero]
[GOAL]
G : Type u_1
inst✝ : Group G
H : Subgroup G
hH : Saturated H
n✝ : ℤ
g : G
hgn✝ : g ^ n✝ ∈ H
n : ℕ
hgn : g ^ Int.negSucc n ∈ H
this : g ^ (n + 1) ∈ H
⊢ Int.negSucc n = 0 ∨ g ∈ H
[PROOFSTEP]
refine' (hH this).imp _ id
[GOAL]
G : Type u_1
inst✝ : Group G
H : Subgroup G
hH : Saturated H
n✝ : ℤ
g : G
hgn✝ : g ^ n✝ ∈ H
n : ℕ
hgn : g ^ Int.negSucc n ∈ H
this : g ^ (n + 1) ∈ H
⊢ n + 1 = 0 → Int.negSucc n = 0
[PROOFSTEP]
simp only [IsEmpty.forall_iff, Nat.succ_ne_zero]
[GOAL]
case mp.negSucc
G : Type u_1
inst✝ : Group G
H : Subgroup G
hH : Saturated H
n✝ : ℤ
g : G
hgn✝ : g ^ n✝ ∈ H
n : ℕ
hgn : g ^ Int.negSucc n ∈ H
⊢ g ^ (n + 1) ∈ H
[PROOFSTEP]
simpa only [inv_mem_iff, zpow_negSucc] using hgn
[GOAL]
case mpr
G : Type u_1
inst✝ : Group G
H : Subgroup G
⊢ (∀ (n : ℤ) (g : G), g ^ n ∈ H → n = 0 ∨ g ∈ H) → Saturated H
[PROOFSTEP]
intro h n g hgn
[GOAL]
case mpr
G : Type u_1
inst✝ : Group G
H : Subgroup G
h : ∀ (n : ℤ) (g : G), g ^ n ∈ H → n = 0 ∨ g ∈ H
n : ℕ
g : G
hgn : g ^ n ∈ H
⊢ n = 0 ∨ g ∈ H
[PROOFSTEP]
specialize h n g
[GOAL]
case mpr
G : Type u_1
inst✝ : Group G
H : Subgroup G
n : ℕ
g : G
hgn : g ^ n ∈ H
h : g ^ ↑n ∈ H → ↑n = 0 ∨ g ∈ H
⊢ n = 0 ∨ g ∈ H
[PROOFSTEP]
simp only [Int.coe_nat_eq_zero, zpow_ofNat] at h
[GOAL]
case mpr
G : Type u_1
inst✝ : Group G
H : Subgroup G
n : ℕ
g : G
hgn : g ^ n ∈ H
h : g ^ n ∈ H → n = 0 ∨ g ∈ H
⊢ n = 0 ∨ g ∈ H
[PROOFSTEP]
apply h hgn
[GOAL]
A₁ : Type u_1
A₂ : Type u_2
inst✝² : AddCommGroup A₁
inst✝¹ : AddCommGroup A₂
inst✝ : NoZeroSMulDivisors ℕ A₂
f : A₁ →+ A₂
⊢ Saturated (AddMonoidHom.ker f)
[PROOFSTEP]
intro n g hg
[GOAL]
A₁ : Type u_1
A₂ : Type u_2
inst✝² : AddCommGroup A₁
inst✝¹ : AddCommGroup A₂
inst✝ : NoZeroSMulDivisors ℕ A₂
f : A₁ →+ A₂
n : ℕ
g : A₁
hg : n • g ∈ AddMonoidHom.ker f
⊢ n = 0 ∨ g ∈ AddMonoidHom.ker f
[PROOFSTEP]
simpa only [f.mem_ker, nsmul_eq_smul, f.map_nsmul, smul_eq_zero] using hg


[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
A B✝ : C
f g : A ⟶ B✝
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
B : D
⊢ F.map (NatTrans.app adj.unit (G.obj B)) ≫ F.map (G.map (NatTrans.app adj.counit B)) = 𝟙 (F.obj (G.obj ((𝟭 D).obj B)))
[PROOFSTEP]
rw [← F.map_comp, adj.right_triangle_components]
[GOAL]
C : Type u
inst✝¹ : Category.{v, u} C
D : Type u₂
inst✝ : Category.{v₂, u₂} D
A B✝ : C
f g : A ⟶ B✝
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
B : D
⊢ F.map (𝟙 (G.obj B)) = 𝟙 (F.obj (G.obj ((𝟭 D).obj B)))
[PROOFSTEP]
apply F.map_id
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
A✝ B✝ : C
f✝ g✝ : A✝ ⟶ B✝
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝ : HasReflexiveCoequalizers C
A B : C
f g : A ⟶ B
r : B ⟶ A
rf : r ≫ f = 𝟙 B
rg : r ≫ g = 𝟙 B
⊢ HasCoequalizer f g
[PROOFSTEP]
letI := IsReflexivePair.mk' r rf rg
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
A✝ B✝ : C
f✝ g✝ : A✝ ⟶ B✝
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝ : HasReflexiveCoequalizers C
A B : C
f g : A ⟶ B
r : B ⟶ A
rf : r ≫ f = 𝟙 B
rg : r ≫ g = 𝟙 B
this : IsReflexivePair f g := IsReflexivePair.mk' r rf rg
⊢ HasCoequalizer f g
[PROOFSTEP]
infer_instance
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
A✝ B✝ : C
f✝ g✝ : A✝ ⟶ B✝
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝ : HasCoreflexiveEqualizers C
A B : C
f g : A ⟶ B
r : B ⟶ A
fr : f ≫ r = 𝟙 A
gr : g ≫ r = 𝟙 A
⊢ HasEqualizer f g
[PROOFSTEP]
letI := IsCoreflexivePair.mk' r fr gr
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
A✝ B✝ : C
f✝ g✝ : A✝ ⟶ B✝
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝ : HasCoreflexiveEqualizers C
A B : C
f g : A ⟶ B
r : B ⟶ A
fr : f ≫ r = 𝟙 A
gr : g ≫ r = 𝟙 A
this : IsCoreflexivePair f g := IsCoreflexivePair.mk' r fr gr
⊢ HasEqualizer f g
[PROOFSTEP]
infer_instance
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
A✝ B✝ : C
f✝ g✝ : A✝ ⟶ B✝
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝ : HasCoequalizers C
A B : C
f g : A ⟶ B
x✝ : IsReflexivePair f g
⊢ HasCoequalizer f g
[PROOFSTEP]
infer_instance
[GOAL]
C : Type u
inst✝² : Category.{v, u} C
D : Type u₂
inst✝¹ : Category.{v₂, u₂} D
A✝ B✝ : C
f✝ g✝ : A✝ ⟶ B✝
F : C ⥤ D
G : D ⥤ C
adj : F ⊣ G
inst✝ : HasEqualizers C
A B : C
f g : A ⟶ B
x✝ : IsCoreflexivePair f g
⊢ HasEqualizer f g
[PROOFSTEP]
infer_instance