Theorem: exists_forall_deriv_at_Ioo_eq_of_contDiffOn_nhds
File: Mathlib/Analysis/ODE/PicardLindelof.lean

tactic: obtain ⟨ε, hε, L, R, C, hpl⟩ := exists_isPicardLindelof_const_of_contDiffOn_nhds t₀ x₀ hv hs
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
⊢ ∃ ε, ε > 0 ∧ ∃ f, f t₀ = x₀ ∧ ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → f t ∈ s ∧ HasDerivAt f (v (f t)) t

tactic: obtain ⟨f, hf1, hf2⟩ := hpl.exists_forall_hasDerivWithinAt_Icc_eq x₀
state_before: case intro.intro.intro.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
⊢ ∃ ε, ε > 0 ∧ ∃ f, f t₀ = x₀ ∧ ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → f t ∈ s ∧ HasDerivAt f (v (f t)) t

tactic: have hf2' : ∀ t ∈ Ioo (t₀ - ε) (t₀ + ε), HasDerivAt f (v (f t)) t := fun t ht =>
  (hf2 t (Ioo_subset_Icc_self ht)).hasDerivAt (Icc_mem_nhds ht.1 ht.2)
state_before: case intro.intro.intro.intro.intro.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
f : ℝ → E
hf1 : f t₀ = x₀
hf2 : ∀ (t : ℝ), t ∈ Icc (t₀ - ε) (t₀ + ε) → HasDerivWithinAt f (v (f t)) (Icc (t₀ - ε) (t₀ + ε)) t
⊢ ∃ ε, ε > 0 ∧ ∃ f, f t₀ = x₀ ∧ ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → f t ∈ s ∧ HasDerivAt f (v (f t)) t

tactic: have h : f ⁻¹' s ∈ 𝓝 t₀ := by
  have := hf2' t₀ (mem_Ioo.mpr ⟨sub_lt_self _ hε, lt_add_of_pos_right _ hε⟩)
  apply ContinuousAt.preimage_mem_nhds this.continuousAt
  rw [hf1]
  exact hs
state_before: case intro.intro.intro.intro.intro.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
f : ℝ → E
hf1 : f t₀ = x₀
hf2 : ∀ (t : ℝ), t ∈ Icc (t₀ - ε) (t₀ + ε) → HasDerivWithinAt f (v (f t)) (Icc (t₀ - ε) (t₀ + ε)) t
hf2' : ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → HasDerivAt f (v (f t)) t
⊢ ∃ ε, ε > 0 ∧ ∃ f, f t₀ = x₀ ∧ ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → f t ∈ s ∧ HasDerivAt f (v (f t)) t

tactic: rw [Metric.mem_nhds_iff] at h
state_before: case intro.intro.intro.intro.intro.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
f : ℝ → E
hf1 : f t₀ = x₀
hf2 : ∀ (t : ℝ), t ∈ Icc (t₀ - ε) (t₀ + ε) → HasDerivWithinAt f (v (f t)) (Icc (t₀ - ε) (t₀ + ε)) t
hf2' : ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → HasDerivAt f (v (f t)) t
h : f ⁻¹' s ∈ 𝓝 t₀
⊢ ∃ ε, ε > 0 ∧ ∃ f, f t₀ = x₀ ∧ ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → f t ∈ s ∧ HasDerivAt f (v (f t)) t

tactic: obtain ⟨r, hr1, hr2⟩ := h
state_before: case intro.intro.intro.intro.intro.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
f : ℝ → E
hf1 : f t₀ = x₀
hf2 : ∀ (t : ℝ), t ∈ Icc (t₀ - ε) (t₀ + ε) → HasDerivWithinAt f (v (f t)) (Icc (t₀ - ε) (t₀ + ε)) t
hf2' : ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → HasDerivAt f (v (f t)) t
h : ∃ ε, ε > 0 ∧ ball t₀ ε ⊆ f ⁻¹' s
⊢ ∃ ε, ε > 0 ∧ ∃ f, f t₀ = x₀ ∧ ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → f t ∈ s ∧ HasDerivAt f (v (f t)) t

tactic: refine ⟨min r ε, lt_min hr1 hε, f, hf1, fun t ht => ⟨?_,
  hf2' t (mem_of_mem_of_subset ht (Ioo_subset_Ioo (sub_le_sub_left (min_le_right _ _) _)
    (add_le_add_left (min_le_right _ _) _)))⟩⟩
state_before: case intro.intro.intro.intro.intro.intro.intro.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
f : ℝ → E
hf1 : f t₀ = x₀
hf2 : ∀ (t : ℝ), t ∈ Icc (t₀ - ε) (t₀ + ε) → HasDerivWithinAt f (v (f t)) (Icc (t₀ - ε) (t₀ + ε)) t
hf2' : ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → HasDerivAt f (v (f t)) t
r : ℝ
hr1 : r > 0
hr2 : ball t₀ r ⊆ f ⁻¹' s
⊢ ∃ ε, ε > 0 ∧ ∃ f, f t₀ = x₀ ∧ ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → f t ∈ s ∧ HasDerivAt f (v (f t)) t

tactic: rw [← Set.mem_preimage]
state_before: case intro.intro.intro.intro.intro.intro.intro.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
f : ℝ → E
hf1 : f t₀ = x₀
hf2 : ∀ (t : ℝ), t ∈ Icc (t₀ - ε) (t₀ + ε) → HasDerivWithinAt f (v (f t)) (Icc (t₀ - ε) (t₀ + ε)) t
hf2' : ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → HasDerivAt f (v (f t)) t
r : ℝ
hr1 : r > 0
hr2 : ball t₀ r ⊆ f ⁻¹' s
t : ℝ
ht : t ∈ Ioo (t₀ - min r ε) (t₀ + min r ε)
⊢ f t ∈ s

tactic: apply Set.mem_of_mem_of_subset _ hr2
state_before: case intro.intro.intro.intro.intro.intro.intro.intro.intro
E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
f : ℝ → E
hf1 : f t₀ = x₀
hf2 : ∀ (t : ℝ), t ∈ Icc (t₀ - ε) (t₀ + ε) → HasDerivWithinAt f (v (f t)) (Icc (t₀ - ε) (t₀ + ε)) t
hf2' : ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → HasDerivAt f (v (f t)) t
r : ℝ
hr1 : r > 0
hr2 : ball t₀ r ⊆ f ⁻¹' s
t : ℝ
ht : t ∈ Ioo (t₀ - min r ε) (t₀ + min r ε)
⊢ t ∈ f ⁻¹' s

tactic: apply Set.mem_of_mem_of_subset ht
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
f : ℝ → E
hf1 : f t₀ = x₀
hf2 : ∀ (t : ℝ), t ∈ Icc (t₀ - ε) (t₀ + ε) → HasDerivWithinAt f (v (f t)) (Icc (t₀ - ε) (t₀ + ε)) t
hf2' : ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → HasDerivAt f (v (f t)) t
r : ℝ
hr1 : r > 0
hr2 : ball t₀ r ⊆ f ⁻¹' s
t : ℝ
ht : t ∈ Ioo (t₀ - min r ε) (t₀ + min r ε)
⊢ t ∈ ball t₀ r

tactic: rw [← Real.ball_eq_Ioo]
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
f : ℝ → E
hf1 : f t₀ = x₀
hf2 : ∀ (t : ℝ), t ∈ Icc (t₀ - ε) (t₀ + ε) → HasDerivWithinAt f (v (f t)) (Icc (t₀ - ε) (t₀ + ε)) t
hf2' : ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → HasDerivAt f (v (f t)) t
r : ℝ
hr1 : r > 0
hr2 : ball t₀ r ⊆ f ⁻¹' s
t : ℝ
ht : t ∈ Ioo (t₀ - min r ε) (t₀ + min r ε)
⊢ Ioo (t₀ - min r ε) (t₀ + min r ε) ⊆ ball t₀ r

tactic: exact Metric.ball_subset_ball (min_le_left _ _)
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
f : ℝ → E
hf1 : f t₀ = x₀
hf2 : ∀ (t : ℝ), t ∈ Icc (t₀ - ε) (t₀ + ε) → HasDerivWithinAt f (v (f t)) (Icc (t₀ - ε) (t₀ + ε)) t
hf2' : ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → HasDerivAt f (v (f t)) t
r : ℝ
hr1 : r > 0
hr2 : ball t₀ r ⊆ f ⁻¹' s
t : ℝ
ht : t ∈ Ioo (t₀ - min r ε) (t₀ + min r ε)
⊢ ball t₀ (min r ε) ⊆ ball t₀ r

tactic: have := hf2' t₀ (mem_Ioo.mpr ⟨sub_lt_self _ hε, lt_add_of_pos_right _ hε⟩)
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
f : ℝ → E
hf1 : f t₀ = x₀
hf2 : ∀ (t : ℝ), t ∈ Icc (t₀ - ε) (t₀ + ε) → HasDerivWithinAt f (v (f t)) (Icc (t₀ - ε) (t₀ + ε)) t
hf2' : ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → HasDerivAt f (v (f t)) t
⊢ f ⁻¹' s ∈ 𝓝 t₀

tactic: apply ContinuousAt.preimage_mem_nhds this.continuousAt
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
f : ℝ → E
hf1 : f t₀ = x₀
hf2 : ∀ (t : ℝ), t ∈ Icc (t₀ - ε) (t₀ + ε) → HasDerivWithinAt f (v (f t)) (Icc (t₀ - ε) (t₀ + ε)) t
hf2' : ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → HasDerivAt f (v (f t)) t
this : HasDerivAt f (v (f t₀)) t₀
⊢ f ⁻¹' s ∈ 𝓝 t₀

tactic: rw [hf1]
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
f : ℝ → E
hf1 : f t₀ = x₀
hf2 : ∀ (t : ℝ), t ∈ Icc (t₀ - ε) (t₀ + ε) → HasDerivWithinAt f (v (f t)) (Icc (t₀ - ε) (t₀ + ε)) t
hf2' : ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → HasDerivAt f (v (f t)) t
this : HasDerivAt f (v (f t₀)) t₀
⊢ s ∈ 𝓝 (f t₀)

tactic: exact hs
state_before: E : Type u_1
inst✝² : NormedAddCommGroup E
inst✝¹ : NormedSpace ℝ E
inst✝ : ProperSpace E
v : E → E
t₀ : ℝ
x₀ : E
s : Set E
hv : ContDiffOn ℝ 1 v s
hs : s ∈ 𝓝 x₀
ε : ℝ
hε : ε > 0
L : ℝ≥0
R C : ℝ
hpl : IsPicardLindelof (fun x => v) (t₀ - ε) t₀ (t₀ + ε) x₀ L R C
f : ℝ → E
hf1 : f t₀ = x₀
hf2 : ∀ (t : ℝ), t ∈ Icc (t₀ - ε) (t₀ + ε) → HasDerivWithinAt f (v (f t)) (Icc (t₀ - ε) (t₀ + ε)) t
hf2' : ∀ (t : ℝ), t ∈ Ioo (t₀ - ε) (t₀ + ε) → HasDerivAt f (v (f t)) t
this : HasDerivAt f (v (f t₀)) t₀
⊢ s ∈ 𝓝 x₀