-- Mathlib/Topology/UniformSpace/UniformConvergence.lean
theorem tendstoUniformlyOn_of_seq_tendstoUniformlyOn {l : Filter ι} [l.IsCountablyGenerated]
    (h : ∀ u : ℕ → ι, Tendsto u atTop l → TendstoUniformlyOn (fun n => F (u n)) f atTop s) :
    TendstoUniformlyOn F f l s

Proof state:
α : Type u
β : Type v
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s : Set α
l : Filter ι
inst✝ : l.IsCountablyGenerated
h : ∀ (u : ℕ → ι), Tendsto u atTop l → TendstoUniformlyOn (fun n => F (u n)) f atTop s
⊢ TendstoUniformlyOn F f l s

Tactic:
rw [tendstoUniformlyOn_iff_tendsto, tendsto_iff_seq_tendsto]

Result:
α : Type u
β : Type v
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s : Set α
l : Filter ι
inst✝ : l.IsCountablyGenerated
h : ∀ (u : ℕ → ι), Tendsto u atTop l → TendstoUniformlyOn (fun n => F (u n)) f atTop s
⊢ ∀ (x : ℕ → ι × α), Tendsto x atTop (l ×ˢ 𝓟 s) → Tendsto ((fun q => (f q.2, F q.1 q.2)) ∘ x) atTop (𝓤 β)

Proof state:
α : Type u
β : Type v
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s : Set α
l : Filter ι
inst✝ : l.IsCountablyGenerated
h : ∀ (u : ℕ → ι), Tendsto u atTop l → TendstoUniformlyOn (fun n => F (u n)) f atTop s
u : ℕ → ι × α
hu : Tendsto (fun n => (u n).1) atTop l ∧ Tendsto (fun n => (u n).2) atTop (𝓟 s)
⊢ Tendsto ((fun q => (f q.2, F q.1 q.2)) ∘ u) atTop (𝓤 β)

Tactic:
specialize h (fun n => (u n).fst) hu.1

Result:
α : Type u
β : Type v
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s : Set α
l : Filter ι
inst✝ : l.IsCountablyGenerated
u : ℕ → ι × α
hu : Tendsto (fun n => (u n).1) atTop l ∧ Tendsto (fun n => (u n).2) atTop (𝓟 s)
h : TendstoUniformlyOn (fun n => F (u n).1) f atTop s
⊢ Tendsto ((fun q => (f q.2, F q.1 q.2)) ∘ u) atTop (𝓤 β)

Proof state:
α : Type u
β : Type v
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s : Set α
l : Filter ι
inst✝ : l.IsCountablyGenerated
u : ℕ → ι × α
hu : Tendsto (fun n => (u n).1) atTop l ∧ Tendsto (fun n => (u n).2) atTop (𝓟 s)
h : TendstoUniformlyOn (fun n => F (u n).1) f atTop s
⊢ Tendsto ((fun q => (f q.2, F q.1 q.2)) ∘ u) atTop (𝓤 β)

Tactic:
rw [tendstoUniformlyOn_iff_tendsto] at h

Result:
α : Type u
β : Type v
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s : Set α
l : Filter ι
inst✝ : l.IsCountablyGenerated
u : ℕ → ι × α
hu : Tendsto (fun n => (u n).1) atTop l ∧ Tendsto (fun n => (u n).2) atTop (𝓟 s)
h : Tendsto (fun q => (f q.2, F (u q.1).1 q.2)) (atTop ×ˢ 𝓟 s) (𝓤 β)
⊢ Tendsto ((fun q => (f q.2, F q.1 q.2)) ∘ u) atTop (𝓤 β)

Proof state:
α : Type u
β : Type v
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s : Set α
l : Filter ι
inst✝ : l.IsCountablyGenerated
h : ∀ (u : ℕ → ι), Tendsto u atTop l → TendstoUniformlyOn (fun n => F (u n)) f atTop s
u : ℕ → ι × α
hu : Tendsto u atTop (l ×ˢ 𝓟 s)
⊢ Tendsto ((fun q => (f q.2, F q.1 q.2)) ∘ u) atTop (𝓤 β)

Tactic:
rw [tendsto_prod_iff'] at hu

Result:
α : Type u
β : Type v
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s : Set α
l : Filter ι
inst✝ : l.IsCountablyGenerated
h : ∀ (u : ℕ → ι), Tendsto u atTop l → TendstoUniformlyOn (fun n => F (u n)) f atTop s
u : ℕ → ι × α
hu : Tendsto (fun n => (u n).1) atTop l ∧ Tendsto (fun n => (u n).2) atTop (𝓟 s)
⊢ Tendsto ((fun q => (f q.2, F q.1 q.2)) ∘ u) atTop (𝓤 β)

Proof state:
α : Type u
β : Type v
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s : Set α
l : Filter ι
inst✝ : l.IsCountablyGenerated
u : ℕ → ι × α
hu : Tendsto (fun n => (u n).1) atTop l ∧ Tendsto (fun n => (u n).2) atTop (𝓟 s)
h : Tendsto (fun q => (f q.2, F (u q.1).1 q.2)) (atTop ×ˢ 𝓟 s) (𝓤 β)
⊢ Tendsto ((fun q => (f q.2, F q.1 q.2)) ∘ u) atTop (𝓤 β)

Tactic:
exact h.comp (tendsto_id.prod_mk hu.2)

Result:
no goals

Proof state:
α : Type u
β : Type v
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s : Set α
l : Filter ι
inst✝ : l.IsCountablyGenerated
h : ∀ (u : ℕ → ι), Tendsto u atTop l → TendstoUniformlyOn (fun n => F (u n)) f atTop s
⊢ ∀ (x : ℕ → ι × α), Tendsto x atTop (l ×ˢ 𝓟 s) → Tendsto ((fun q => (f q.2, F q.1 q.2)) ∘ x) atTop (𝓤 β)

Tactic:
intro u hu

Result:
α : Type u
β : Type v
ι : Type x
inst✝¹ : UniformSpace β
F : ι → α → β
f : α → β
s : Set α
l : Filter ι
inst✝ : l.IsCountablyGenerated
h : ∀ (u : ℕ → ι), Tendsto u atTop l → TendstoUniformlyOn (fun n => F (u n)) f atTop s
u : ℕ → ι × α
hu : Tendsto u atTop (l ×ˢ 𝓟 s)
⊢ Tendsto ((fun q => (f q.2, F q.1 q.2)) ∘ u) atTop (𝓤 β)