Theorem: HasDerivAt.lhopital_zero_nhds_left
File: Mathlib/Analysis/Calculus/LHopital.lean

tactic: rw [eventually_iff_exists_mem] at *
state_before: a b : ℝ
hab : a < b
l : Filter ℝ
f f' g g' : ℝ → ℝ
hff' : ∀ᶠ (x : ℝ) in 𝓝[Iio a] a, HasDerivAt f (f' x) x
hgg' : ∀ᶠ (x : ℝ) in 𝓝[Iio a] a, HasDerivAt g (g' x) x
hg' : ∀ᶠ (x : ℝ) in 𝓝[Iio a] a, g' x ≠ 0
hfa : Tendsto f (𝓝[Iio a] a) (𝓝 0)
hga : Tendsto g (𝓝[Iio a] a) (𝓝 0)
hdiv : Tendsto (fun x => f' x / g' x) (𝓝[Iio a] a) l
⊢ Tendsto (fun x => f x / g x) (𝓝[Iio a] a) l

tactic: rcases hff' with ⟨s₁, hs₁, hff'⟩
state_before: a b : ℝ
hab : a < b
l : Filter ℝ
f f' g g' : ℝ → ℝ
hff' : ∃ v, v ∈ 𝓝[Iio a] a ∧ ∀ (y : ℝ), y ∈ v → HasDerivAt f (f' y) y
hgg' : ∃ v, v ∈ 𝓝[Iio a] a ∧ ∀ (y : ℝ), y ∈ v → HasDerivAt g (g' y) y
hg' : ∃ v, v ∈ 𝓝[Iio a] a ∧ ∀ (y : ℝ), y ∈ v → g' y ≠ 0
hfa : Tendsto f (𝓝[Iio a] a) (𝓝 0)
hga : Tendsto g (𝓝[Iio a] a) (𝓝 0)
hdiv : Tendsto (fun x => f' x / g' x) (𝓝[Iio a] a) l
⊢ Tendsto (fun x => f x / g x) (𝓝[Iio a] a) l

tactic: rcases hgg' with ⟨s₂, hs₂, hgg'⟩
state_before: case intro.intro
a b : ℝ
hab : a < b
l : Filter ℝ
f f' g g' : ℝ → ℝ
hgg' : ∃ v, v ∈ 𝓝[Iio a] a ∧ ∀ (y : ℝ), y ∈ v → HasDerivAt g (g' y) y
hg' : ∃ v, v ∈ 𝓝[Iio a] a ∧ ∀ (y : ℝ), y ∈ v → g' y ≠ 0
hfa : Tendsto f (𝓝[Iio a] a) (𝓝 0)
hga : Tendsto g (𝓝[Iio a] a) (𝓝 0)
hdiv : Tendsto (fun x => f' x / g' x) (𝓝[Iio a] a) l
s₁ : Set ℝ
hs₁ : s₁ ∈ 𝓝[Iio a] a
hff' : ∀ (y : ℝ), y ∈ s₁ → HasDerivAt f (f' y) y
⊢ Tendsto (fun x => f x / g x) (𝓝[Iio a] a) l

tactic: rcases hg' with ⟨s₃, hs₃, hg'⟩
state_before: case intro.intro.intro.intro
a b : ℝ
hab : a < b
l : Filter ℝ
f f' g g' : ℝ → ℝ
hg' : ∃ v, v ∈ 𝓝[Iio a] a ∧ ∀ (y : ℝ), y ∈ v → g' y ≠ 0
hfa : Tendsto f (𝓝[Iio a] a) (𝓝 0)
hga : Tendsto g (𝓝[Iio a] a) (𝓝 0)
hdiv : Tendsto (fun x => f' x / g' x) (𝓝[Iio a] a) l
s₁ : Set ℝ
hs₁ : s₁ ∈ 𝓝[Iio a] a
hff' : ∀ (y : ℝ), y ∈ s₁ → HasDerivAt f (f' y) y
s₂ : Set ℝ
hs₂ : s₂ ∈ 𝓝[Iio a] a
hgg' : ∀ (y : ℝ), y ∈ s₂ → HasDerivAt g (g' y) y
⊢ Tendsto (fun x => f x / g x) (𝓝[Iio a] a) l

tactic: let s := s₁ ∩ s₂ ∩ s₃
state_before: case intro.intro.intro.intro.intro.intro
a b : ℝ
hab : a < b
l : Filter ℝ
f f' g g' : ℝ → ℝ
hfa : Tendsto f (𝓝[Iio a] a) (𝓝 0)
hga : Tendsto g (𝓝[Iio a] a) (𝓝 0)
hdiv : Tendsto (fun x => f' x / g' x) (𝓝[Iio a] a) l
s₁ : Set ℝ
hs₁ : s₁ ∈ 𝓝[Iio a] a
hff' : ∀ (y : ℝ), y ∈ s₁ → HasDerivAt f (f' y) y
s₂ : Set ℝ
hs₂ : s₂ ∈ 𝓝[Iio a] a
hgg' : ∀ (y : ℝ), y ∈ s₂ → HasDerivAt g (g' y) y
s₃ : Set ℝ
hs₃ : s₃ ∈ 𝓝[Iio a] a
hg' : ∀ (y : ℝ), y ∈ s₃ → g' y ≠ 0
⊢ Tendsto (fun x => f x / g x) (𝓝[Iio a] a) l

tactic: have hs : s ∈ 𝓝[<] a := inter_mem (inter_mem hs₁ hs₂) hs₃
state_before: case intro.intro.intro.intro.intro.intro
a b : ℝ
hab : a < b
l : Filter ℝ
f f' g g' : ℝ → ℝ
hfa : Tendsto f (𝓝[Iio a] a) (𝓝 0)
hga : Tendsto g (𝓝[Iio a] a) (𝓝 0)
hdiv : Tendsto (fun x => f' x / g' x) (𝓝[Iio a] a) l
s₁ : Set ℝ
hs₁ : s₁ ∈ 𝓝[Iio a] a
hff' : ∀ (y : ℝ), y ∈ s₁ → HasDerivAt f (f' y) y
s₂ : Set ℝ
hs₂ : s₂ ∈ 𝓝[Iio a] a
hgg' : ∀ (y : ℝ), y ∈ s₂ → HasDerivAt g (g' y) y
s₃ : Set ℝ
hs₃ : s₃ ∈ 𝓝[Iio a] a
hg' : ∀ (y : ℝ), y ∈ s₃ → g' y ≠ 0
s : Set ℝ := s₁ ∩ s₂ ∩ s₃
⊢ Tendsto (fun x => f x / g x) (𝓝[Iio a] a) l

tactic: rw [mem_nhdsWithin_Iio_iff_exists_Ioo_subset] at hs
state_before: case intro.intro.intro.intro.intro.intro
a b : ℝ
hab : a < b
l : Filter ℝ
f f' g g' : ℝ → ℝ
hfa : Tendsto f (𝓝[Iio a] a) (𝓝 0)
hga : Tendsto g (𝓝[Iio a] a) (𝓝 0)
hdiv : Tendsto (fun x => f' x / g' x) (𝓝[Iio a] a) l
s₁ : Set ℝ
hs₁ : s₁ ∈ 𝓝[Iio a] a
hff' : ∀ (y : ℝ), y ∈ s₁ → HasDerivAt f (f' y) y
s₂ : Set ℝ
hs₂ : s₂ ∈ 𝓝[Iio a] a
hgg' : ∀ (y : ℝ), y ∈ s₂ → HasDerivAt g (g' y) y
s₃ : Set ℝ
hs₃ : s₃ ∈ 𝓝[Iio a] a
hg' : ∀ (y : ℝ), y ∈ s₃ → g' y ≠ 0
s : Set ℝ := s₁ ∩ s₂ ∩ s₃
hs : s ∈ 𝓝[Iio a] a
⊢ Tendsto (fun x => f x / g x) (𝓝[Iio a] a) l

tactic: rcases hs with ⟨l, hal, hl⟩
state_before: case intro.intro.intro.intro.intro.intro
a b : ℝ
hab : a < b
l : Filter ℝ
f f' g g' : ℝ → ℝ
hfa : Tendsto f (𝓝[Iio a] a) (𝓝 0)
hga : Tendsto g (𝓝[Iio a] a) (𝓝 0)
hdiv : Tendsto (fun x => f' x / g' x) (𝓝[Iio a] a) l
s₁ : Set ℝ
hs₁ : s₁ ∈ 𝓝[Iio a] a
hff' : ∀ (y : ℝ), y ∈ s₁ → HasDerivAt f (f' y) y
s₂ : Set ℝ
hs₂ : s₂ ∈ 𝓝[Iio a] a
hgg' : ∀ (y : ℝ), y ∈ s₂ → HasDerivAt g (g' y) y
s₃ : Set ℝ
hs₃ : s₃ ∈ 𝓝[Iio a] a
hg' : ∀ (y : ℝ), y ∈ s₃ → g' y ≠ 0
s : Set ℝ := s₁ ∩ s₂ ∩ s₃
hs : ∃ l, l ∈ Iio a ∧ Ioo l a ⊆ s
⊢ Tendsto (fun x => f x / g x) (𝓝[Iio a] a) l

tactic: refine' lhopital_zero_left_on_Ioo hal _ _ _ hfa hga hdiv <;> intro x hx <;> apply_assumption <;>
  first | exact (hl hx).1.1| exact (hl hx).1.2| exact (hl hx).2
state_before: case intro.intro.intro.intro.intro.intro.intro.intro
a b : ℝ
hab : a < b
l✝ : Filter ℝ
f f' g g' : ℝ → ℝ
hfa : Tendsto f (𝓝[Iio a] a) (𝓝 0)
hga : Tendsto g (𝓝[Iio a] a) (𝓝 0)
hdiv : Tendsto (fun x => f' x / g' x) (𝓝[Iio a] a) l✝
s₁ : Set ℝ
hs₁ : s₁ ∈ 𝓝[Iio a] a
hff' : ∀ (y : ℝ), y ∈ s₁ → HasDerivAt f (f' y) y
s₂ : Set ℝ
hs₂ : s₂ ∈ 𝓝[Iio a] a
hgg' : ∀ (y : ℝ), y ∈ s₂ → HasDerivAt g (g' y) y
s₃ : Set ℝ
hs₃ : s₃ ∈ 𝓝[Iio a] a
hg' : ∀ (y : ℝ), y ∈ s₃ → g' y ≠ 0
s : Set ℝ := s₁ ∩ s₂ ∩ s₃
l : ℝ
hal : l ∈ Iio a
hl : Ioo l a ⊆ s
⊢ Tendsto (fun x => f x / g x) (𝓝[Iio a] a) l✝

tactic: exact (hl hx).1.1
state_before: case intro.intro.intro.intro.intro.intro.intro.intro.refine'_3.a
a b : ℝ
hab : a < b
l✝ : Filter ℝ
f f' g g' : ℝ → ℝ
hfa : Tendsto f (𝓝[Iio a] a) (𝓝 0)
hga : Tendsto g (𝓝[Iio a] a) (𝓝 0)
hdiv : Tendsto (fun x => f' x / g' x) (𝓝[Iio a] a) l✝
s₁ : Set ℝ
hs₁ : s₁ ∈ 𝓝[Iio a] a
hff' : ∀ (y : ℝ), y ∈ s₁ → HasDerivAt f (f' y) y
s₂ : Set ℝ
hs₂ : s₂ ∈ 𝓝[Iio a] a
hgg' : ∀ (y : ℝ), y ∈ s₂ → HasDerivAt g (g' y) y
s₃ : Set ℝ
hs₃ : s₃ ∈ 𝓝[Iio a] a
hg' : ∀ (y : ℝ), y ∈ s₃ → g' y ≠ 0
s : Set ℝ := s₁ ∩ s₂ ∩ s₃
l : ℝ
hal : l ∈ Iio a
hl : Ioo l a ⊆ s
x : ℝ
hx : x ∈ Ioo l a
⊢ x ∈ s₃

tactic: exact (hl hx).1.2
state_before: case intro.intro.intro.intro.intro.intro.intro.intro.refine'_3.a
a b : ℝ
hab : a < b
l✝ : Filter ℝ
f f' g g' : ℝ → ℝ
hfa : Tendsto f (𝓝[Iio a] a) (𝓝 0)
hga : Tendsto g (𝓝[Iio a] a) (𝓝 0)
hdiv : Tendsto (fun x => f' x / g' x) (𝓝[Iio a] a) l✝
s₁ : Set ℝ
hs₁ : s₁ ∈ 𝓝[Iio a] a
hff' : ∀ (y : ℝ), y ∈ s₁ → HasDerivAt f (f' y) y
s₂ : Set ℝ
hs₂ : s₂ ∈ 𝓝[Iio a] a
hgg' : ∀ (y : ℝ), y ∈ s₂ → HasDerivAt g (g' y) y
s₃ : Set ℝ
hs₃ : s₃ ∈ 𝓝[Iio a] a
hg' : ∀ (y : ℝ), y ∈ s₃ → g' y ≠ 0
s : Set ℝ := s₁ ∩ s₂ ∩ s₃
l : ℝ
hal : l ∈ Iio a
hl : Ioo l a ⊆ s
x : ℝ
hx : x ∈ Ioo l a
⊢ x ∈ s₃

tactic: exact (hl hx).2
state_before: case intro.intro.intro.intro.intro.intro.intro.intro.refine'_3.a
a b : ℝ
hab : a < b
l✝ : Filter ℝ
f f' g g' : ℝ → ℝ
hfa : Tendsto f (𝓝[Iio a] a) (𝓝 0)
hga : Tendsto g (𝓝[Iio a] a) (𝓝 0)
hdiv : Tendsto (fun x => f' x / g' x) (𝓝[Iio a] a) l✝
s₁ : Set ℝ
hs₁ : s₁ ∈ 𝓝[Iio a] a
hff' : ∀ (y : ℝ), y ∈ s₁ → HasDerivAt f (f' y) y
s₂ : Set ℝ
hs₂ : s₂ ∈ 𝓝[Iio a] a
hgg' : ∀ (y : ℝ), y ∈ s₂ → HasDerivAt g (g' y) y
s₃ : Set ℝ
hs₃ : s₃ ∈ 𝓝[Iio a] a
hg' : ∀ (y : ℝ), y ∈ s₃ → g' y ≠ 0
s : Set ℝ := s₁ ∩ s₂ ∩ s₃
l : ℝ
hal : l ∈ Iio a
hl : Ioo l a ⊆ s
x : ℝ
hx : x ∈ Ioo l a
⊢ x ∈ s₃