Theorem: hasFDerivAt_of_tendstoLocallyUniformlyOn
File: Mathlib/Analysis/Calculus/UniformLimitsDeriv.lean

tactic: have h1 : s ∈ 𝓝 x := hs.mem_nhds hx
state_before: ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_4
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
s : Set E
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ (n : ι) (x : E), x ∈ s → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
⊢ HasFDerivAt g (g' x) x

tactic: have h3 : Set.univ ×ˢ s ∈ l ×ˢ 𝓝 x := by simp only [h1, prod_mem_prod_iff, univ_mem, and_self_iff]
state_before: ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_4
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
s : Set E
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ (n : ι) (x : E), x ∈ s → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
h1 : s ∈ 𝓝 x
⊢ HasFDerivAt g (g' x) x

tactic: have h4 : ∀ᶠ n : ι × E in l ×ˢ 𝓝 x, HasFDerivAt (f n.1) (f' n.1 n.2) n.2 :=
  eventually_of_mem h3 fun ⟨n, z⟩ ⟨_, hz⟩ => hf n z hz
state_before: ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_4
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
s : Set E
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ (n : ι) (x : E), x ∈ s → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
h1 : s ∈ 𝓝 x
h3 : Set.univ ×ˢ s ∈ l ×ˢ 𝓝 x
⊢ HasFDerivAt g (g' x) x

tactic: refine' hasFDerivAt_of_tendstoUniformlyOnFilter _ h4 (eventually_of_mem h1 hfg)
state_before: ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_4
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
s : Set E
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ (n : ι) (x : E), x ∈ s → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
h1 : s ∈ 𝓝 x
h3 : Set.univ ×ˢ s ∈ l ×ˢ 𝓝 x
h4 : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
⊢ HasFDerivAt g (g' x) x

tactic: simpa [IsOpen.nhdsWithin_eq hs hx] using tendstoLocallyUniformlyOn_iff_filter.mp hf' x hx
state_before: ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_4
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
s : Set E
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ (n : ι) (x : E), x ∈ s → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
h1 : s ∈ 𝓝 x
h3 : Set.univ ×ˢ s ∈ l ×ˢ 𝓝 x
h4 : ∀ᶠ (n : ι × E) in l ×ˢ 𝓝 x, HasFDerivAt (f n.fst) (f' n.fst n.snd) n.snd
⊢ TendstoUniformlyOnFilter f' g' l (𝓝 x)

tactic: simp only [h1, prod_mem_prod_iff, univ_mem, and_self_iff]
state_before: ι : Type u_1
l : Filter ι
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
𝕜 : Type u_4
inst✝⁴ : IsROrC 𝕜
inst✝³ : NormedSpace 𝕜 E
G : Type u_3
inst✝² : NormedAddCommGroup G
inst✝¹ : NormedSpace 𝕜 G
f : ι → E → G
g : E → G
f' : ι → E → E →L[𝕜] G
g' : E → E →L[𝕜] G
x : E
inst✝ : NeBot l
s : Set E
hs : IsOpen s
hf' : TendstoLocallyUniformlyOn f' g' l s
hf : ∀ (n : ι) (x : E), x ∈ s → HasFDerivAt (f n) (f' n x) x
hfg : ∀ (x : E), x ∈ s → Tendsto (fun n => f n x) l (𝓝 (g x))
hx : x ∈ s
h1 : s ∈ 𝓝 x
⊢ Set.univ ×ˢ s ∈ l ×ˢ 𝓝 x