[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hV : V ∈ 𝓤 β
⊢ ∃ V', V' ∈ 𝓤 β ∧ V' ⊆ V ∧ ∀ (g : C(α, β)), g ∈ compactConvNhd K V' f → compactConvNhd K V' g ⊆ compactConvNhd K V f
[PROOFSTEP]
obtain ⟨V', h₁, h₂⟩ := comp_mem_uniformity_sets hV
[GOAL]
case intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hV : V ∈ 𝓤 β
V' : Set (β × β)
h₁ : V' ∈ 𝓤 β
h₂ : V' ○ V' ⊆ V
⊢ ∃ V', V' ∈ 𝓤 β ∧ V' ⊆ V ∧ ∀ (g : C(α, β)), g ∈ compactConvNhd K V' f → compactConvNhd K V' g ⊆ compactConvNhd K V f
[PROOFSTEP]
exact
  ⟨V', h₁, Subset.trans (subset_comp_self_of_mem_uniformity h₁) h₂, fun g hg g' hg' =>
    compactConvNhd_mono f h₂ (compactConvNhd_mem_comp f hg hg')⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ ∀ {i j : Set α × Set (β × β)},
    IsCompact i.fst ∧ i.snd ∈ 𝓤 β →
      IsCompact j.fst ∧ j.snd ∈ 𝓤 β →
        ∃ k,
          (IsCompact k.fst ∧ k.snd ∈ 𝓤 β) ∧
            compactConvNhd k.fst k.snd f ⊆ compactConvNhd i.fst i.snd f ∩ compactConvNhd j.fst j.snd f
[PROOFSTEP]
rintro ⟨K₁, V₁⟩ ⟨K₂, V₂⟩ ⟨hK₁, hV₁⟩ ⟨hK₂, hV₂⟩
[GOAL]
case mk.mk.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
K₁ : Set α
V₁ : Set (β × β)
K₂ : Set α
V₂ : Set (β × β)
hK₁ : IsCompact (K₁, V₁).fst
hV₁ : (K₁, V₁).snd ∈ 𝓤 β
hK₂ : IsCompact (K₂, V₂).fst
hV₂ : (K₂, V₂).snd ∈ 𝓤 β
⊢ ∃ k,
    (IsCompact k.fst ∧ k.snd ∈ 𝓤 β) ∧
      compactConvNhd k.fst k.snd f ⊆
        compactConvNhd (K₁, V₁).fst (K₁, V₁).snd f ∩ compactConvNhd (K₂, V₂).fst (K₂, V₂).snd f
[PROOFSTEP]
exact ⟨⟨K₁ ∪ K₂, V₁ ∩ V₂⟩, ⟨hK₁.union hK₂, Filter.inter_mem hV₁ hV₂⟩, compactConvNhd_subset_inter f K₁ K₂ V₁ V₂⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
Y : Set C(α, β)
⊢ Y ∈ FilterBasis.filter (compactConvergenceFilterBasis f) ↔ ∃ K V _hK _hV, compactConvNhd K V f ⊆ Y
[PROOFSTEP]
constructor
[GOAL]
case mp
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
Y : Set C(α, β)
⊢ Y ∈ FilterBasis.filter (compactConvergenceFilterBasis f) → ∃ K V _hK _hV, compactConvNhd K V f ⊆ Y
[PROOFSTEP]
rintro ⟨X, ⟨⟨K, V⟩, ⟨hK, hV⟩, rfl⟩, hY⟩
[GOAL]
case mp.intro.intro.intro.mk.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
Y : Set C(α, β)
K : Set α
V : Set (β × β)
hK : IsCompact (K, V).fst
hV : (K, V).snd ∈ 𝓤 β
hY : (fun KV => compactConvNhd KV.fst KV.snd f) (K, V) ⊆ Y
⊢ ∃ K V _hK _hV, compactConvNhd K V f ⊆ Y
[PROOFSTEP]
exact ⟨K, V, hK, hV, hY⟩
[GOAL]
case mpr
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
Y : Set C(α, β)
⊢ (∃ K V _hK _hV, compactConvNhd K V f ⊆ Y) → Y ∈ FilterBasis.filter (compactConvergenceFilterBasis f)
[PROOFSTEP]
rintro ⟨K, V, hK, hV, hY⟩
[GOAL]
case mpr.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
Y : Set C(α, β)
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
hY : compactConvNhd K V f ⊆ Y
⊢ Y ∈ FilterBasis.filter (compactConvergenceFilterBasis f)
[PROOFSTEP]
exact ⟨compactConvNhd K V f, ⟨⟨K, V⟩, ⟨hK, hV⟩, rfl⟩, hY⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ 𝓝 f = FilterBasis.filter (compactConvergenceFilterBasis f)
[PROOFSTEP]
rw [TopologicalSpace.nhds_mkOfNhds_filterBasis]
[GOAL]
case h₀
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ ∀ (x : C(α, β)) (n : Set C(α, β)), n ∈ compactConvergenceFilterBasis x → x ∈ n
[PROOFSTEP]
rintro g - ⟨⟨K, V⟩, ⟨hK, hV⟩, rfl⟩
[GOAL]
case h₁
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ ∀ (x : C(α, β)) (n : Set C(α, β)),
    n ∈ compactConvergenceFilterBasis x →
      ∃ n₁,
        n₁ ∈ compactConvergenceFilterBasis x ∧
          n₁ ⊆ n ∧ ∀ (x' : C(α, β)), x' ∈ n₁ → ∃ n₂, n₂ ∈ compactConvergenceFilterBasis x' ∧ n₂ ⊆ n
[PROOFSTEP]
rintro g - ⟨⟨K, V⟩, ⟨hK, hV⟩, rfl⟩
[GOAL]
case h₀.intro.mk.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f g : C(α, β)
K : Set α
V : Set (β × β)
hK : IsCompact (K, V).fst
hV : (K, V).snd ∈ 𝓤 β
⊢ g ∈ (fun KV => compactConvNhd KV.fst KV.snd g) (K, V)
[PROOFSTEP]
exact self_mem_compactConvNhd g hV
[GOAL]
case h₁.intro.mk.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f g : C(α, β)
K : Set α
V : Set (β × β)
hK : IsCompact (K, V).fst
hV : (K, V).snd ∈ 𝓤 β
⊢ ∃ n₁,
    n₁ ∈ compactConvergenceFilterBasis g ∧
      n₁ ⊆ (fun KV => compactConvNhd KV.fst KV.snd g) (K, V) ∧
        ∀ (x' : C(α, β)),
          x' ∈ n₁ → ∃ n₂, n₂ ∈ compactConvergenceFilterBasis x' ∧ n₂ ⊆ (fun KV => compactConvNhd KV.fst KV.snd g) (K, V)
[PROOFSTEP]
obtain ⟨V', hV', h₁, h₂⟩ := compactConvNhd_nhd_basis g hV
[GOAL]
case h₁.intro.mk.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f g : C(α, β)
K : Set α
V : Set (β × β)
hK : IsCompact (K, V).fst
hV : (K, V).snd ∈ 𝓤 β
V' : Set (β × β)
hV' : V' ∈ 𝓤 β
h₁ : V' ⊆ (K, V).snd
h₂ :
  ∀ (g_1 : C(α, β)),
    g_1 ∈ compactConvNhd ?m.4688 V' g → compactConvNhd ?m.4688 V' g_1 ⊆ compactConvNhd ?m.4688 (K, V).snd g
⊢ ∃ n₁,
    n₁ ∈ compactConvergenceFilterBasis g ∧
      n₁ ⊆ (fun KV => compactConvNhd KV.fst KV.snd g) (K, V) ∧
        ∀ (x' : C(α, β)),
          x' ∈ n₁ → ∃ n₂, n₂ ∈ compactConvergenceFilterBasis x' ∧ n₂ ⊆ (fun KV => compactConvNhd KV.fst KV.snd g) (K, V)
[PROOFSTEP]
exact
  ⟨compactConvNhd K V' g, ⟨⟨K, V'⟩, ⟨hK, hV'⟩, rfl⟩, compactConvNhd_mono g h₁, fun g' hg' =>
    ⟨compactConvNhd K V' g', ⟨⟨K, V'⟩, ⟨hK, hV'⟩, rfl⟩, h₂ g' hg'⟩⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
⊢ Tendsto F p (𝓝 f) ↔ ∀ (K : Set α), IsCompact K → TendstoUniformlyOn (fun i a => ↑(F i) a) (↑f) p K
[PROOFSTEP]
simp only [(hasBasis_nhds_compactConvergence f).tendsto_right_iff, TendstoUniformlyOn, and_imp, Prod.forall]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
⊢ (∀ (a : Set α) (b : Set (β × β)), IsCompact a → b ∈ 𝓤 β → ∀ᶠ (x : ι) in p, F x ∈ compactConvNhd a b f) ↔
    ∀ (K : Set α), IsCompact K → ∀ (u : Set (β × β)), u ∈ 𝓤 β → ∀ᶠ (n : ι) in p, ∀ (x : α), x ∈ K → (↑f x, ↑(F n) x) ∈ u
[PROOFSTEP]
refine' forall_congr' fun K => _
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
K : Set α
⊢ (∀ (b : Set (β × β)), IsCompact K → b ∈ 𝓤 β → ∀ᶠ (x : ι) in p, F x ∈ compactConvNhd K b f) ↔
    IsCompact K → ∀ (u : Set (β × β)), u ∈ 𝓤 β → ∀ᶠ (n : ι) in p, ∀ (x : α), x ∈ K → (↑f x, ↑(F n) x) ∈ u
[PROOFSTEP]
rw [forall_swap]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
K : Set α
⊢ (IsCompact K → ∀ (x : Set (β × β)), x ∈ 𝓤 β → ∀ᶠ (x_1 : ι) in p, F x_1 ∈ compactConvNhd K x f) ↔
    IsCompact K → ∀ (u : Set (β × β)), u ∈ 𝓤 β → ∀ᶠ (n : ι) in p, ∀ (x : α), x ∈ K → (↑f x, ↑(F n) x) ∈ u
[PROOFSTEP]
exact forall₃_congr fun _hK V _hV => Iff.rfl
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
U : Set β
hU : IsOpen U
hf : f ∈ CompactOpen.gen K U
⊢ ∃ V, V ∈ 𝓤 β ∧ IsOpen V ∧ compactConvNhd K V f ⊆ CompactOpen.gen K U
[PROOFSTEP]
obtain ⟨V, hV₁, hV₂, hV₃⟩ := lebesgue_number_of_compact_open (hK.image f.continuous) hU hf
[GOAL]
case intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V✝ : Set (β × β)
f : C(α, β)
hK : IsCompact K
U : Set β
hU : IsOpen U
hf : f ∈ CompactOpen.gen K U
V : Set (β × β)
hV₁ : V ∈ 𝓤 β
hV₂ : IsOpen V
hV₃ : ∀ (x : β), x ∈ ↑f '' K → ball x V ⊆ U
⊢ ∃ V, V ∈ 𝓤 β ∧ IsOpen V ∧ compactConvNhd K V f ⊆ CompactOpen.gen K U
[PROOFSTEP]
refine' ⟨V, hV₁, hV₂, _⟩
[GOAL]
case intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V✝ : Set (β × β)
f : C(α, β)
hK : IsCompact K
U : Set β
hU : IsOpen U
hf : f ∈ CompactOpen.gen K U
V : Set (β × β)
hV₁ : V ∈ 𝓤 β
hV₂ : IsOpen V
hV₃ : ∀ (x : β), x ∈ ↑f '' K → ball x V ⊆ U
⊢ compactConvNhd K V f ⊆ CompactOpen.gen K U
[PROOFSTEP]
rintro g hg _ ⟨x, hx, rfl⟩
[GOAL]
case intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V✝ : Set (β × β)
f : C(α, β)
hK : IsCompact K
U : Set β
hU : IsOpen U
hf : f ∈ CompactOpen.gen K U
V : Set (β × β)
hV₁ : V ∈ 𝓤 β
hV₂ : IsOpen V
hV₃ : ∀ (x : β), x ∈ ↑f '' K → ball x V ⊆ U
g : C(α, β)
hg : g ∈ compactConvNhd K V f
x : α
hx : x ∈ K
⊢ ↑g x ∈ U
[PROOFSTEP]
exact hV₃ (f x) ⟨x, hx, rfl⟩ (hg x hx)
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
⊢ ∃ ι x C _hC U _hU,
    f ∈ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ∧ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ⊆ compactConvNhd K V f
[PROOFSTEP]
obtain ⟨W, hW₁, hW₄, hW₂, hW₃⟩ := comp_open_symm_mem_uniformity_sets hV
[GOAL]
case intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
⊢ ∃ ι x C _hC U _hU,
    f ∈ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ∧ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ⊆ compactConvNhd K V f
[PROOFSTEP]
obtain ⟨Z, hZ₁, hZ₄, hZ₂, hZ₃⟩ := comp_open_symm_mem_uniformity_sets hW₁
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
⊢ ∃ ι x C _hC U _hU,
    f ∈ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ∧ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ⊆ compactConvNhd K V f
[PROOFSTEP]
let U : α → Set α := fun x => f ⁻¹' ball (f x) Z
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
⊢ ∃ ι x C _hC U _hU,
    f ∈ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ∧ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ⊆ compactConvNhd K V f
[PROOFSTEP]
have hU : ∀ x, IsOpen (U x) := fun x => f.continuous.isOpen_preimage _ (isOpen_ball _ hZ₄)
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
⊢ ∃ ι x C _hC U _hU,
    f ∈ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ∧ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ⊆ compactConvNhd K V f
[PROOFSTEP]
have hUK : K ⊆ ⋃ x : K, U (x : K) := by
  intro x hx
  simp only [exists_prop, mem_iUnion, iUnion_coe_set, mem_preimage]
  exact ⟨(⟨x, hx⟩ : K), by simp [hx, mem_ball_self (f x) hZ₁]⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
⊢ K ⊆ ⋃ (x : ↑K), U ↑x
[PROOFSTEP]
intro x hx
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
x : α
hx : x ∈ K
⊢ x ∈ ⋃ (x : ↑K), U ↑x
[PROOFSTEP]
simp only [exists_prop, mem_iUnion, iUnion_coe_set, mem_preimage]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
x : α
hx : x ∈ K
⊢ ∃ i, i ∈ K ∧ ↑f x ∈ ball (↑f i) Z
[PROOFSTEP]
exact ⟨(⟨x, hx⟩ : K), by simp [hx, mem_ball_self (f x) hZ₁]⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
x : α
hx : x ∈ K
⊢ ↑{ val := x, property := hx } ∈ K ∧ ↑f x ∈ ball (↑f ↑{ val := x, property := hx }) Z
[PROOFSTEP]
simp [hx, mem_ball_self (f x) hZ₁]
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
⊢ ∃ ι x C _hC U _hU,
    f ∈ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ∧ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ⊆ compactConvNhd K V f
[PROOFSTEP]
obtain ⟨t, ht⟩ := hK.elim_finite_subcover _ (fun x : K => hU x.val) hUK
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
⊢ ∃ ι x C _hC U _hU,
    f ∈ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ∧ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ⊆ compactConvNhd K V f
[PROOFSTEP]
let C : t → Set α := fun i => K ∩ closure (U ((i : K) : α))
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
⊢ ∃ ι x C _hC U _hU,
    f ∈ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ∧ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ⊆ compactConvNhd K V f
[PROOFSTEP]
have hC : K ⊆ ⋃ i, C i := by
  rw [← K.inter_iUnion, subset_inter_iff]
  refine' ⟨Subset.rfl, ht.trans _⟩
  simp only [SetCoe.forall, Subtype.coe_mk, iUnion_subset_iff]
  exact fun x hx₁ hx₂ => subset_iUnion_of_subset (⟨_, hx₂⟩ : t) (by simp [subset_closure])
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
⊢ K ⊆ ⋃ (i : { x // x ∈ t }), C i
[PROOFSTEP]
rw [← K.inter_iUnion, subset_inter_iff]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
⊢ K ⊆ K ∧ K ⊆ ⋃ (i : { x // x ∈ t }), closure (U ↑↑i)
[PROOFSTEP]
refine' ⟨Subset.rfl, ht.trans _⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
⊢ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i ⊆ ⋃ (i : { x // x ∈ t }), closure (U ↑↑i)
[PROOFSTEP]
simp only [SetCoe.forall, Subtype.coe_mk, iUnion_subset_iff]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
⊢ ∀ (x : α) (h : x ∈ K),
    { val := x, property := h } ∈ t → ↑f ⁻¹' ball (↑f x) Z ⊆ ⋃ (i : { x // x ∈ t }), closure (↑f ⁻¹' ball (↑f ↑↑i) Z)
[PROOFSTEP]
exact fun x hx₁ hx₂ => subset_iUnion_of_subset (⟨_, hx₂⟩ : t) (by simp [subset_closure])
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
x : α
hx₁ : x ∈ K
hx₂ : { val := x, property := hx₁ } ∈ t
⊢ ↑f ⁻¹' ball (↑f x) Z ⊆ closure (↑f ⁻¹' ball (↑f ↑↑{ val := { val := x, property := hx₁ }, property := hx₂ }) Z)
[PROOFSTEP]
simp [subset_closure]
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
⊢ ∃ ι x C _hC U _hU,
    f ∈ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ∧ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ⊆ compactConvNhd K V f
[PROOFSTEP]
have hfC : ∀ i : t, C i ⊆ f ⁻¹' ball (f ((i : K) : α)) W :=
  by
  simp only [← image_subset_iff, ← mem_preimage]
  rintro ⟨⟨x, hx₁⟩, hx₂⟩
  have hZW : closure (ball (f x) Z) ⊆ ball (f x) W := by
    intro y hy
    obtain ⟨z, hz₁, hz₂⟩ := UniformSpace.mem_closure_iff_ball.mp hy hZ₁
    exact ball_mono hZ₃ _ (mem_ball_comp hz₂ ((mem_ball_symmetry hZ₂).mp hz₁))
  calc
    f '' (K ∩ closure (U x)) ⊆ f '' closure (U x) := image_subset _ (inter_subset_right _ _)
    _ ⊆ closure (f '' U x) := f.continuous.continuousOn.image_closure
    _ ⊆ closure (ball (f x) Z) := by
      apply closure_mono
      simp only [image_subset_iff]
      rfl
    _ ⊆ ball (f x) W := hZW
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
⊢ ∀ (i : { x // x ∈ t }), C i ⊆ ↑f ⁻¹' ball (↑f ↑↑i) W
[PROOFSTEP]
simp only [← image_subset_iff, ← mem_preimage]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
⊢ ∀ (i : { x // x ∈ t }), ↑f '' (K ∩ closure (↑f ⁻¹' ball (↑f ↑↑i) Z)) ⊆ ball (↑f ↑↑i) W
[PROOFSTEP]
rintro ⟨⟨x, hx₁⟩, hx₂⟩
[GOAL]
case mk.mk
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
x : α
hx₁ : x ∈ K
hx₂ : { val := x, property := hx₁ } ∈ t
⊢ ↑f '' (K ∩ closure (↑f ⁻¹' ball (↑f ↑↑{ val := { val := x, property := hx₁ }, property := hx₂ }) Z)) ⊆
    ball (↑f ↑↑{ val := { val := x, property := hx₁ }, property := hx₂ }) W
[PROOFSTEP]
have hZW : closure (ball (f x) Z) ⊆ ball (f x) W := by
  intro y hy
  obtain ⟨z, hz₁, hz₂⟩ := UniformSpace.mem_closure_iff_ball.mp hy hZ₁
  exact ball_mono hZ₃ _ (mem_ball_comp hz₂ ((mem_ball_symmetry hZ₂).mp hz₁))
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
x : α
hx₁ : x ∈ K
hx₂ : { val := x, property := hx₁ } ∈ t
⊢ closure (ball (↑f x) Z) ⊆ ball (↑f x) W
[PROOFSTEP]
intro y hy
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
x : α
hx₁ : x ∈ K
hx₂ : { val := x, property := hx₁ } ∈ t
y : β
hy : y ∈ closure (ball (↑f x) Z)
⊢ y ∈ ball (↑f x) W
[PROOFSTEP]
obtain ⟨z, hz₁, hz₂⟩ := UniformSpace.mem_closure_iff_ball.mp hy hZ₁
[GOAL]
case intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
x : α
hx₁ : x ∈ K
hx₂ : { val := x, property := hx₁ } ∈ t
y : β
hy : y ∈ closure (ball (↑f x) Z)
z : β
hz₁ : z ∈ ball y Z
hz₂ : z ∈ ball (↑f x) Z
⊢ y ∈ ball (↑f x) W
[PROOFSTEP]
exact ball_mono hZ₃ _ (mem_ball_comp hz₂ ((mem_ball_symmetry hZ₂).mp hz₁))
[GOAL]
case mk.mk
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
x : α
hx₁ : x ∈ K
hx₂ : { val := x, property := hx₁ } ∈ t
hZW : closure (ball (↑f x) Z) ⊆ ball (↑f x) W
⊢ ↑f '' (K ∩ closure (↑f ⁻¹' ball (↑f ↑↑{ val := { val := x, property := hx₁ }, property := hx₂ }) Z)) ⊆
    ball (↑f ↑↑{ val := { val := x, property := hx₁ }, property := hx₂ }) W
[PROOFSTEP]
calc
  f '' (K ∩ closure (U x)) ⊆ f '' closure (U x) := image_subset _ (inter_subset_right _ _)
  _ ⊆ closure (f '' U x) := f.continuous.continuousOn.image_closure
  _ ⊆ closure (ball (f x) Z) := by
    apply closure_mono
    simp only [image_subset_iff]
    rfl
  _ ⊆ ball (f x) W := hZW
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
x : α
hx₁ : x ∈ K
hx₂ : { val := x, property := hx₁ } ∈ t
hZW : closure (ball (↑f x) Z) ⊆ ball (↑f x) W
⊢ closure (↑f '' U x) ⊆ closure (ball (↑f x) Z)
[PROOFSTEP]
apply closure_mono
[GOAL]
case h
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
x : α
hx₁ : x ∈ K
hx₂ : { val := x, property := hx₁ } ∈ t
hZW : closure (ball (↑f x) Z) ⊆ ball (↑f x) W
⊢ ↑f '' U x ⊆ ball (↑f x) Z
[PROOFSTEP]
simp only [image_subset_iff]
[GOAL]
case h
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
x : α
hx₁ : x ∈ K
hx₂ : { val := x, property := hx₁ } ∈ t
hZW : closure (ball (↑f x) Z) ⊆ ball (↑f x) W
⊢ ↑f ⁻¹' ball (↑f x) Z ⊆ (fun a => ↑f a) ⁻¹' ball (↑f x) Z
[PROOFSTEP]
rfl
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
hfC : ∀ (i : { x // x ∈ t }), C i ⊆ ↑f ⁻¹' ball (↑f ↑↑i) W
⊢ ∃ ι x C _hC U _hU,
    f ∈ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ∧ ⋂ (i : ι), CompactOpen.gen (C i) (U i) ⊆ compactConvNhd K V f
[PROOFSTEP]
refine'
  ⟨t, t.fintypeCoeSort, C, fun i => hK.inter_right isClosed_closure, fun i => ball (f ((i : K) : α)) W, fun i =>
    isOpen_ball _ hW₄, by simp [CompactOpen.gen, hfC], fun g hg x hx => hW₃ (mem_compRel.mpr _)⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
hfC : ∀ (i : { x // x ∈ t }), C i ⊆ ↑f ⁻¹' ball (↑f ↑↑i) W
⊢ f ∈ ⋂ (i : { x // x ∈ t }), CompactOpen.gen (C i) ((fun i => ball (↑f ↑↑i) W) i)
[PROOFSTEP]
simp [CompactOpen.gen, hfC]
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
hfC : ∀ (i : { x // x ∈ t }), C i ⊆ ↑f ⁻¹' ball (↑f ↑↑i) W
g : C(α, β)
hg : g ∈ ⋂ (i : { x // x ∈ t }), CompactOpen.gen (C i) ((fun i => ball (↑f ↑↑i) W) i)
x : α
hx : x ∈ K
⊢ ∃ z, (↑f x, z) ∈ W ∧ (z, ↑g x) ∈ W
[PROOFSTEP]
simp only [mem_iInter, CompactOpen.gen, mem_setOf_eq, image_subset_iff] at hg
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
hfC : ∀ (i : { x // x ∈ t }), C i ⊆ ↑f ⁻¹' ball (↑f ↑↑i) W
g : C(α, β)
x : α
hx : x ∈ K
hg : ∀ (i : { x // x ∈ t }), K ∩ closure (↑f ⁻¹' ball (↑f ↑↑i) Z) ⊆ (fun a => ↑g a) ⁻¹' ball (↑f ↑↑i) W
⊢ ∃ z, (↑f x, z) ∈ W ∧ (z, ↑g x) ∈ W
[PROOFSTEP]
obtain ⟨y, hy⟩ := mem_iUnion.mp (hC hx)
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
hK : IsCompact K
hV : V ∈ 𝓤 β
W : Set (β × β)
hW₁ : W ∈ 𝓤 β
hW₄ : IsOpen W
hW₂ : SymmetricRel W
hW₃ : W ○ W ⊆ V
Z : Set (β × β)
hZ₁ : Z ∈ 𝓤 β
hZ₄ : IsOpen Z
hZ₂ : SymmetricRel Z
hZ₃ : Z ○ Z ⊆ W
U : α → Set α := fun x => ↑f ⁻¹' ball (↑f x) Z
hU : ∀ (x : α), IsOpen (U x)
hUK : K ⊆ ⋃ (x : ↑K), U ↑x
t : Finset ↑K
ht : K ⊆ ⋃ (i : ↑K) (_ : i ∈ t), U ↑i
C : { x // x ∈ t } → Set α := fun i => K ∩ closure (U ↑↑i)
hC : K ⊆ ⋃ (i : { x // x ∈ t }), C i
hfC : ∀ (i : { x // x ∈ t }), C i ⊆ ↑f ⁻¹' ball (↑f ↑↑i) W
g : C(α, β)
x : α
hx : x ∈ K
hg : ∀ (i : { x // x ∈ t }), K ∩ closure (↑f ⁻¹' ball (↑f ↑↑i) Z) ⊆ (fun a => ↑g a) ⁻¹' ball (↑f ↑↑i) W
y : { x // x ∈ t }
hy : x ∈ C y
⊢ ∃ z, (↑f x, z) ∈ W ∧ (z, ↑g x) ∈ W
[PROOFSTEP]
exact ⟨f y, (mem_ball_symmetry hW₂).mp (hfC y hy), mem_preimage.mp (hg y hy)⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ compactOpen = compactConvergenceTopology
[PROOFSTEP]
rw [compactConvergenceTopology, ContinuousMap.compactOpen]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ TopologicalSpace.generateFrom {m | ∃ s x u x, m = CompactOpen.gen s u} =
    TopologicalSpace.mkOfNhds fun f => FilterBasis.filter (compactConvergenceFilterBasis f)
[PROOFSTEP]
refine' le_antisymm _ _
[GOAL]
case refine'_1
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ TopologicalSpace.generateFrom {m | ∃ s x u x, m = CompactOpen.gen s u} ≤
    TopologicalSpace.mkOfNhds fun f => FilterBasis.filter (compactConvergenceFilterBasis f)
[PROOFSTEP]
refine' fun X hX => isOpen_iff_forall_mem_open.mpr fun f hf => _
[GOAL]
case refine'_1
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f✝ : C(α, β)
X : Set C(α, β)
hX : IsOpen X
f : C(α, β)
hf : f ∈ X
⊢ ∃ t, t ⊆ X ∧ IsOpen t ∧ f ∈ t
[PROOFSTEP]
have hXf : X ∈ (compactConvergenceFilterBasis f).filter :=
  by
  rw [← nhds_compactConvergence]
  exact @IsOpen.mem_nhds C(α, β) compactConvergenceTopology _ _ hX hf
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f✝ : C(α, β)
X : Set C(α, β)
hX : IsOpen X
f : C(α, β)
hf : f ∈ X
⊢ X ∈ FilterBasis.filter (compactConvergenceFilterBasis f)
[PROOFSTEP]
rw [← nhds_compactConvergence]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f✝ : C(α, β)
X : Set C(α, β)
hX : IsOpen X
f : C(α, β)
hf : f ∈ X
⊢ X ∈ 𝓝 f
[PROOFSTEP]
exact @IsOpen.mem_nhds C(α, β) compactConvergenceTopology _ _ hX hf
[GOAL]
case refine'_1
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f✝ : C(α, β)
X : Set C(α, β)
hX : IsOpen X
f : C(α, β)
hf : f ∈ X
hXf : X ∈ FilterBasis.filter (compactConvergenceFilterBasis f)
⊢ ∃ t, t ⊆ X ∧ IsOpen t ∧ f ∈ t
[PROOFSTEP]
obtain ⟨-, ⟨⟨K, V⟩, ⟨hK, hV⟩, rfl⟩, hXf⟩ := hXf
[GOAL]
case refine'_1.intro.intro.intro.mk.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f✝ : C(α, β)
X : Set C(α, β)
hX : IsOpen X
f : C(α, β)
hf : f ∈ X
K : Set α
V : Set (β × β)
hK : IsCompact (K, V).fst
hV : (K, V).snd ∈ 𝓤 β
hXf : (fun KV => compactConvNhd KV.fst KV.snd f) (K, V) ⊆ X
⊢ ∃ t, t ⊆ X ∧ IsOpen t ∧ f ∈ t
[PROOFSTEP]
obtain ⟨ι, hι, C, hC, U, hU, h₁, h₂⟩ := iInter_compactOpen_gen_subset_compactConvNhd f hK hV
[GOAL]
case refine'_1.intro.intro.intro.mk.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f✝ : C(α, β)
X : Set C(α, β)
hX : IsOpen X
f : C(α, β)
hf : f ∈ X
K : Set α
V : Set (β × β)
hK : IsCompact (K, V).fst
hV : (K, V).snd ∈ 𝓤 β
hXf : (fun KV => compactConvNhd KV.fst KV.snd f) (K, V) ⊆ X
ι : Type u₁
hι : Fintype ι
C : ι → Set α
hC : ∀ (i : ι), IsCompact (C i)
U : ι → Set β
hU : ∀ (i : ι), IsOpen (U i)
h₁ : f ∈ ⋂ (i : ι), CompactOpen.gen (C i) (U i)
h₂ : ⋂ (i : ι), CompactOpen.gen (C i) (U i) ⊆ compactConvNhd (K, V).fst (K, V).snd f
⊢ ∃ t, t ⊆ X ∧ IsOpen t ∧ f ∈ t
[PROOFSTEP]
haveI := hι
[GOAL]
case refine'_1.intro.intro.intro.mk.intro.intro.intro.intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f✝ : C(α, β)
X : Set C(α, β)
hX : IsOpen X
f : C(α, β)
hf : f ∈ X
K : Set α
V : Set (β × β)
hK : IsCompact (K, V).fst
hV : (K, V).snd ∈ 𝓤 β
hXf : (fun KV => compactConvNhd KV.fst KV.snd f) (K, V) ⊆ X
ι : Type u₁
hι : Fintype ι
C : ι → Set α
hC : ∀ (i : ι), IsCompact (C i)
U : ι → Set β
hU : ∀ (i : ι), IsOpen (U i)
h₁ : f ∈ ⋂ (i : ι), CompactOpen.gen (C i) (U i)
h₂ : ⋂ (i : ι), CompactOpen.gen (C i) (U i) ⊆ compactConvNhd (K, V).fst (K, V).snd f
this : Fintype ι
⊢ ∃ t, t ⊆ X ∧ IsOpen t ∧ f ∈ t
[PROOFSTEP]
exact
  ⟨⋂ i, CompactOpen.gen (C i) (U i), h₂.trans hXf, isOpen_iInter fun i => ContinuousMap.isOpen_gen (hC i) (hU i), h₁⟩
[GOAL]
case refine'_2
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ (TopologicalSpace.mkOfNhds fun f => FilterBasis.filter (compactConvergenceFilterBasis f)) ≤
    TopologicalSpace.generateFrom {m | ∃ s x u x, m = CompactOpen.gen s u}
[PROOFSTEP]
simp only [TopologicalSpace.le_generateFrom_iff_subset_isOpen, and_imp, exists_prop, forall_exists_index,
  setOf_subset_setOf]
[GOAL]
case refine'_2
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ ∀ (a : Set C(α, β)) (x : Set α), IsCompact x → ∀ (x_1 : Set β), IsOpen x_1 → a = CompactOpen.gen x x_1 → IsOpen a
[PROOFSTEP]
rintro - K hK U hU rfl f hf
[GOAL]
case refine'_2
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V : Set (β × β)
f✝ : C(α, β)
K : Set α
hK : IsCompact K
U : Set β
hU : IsOpen U
f : C(α, β)
hf : f ∈ CompactOpen.gen K U
⊢ CompactOpen.gen K U ∈ (fun f => FilterBasis.filter (compactConvergenceFilterBasis f)) f
[PROOFSTEP]
obtain ⟨V, hV, _hV', hVf⟩ := compactConvNhd_subset_compactOpen f hK hU hf
[GOAL]
case refine'_2.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f✝ : C(α, β)
K : Set α
hK : IsCompact K
U : Set β
hU : IsOpen U
f : C(α, β)
hf : f ∈ CompactOpen.gen K U
V : Set (β × β)
hV : V ∈ 𝓤 β
_hV' : IsOpen V
hVf : compactConvNhd K V f ⊆ CompactOpen.gen K U
⊢ CompactOpen.gen K U ∈ (fun f => FilterBasis.filter (compactConvergenceFilterBasis f)) f
[PROOFSTEP]
exact Filter.mem_of_superset (FilterBasis.mem_filter_of_mem _ ⟨⟨K, V⟩, ⟨hK, hV⟩, rfl⟩) hVf
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ HasBasis compactConvergenceUniformity (fun p => IsCompact p.fst ∧ p.snd ∈ 𝓤 β) fun p =>
    {fg | ∀ (x : α), x ∈ p.fst → (↑fg.fst x, ↑fg.snd x) ∈ p.snd}
[PROOFSTEP]
refine' Filter.hasBasis_biInf_principal _ compactConvNhd_compact_entourage_nonempty
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ DirectedOn ((fun KV => {fg | ∀ (x : α), x ∈ KV.fst → (↑fg.fst x, ↑fg.snd x) ∈ KV.snd}) ⁻¹'o fun x x_1 => x ≥ x_1)
    {KV | IsCompact KV.fst ∧ KV.snd ∈ 𝓤 β}
[PROOFSTEP]
rintro ⟨K₁, V₁⟩ ⟨hK₁, hV₁⟩ ⟨K₂, V₂⟩ ⟨hK₂, hV₂⟩
[GOAL]
case mk.intro.mk.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
K₁ : Set α
V₁ : Set (β × β)
hK₁ : IsCompact (K₁, V₁).fst
hV₁ : (K₁, V₁).snd ∈ 𝓤 β
K₂ : Set α
V₂ : Set (β × β)
hK₂ : IsCompact (K₂, V₂).fst
hV₂ : (K₂, V₂).snd ∈ 𝓤 β
⊢ ∃ z,
    z ∈ {KV | IsCompact KV.fst ∧ KV.snd ∈ 𝓤 β} ∧
      ((fun KV => {fg | ∀ (x : α), x ∈ KV.fst → (↑fg.fst x, ↑fg.snd x) ∈ KV.snd}) ⁻¹'o fun x x_1 => x ≥ x_1) (K₁, V₁)
          z ∧
        ((fun KV => {fg | ∀ (x : α), x ∈ KV.fst → (↑fg.fst x, ↑fg.snd x) ∈ KV.snd}) ⁻¹'o fun x x_1 => x ≥ x_1) (K₂, V₂)
          z
[PROOFSTEP]
refine' ⟨⟨K₁ ∪ K₂, V₁ ∩ V₂⟩, ⟨hK₁.union hK₂, Filter.inter_mem hV₁ hV₂⟩, _⟩
[GOAL]
case mk.intro.mk.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
K₁ : Set α
V₁ : Set (β × β)
hK₁ : IsCompact (K₁, V₁).fst
hV₁ : (K₁, V₁).snd ∈ 𝓤 β
K₂ : Set α
V₂ : Set (β × β)
hK₂ : IsCompact (K₂, V₂).fst
hV₂ : (K₂, V₂).snd ∈ 𝓤 β
⊢ ((fun KV => {fg | ∀ (x : α), x ∈ KV.fst → (↑fg.fst x, ↑fg.snd x) ∈ KV.snd}) ⁻¹'o fun x x_1 => x ≥ x_1) (K₁, V₁)
      (K₁ ∪ K₂, V₁ ∩ V₂) ∧
    ((fun KV => {fg | ∀ (x : α), x ∈ KV.fst → (↑fg.fst x, ↑fg.snd x) ∈ KV.snd}) ⁻¹'o fun x x_1 => x ≥ x_1) (K₂, V₂)
      (K₁ ∪ K₂, V₁ ∩ V₂)
[PROOFSTEP]
simp only [le_eq_subset, Prod.forall, setOf_subset_setOf, ge_iff_le, Order.Preimage, ← forall_and, mem_inter_iff,
  mem_union]
[GOAL]
case mk.intro.mk.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
K₁ : Set α
V₁ : Set (β × β)
hK₁ : IsCompact (K₁, V₁).fst
hV₁ : (K₁, V₁).snd ∈ 𝓤 β
K₂ : Set α
V₂ : Set (β × β)
hK₂ : IsCompact (K₂, V₂).fst
hV₂ : (K₂, V₂).snd ∈ 𝓤 β
⊢ ∀ (x x_1 : C(α, β)),
    (∀ (x_2 : α), x_2 ∈ K₁ ∨ x_2 ∈ K₂ → (↑x x_2, ↑x_1 x_2) ∈ V₁ ∧ (↑x x_2, ↑x_1 x_2) ∈ V₂) →
      ∀ (x_3 : α), (x_3 ∈ K₁ → (↑x x_3, ↑x_1 x_3) ∈ V₁) ∧ (x_3 ∈ K₂ → (↑x x_3, ↑x_1 x_3) ∈ V₂)
[PROOFSTEP]
exact fun f g => forall_imp fun x => by tauto
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f✝ : C(α, β)
K₁ : Set α
V₁ : Set (β × β)
hK₁ : IsCompact (K₁, V₁).fst
hV₁ : (K₁, V₁).snd ∈ 𝓤 β
K₂ : Set α
V₂ : Set (β × β)
hK₂ : IsCompact (K₂, V₂).fst
hV₂ : (K₂, V₂).snd ∈ 𝓤 β
f g : C(α, β)
x : α
⊢ (x ∈ K₁ ∨ x ∈ K₂ → (↑f x, ↑g x) ∈ V₁ ∧ (↑f x, ↑g x) ∈ V₂) →
    (x ∈ K₁ → (↑f x, ↑g x) ∈ V₁) ∧ (x ∈ K₂ → (↑f x, ↑g x) ∈ V₂)
[PROOFSTEP]
tauto
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
X : Set (C(α, β) × C(α, β))
⊢ X ∈ compactConvergenceUniformity ↔ ∃ K V _hK _hV, {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V} ⊆ X
[PROOFSTEP]
simp only [hasBasis_compactConvergenceUniformity_aux.mem_iff, exists_prop, Prod.exists, and_assoc]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ 𝓟 idRel ≤ compactConvergenceUniformity
[PROOFSTEP]
simp only [compactConvergenceUniformity, and_imp, Filter.le_principal_iff, Prod.forall, Filter.mem_principal,
  mem_setOf_eq, le_iInf_iff, idRel_subset]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ ∀ (a : Set α) (b : Set (β × β)), IsCompact a → b ∈ 𝓤 β → ∀ (a_3 : C(α, β)) (x : α), x ∈ a → (↑a_3 x, ↑a_3 x) ∈ b
[PROOFSTEP]
exact fun K V _hK hV f x _hx => refl_mem_uniformity hV
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ Tendsto Prod.swap compactConvergenceUniformity compactConvergenceUniformity
[PROOFSTEP]
simp only [compactConvergenceUniformity, and_imp, Prod.forall, mem_setOf_eq, Prod.fst_swap, Filter.tendsto_principal,
  Prod.snd_swap, Filter.tendsto_iInf]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ ∀ (a : Set α) (b : Set (β × β)),
    IsCompact a →
      b ∈ 𝓤 β →
        ∀ᶠ (a_3 : C(α, β) × C(α, β)) in
          ⨅ (KV : Set α × Set (β × β)) (_ : IsCompact KV.fst ∧ KV.snd ∈ 𝓤 β),
            𝓟 {fg | ∀ (x : α), x ∈ KV.fst → (↑fg.fst x, ↑fg.snd x) ∈ KV.snd},
          ∀ (x : α), x ∈ a → (↑a_3.snd x, ↑a_3.fst x) ∈ b
[PROOFSTEP]
intro K V hK hV
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
⊢ ∀ᶠ (a : C(α, β) × C(α, β)) in
    ⨅ (KV : Set α × Set (β × β)) (_ : IsCompact KV.fst ∧ KV.snd ∈ 𝓤 β),
      𝓟 {fg | ∀ (x : α), x ∈ KV.fst → (↑fg.fst x, ↑fg.snd x) ∈ KV.snd},
    ∀ (x : α), x ∈ K → (↑a.snd x, ↑a.fst x) ∈ V
[PROOFSTEP]
obtain ⟨V', hV', hsymm, hsub⟩ := symm_of_uniformity hV
[GOAL]
case intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
V' : Set (β × β)
hV' : V' ∈ 𝓤 β
hsymm : ∀ (a b : β), (a, b) ∈ V' → (b, a) ∈ V'
hsub : V' ⊆ V
⊢ ∀ᶠ (a : C(α, β) × C(α, β)) in
    ⨅ (KV : Set α × Set (β × β)) (_ : IsCompact KV.fst ∧ KV.snd ∈ 𝓤 β),
      𝓟 {fg | ∀ (x : α), x ∈ KV.fst → (↑fg.fst x, ↑fg.snd x) ∈ KV.snd},
    ∀ (x : α), x ∈ K → (↑a.snd x, ↑a.fst x) ∈ V
[PROOFSTEP]
let X := {fg : C(α, β) × C(α, β) | ∀ x : α, x ∈ K → (fg.1 x, fg.2 x) ∈ V'}
[GOAL]
case intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
V' : Set (β × β)
hV' : V' ∈ 𝓤 β
hsymm : ∀ (a b : β), (a, b) ∈ V' → (b, a) ∈ V'
hsub : V' ⊆ V
X : Set (C(α, β) × C(α, β)) := {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'}
⊢ ∀ᶠ (a : C(α, β) × C(α, β)) in
    ⨅ (KV : Set α × Set (β × β)) (_ : IsCompact KV.fst ∧ KV.snd ∈ 𝓤 β),
      𝓟 {fg | ∀ (x : α), x ∈ KV.fst → (↑fg.fst x, ↑fg.snd x) ∈ KV.snd},
    ∀ (x : α), x ∈ K → (↑a.snd x, ↑a.fst x) ∈ V
[PROOFSTEP]
have hX : X ∈ compactConvergenceUniformity := (mem_compactConvergenceUniformity X).mpr ⟨K, V', hK, hV', by simp⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
V' : Set (β × β)
hV' : V' ∈ 𝓤 β
hsymm : ∀ (a b : β), (a, b) ∈ V' → (b, a) ∈ V'
hsub : V' ⊆ V
X : Set (C(α, β) × C(α, β)) := {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'}
⊢ {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'} ⊆ X
[PROOFSTEP]
simp
[GOAL]
case intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
V' : Set (β × β)
hV' : V' ∈ 𝓤 β
hsymm : ∀ (a b : β), (a, b) ∈ V' → (b, a) ∈ V'
hsub : V' ⊆ V
X : Set (C(α, β) × C(α, β)) := {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'}
hX : X ∈ compactConvergenceUniformity
⊢ ∀ᶠ (a : C(α, β) × C(α, β)) in
    ⨅ (KV : Set α × Set (β × β)) (_ : IsCompact KV.fst ∧ KV.snd ∈ 𝓤 β),
      𝓟 {fg | ∀ (x : α), x ∈ KV.fst → (↑fg.fst x, ↑fg.snd x) ∈ KV.snd},
    ∀ (x : α), x ∈ K → (↑a.snd x, ↑a.fst x) ∈ V
[PROOFSTEP]
exact Filter.eventually_of_mem hX fun fg hfg x hx => hsub (hsymm _ _ (hfg x hx))
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
X : Set (C(α, β) × C(α, β))
hX : X ∈ compactConvergenceUniformity
⊢ X ∈ Filter.lift' compactConvergenceUniformity fun s => s ○ s
[PROOFSTEP]
obtain ⟨K, V, hK, hV, hX⟩ := (mem_compactConvergenceUniformity X).mp hX
[GOAL]
case intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
X : Set (C(α, β) × C(α, β))
hX✝ : X ∈ compactConvergenceUniformity
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
hX : {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V} ⊆ X
⊢ X ∈ Filter.lift' compactConvergenceUniformity fun s => s ○ s
[PROOFSTEP]
obtain ⟨V', hV', hcomp⟩ := comp_mem_uniformity_sets hV
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
X : Set (C(α, β) × C(α, β))
hX✝ : X ∈ compactConvergenceUniformity
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
hX : {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V} ⊆ X
V' : Set (β × β)
hV' : V' ∈ 𝓤 β
hcomp : V' ○ V' ⊆ V
⊢ X ∈ Filter.lift' compactConvergenceUniformity fun s => s ○ s
[PROOFSTEP]
let h := fun s : Set (C(α, β) × C(α, β)) => s ○ s
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
X : Set (C(α, β) × C(α, β))
hX✝ : X ∈ compactConvergenceUniformity
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
hX : {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V} ⊆ X
V' : Set (β × β)
hV' : V' ∈ 𝓤 β
hcomp : V' ○ V' ⊆ V
h : Set (C(α, β) × C(α, β)) → Set (C(α, β) × C(α, β)) := fun s => s ○ s
⊢ X ∈ Filter.lift' compactConvergenceUniformity fun s => s ○ s
[PROOFSTEP]
suffices h {fg : C(α, β) × C(α, β) | ∀ x ∈ K, (fg.1 x, fg.2 x) ∈ V'} ∈ compactConvergenceUniformity.lift' h
  by
  apply Filter.mem_of_superset this
  rintro ⟨f, g⟩ ⟨z, hz₁, hz₂⟩
  refine' hX fun x hx => hcomp _
  exact ⟨z x, hz₁ x hx, hz₂ x hx⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
X : Set (C(α, β) × C(α, β))
hX✝ : X ∈ compactConvergenceUniformity
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
hX : {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V} ⊆ X
V' : Set (β × β)
hV' : V' ∈ 𝓤 β
hcomp : V' ○ V' ⊆ V
h : Set (C(α, β) × C(α, β)) → Set (C(α, β) × C(α, β)) := fun s => s ○ s
this : h {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'} ∈ Filter.lift' compactConvergenceUniformity h
⊢ X ∈ Filter.lift' compactConvergenceUniformity fun s => s ○ s
[PROOFSTEP]
apply Filter.mem_of_superset this
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
X : Set (C(α, β) × C(α, β))
hX✝ : X ∈ compactConvergenceUniformity
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
hX : {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V} ⊆ X
V' : Set (β × β)
hV' : V' ∈ 𝓤 β
hcomp : V' ○ V' ⊆ V
h : Set (C(α, β) × C(α, β)) → Set (C(α, β) × C(α, β)) := fun s => s ○ s
this : h {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'} ∈ Filter.lift' compactConvergenceUniformity h
⊢ h {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'} ⊆ X
[PROOFSTEP]
rintro ⟨f, g⟩ ⟨z, hz₁, hz₂⟩
[GOAL]
case mk.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f✝ : C(α, β)
X : Set (C(α, β) × C(α, β))
hX✝ : X ∈ compactConvergenceUniformity
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
hX : {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V} ⊆ X
V' : Set (β × β)
hV' : V' ∈ 𝓤 β
hcomp : V' ○ V' ⊆ V
h : Set (C(α, β) × C(α, β)) → Set (C(α, β) × C(α, β)) := fun s => s ○ s
this : h {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'} ∈ Filter.lift' compactConvergenceUniformity h
f g z : C(α, β)
hz₁ : ((f, g).fst, z) ∈ {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'}
hz₂ : (z, (f, g).snd) ∈ {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'}
⊢ (f, g) ∈ X
[PROOFSTEP]
refine' hX fun x hx => hcomp _
[GOAL]
case mk.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f✝ : C(α, β)
X : Set (C(α, β) × C(α, β))
hX✝ : X ∈ compactConvergenceUniformity
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
hX : {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V} ⊆ X
V' : Set (β × β)
hV' : V' ∈ 𝓤 β
hcomp : V' ○ V' ⊆ V
h : Set (C(α, β) × C(α, β)) → Set (C(α, β) × C(α, β)) := fun s => s ○ s
this : h {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'} ∈ Filter.lift' compactConvergenceUniformity h
f g z : C(α, β)
hz₁ : ((f, g).fst, z) ∈ {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'}
hz₂ : (z, (f, g).snd) ∈ {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'}
x : α
hx : x ∈ K
⊢ (↑(f, g).fst x, ↑(f, g).snd x) ∈ V' ○ V'
[PROOFSTEP]
exact ⟨z x, hz₁ x hx, hz₂ x hx⟩
[GOAL]
case intro.intro.intro.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
X : Set (C(α, β) × C(α, β))
hX✝ : X ∈ compactConvergenceUniformity
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
hX : {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V} ⊆ X
V' : Set (β × β)
hV' : V' ∈ 𝓤 β
hcomp : V' ○ V' ⊆ V
h : Set (C(α, β) × C(α, β)) → Set (C(α, β) × C(α, β)) := fun s => s ○ s
⊢ h {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'} ∈ Filter.lift' compactConvergenceUniformity h
[PROOFSTEP]
apply Filter.mem_lift'
[GOAL]
case intro.intro.intro.intro.intro.intro.ht
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
X : Set (C(α, β) × C(α, β))
hX✝ : X ∈ compactConvergenceUniformity
K : Set α
V : Set (β × β)
hK : IsCompact K
hV : V ∈ 𝓤 β
hX : {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V} ⊆ X
V' : Set (β × β)
hV' : V' ∈ 𝓤 β
hcomp : V' ○ V' ⊆ V
h : Set (C(α, β) × C(α, β)) → Set (C(α, β) × C(α, β)) := fun s => s ○ s
⊢ {fg | ∀ (x : α), x ∈ K → (↑fg.fst x, ↑fg.snd x) ∈ V'} ∈ compactConvergenceUniformity
[PROOFSTEP]
exact (mem_compactConvergenceUniformity _).mpr ⟨K, V', hK, hV', Subset.refl _⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ ∀ (s : Set C(α, β)),
    IsOpen s ↔
      ∀ (x : C(α, β)),
        x ∈ s →
          {p | p.fst = x → p.snd ∈ s} ∈
            { uniformity := compactConvergenceUniformity, refl := (_ : 𝓟 idRel ≤ compactConvergenceUniformity),
                symm := (_ : Tendsto Prod.swap compactConvergenceUniformity compactConvergenceUniformity),
                comp :=
                  (_ :
                    ∀ (X : Set (C(α, β) × C(α, β))),
                      X ∈ compactConvergenceUniformity →
                        X ∈ Filter.lift' compactConvergenceUniformity fun s => s ○ s) }.uniformity
[PROOFSTEP]
rw [compactOpen_eq_compactConvergence]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
⊢ ∀ (s : Set C(α, β)),
    IsOpen s ↔
      ∀ (x : C(α, β)),
        x ∈ s →
          {p | p.fst = x → p.snd ∈ s} ∈
            { uniformity := compactConvergenceUniformity, refl := (_ : 𝓟 idRel ≤ compactConvergenceUniformity),
                symm := (_ : Tendsto Prod.swap compactConvergenceUniformity compactConvergenceUniformity),
                comp :=
                  (_ :
                    ∀ (X : Set (C(α, β) × C(α, β))),
                      X ∈ compactConvergenceUniformity →
                        X ∈ Filter.lift' compactConvergenceUniformity fun s => s ○ s) }.uniformity
[PROOFSTEP]
refine' fun Y => forall₂_congr fun f hf => _
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f✝ : C(α, β)
Y : Set C(α, β)
f : C(α, β)
hf : f ∈ Y
⊢ Y ∈ (fun f => FilterBasis.filter (compactConvergenceFilterBasis f)) f ↔
    {p | p.fst = f → p.snd ∈ Y} ∈
      { uniformity := compactConvergenceUniformity, refl := (_ : 𝓟 idRel ≤ compactConvergenceUniformity),
          symm := (_ : Tendsto Prod.swap compactConvergenceUniformity compactConvergenceUniformity),
          comp :=
            (_ :
              ∀ (X : Set (C(α, β) × C(α, β))),
                X ∈ compactConvergenceUniformity →
                  X ∈ Filter.lift' compactConvergenceUniformity fun s => s ○ s) }.uniformity
[PROOFSTEP]
simp only [mem_compactConvergence_nhd_filter, mem_compactConvergenceUniformity, Prod.forall, setOf_subset_setOf,
  compactConvNhd]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f✝ : C(α, β)
Y : Set C(α, β)
f : C(α, β)
hf : f ∈ Y
⊢ (∃ K V h h, {g | ∀ (x : α), x ∈ K → (↑f x, ↑g x) ∈ V} ⊆ Y) ↔
    ∃ K V h h, ∀ (a b : C(α, β)), (∀ (x : α), x ∈ K → (↑a x, ↑b x) ∈ V) → a = f → b ∈ Y
[PROOFSTEP]
refine' exists₄_congr fun K V _hK _hV => ⟨_, fun hY g hg => hY f g hg rfl⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f✝ : C(α, β)
Y : Set C(α, β)
f : C(α, β)
hf : f ∈ Y
K : Set α
V : Set (β × β)
_hK : IsCompact K
_hV : V ∈ 𝓤 β
⊢ {g | ∀ (x : α), x ∈ K → (↑f x, ↑g x) ∈ V} ⊆ Y →
    ∀ (a b : C(α, β)), (∀ (x : α), x ∈ K → (↑a x, ↑b x) ∈ V) → a = f → b ∈ Y
[PROOFSTEP]
rintro hY g₁ g₂ hg₁ rfl
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V✝ : Set (β × β)
f : C(α, β)
Y : Set C(α, β)
K : Set α
V : Set (β × β)
_hK : IsCompact K
_hV : V ∈ 𝓤 β
g₁ g₂ : C(α, β)
hg₁ : ∀ (x : α), x ∈ K → (↑g₁ x, ↑g₂ x) ∈ V
hf : g₁ ∈ Y
hY : {g | ∀ (x : α), x ∈ K → (↑g₁ x, ↑g x) ∈ V} ⊆ Y
⊢ g₂ ∈ Y
[PROOFSTEP]
exact hY hg₁
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u_1
pi : ι → Prop
s : ι → Set (β × β)
h : HasBasis (𝓤 β) pi s
⊢ HasBasis (𝓤 C(α, β)) (fun p => IsCompact p.fst ∧ pi p.snd) fun p =>
    {fg | ∀ (x : α), x ∈ p.fst → (↑fg.fst x, ↑fg.snd x) ∈ s p.snd}
[PROOFSTEP]
refine' hasBasis_compactConvergenceUniformity.to_hasBasis _ _
[GOAL]
case refine'_1
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u_1
pi : ι → Prop
s : ι → Set (β × β)
h : HasBasis (𝓤 β) pi s
⊢ ∀ (i : Set α × Set (β × β)),
    IsCompact i.fst ∧ i.snd ∈ 𝓤 β →
      ∃ i',
        (IsCompact i'.fst ∧ pi i'.snd) ∧
          {fg | ∀ (x : α), x ∈ i'.fst → (↑fg.fst x, ↑fg.snd x) ∈ s i'.snd} ⊆
            {fg | ∀ (x : α), x ∈ i.fst → (↑fg.fst x, ↑fg.snd x) ∈ i.snd}
[PROOFSTEP]
rintro ⟨t₁, t₂⟩ ⟨h₁, h₂⟩
[GOAL]
case refine'_1.mk.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u_1
pi : ι → Prop
s : ι → Set (β × β)
h : HasBasis (𝓤 β) pi s
t₁ : Set α
t₂ : Set (β × β)
h₁ : IsCompact (t₁, t₂).fst
h₂ : (t₁, t₂).snd ∈ 𝓤 β
⊢ ∃ i',
    (IsCompact i'.fst ∧ pi i'.snd) ∧
      {fg | ∀ (x : α), x ∈ i'.fst → (↑fg.fst x, ↑fg.snd x) ∈ s i'.snd} ⊆
        {fg | ∀ (x : α), x ∈ (t₁, t₂).fst → (↑fg.fst x, ↑fg.snd x) ∈ (t₁, t₂).snd}
[PROOFSTEP]
rcases h.mem_iff.1 h₂ with ⟨i, hpi, hi⟩
[GOAL]
case refine'_1.mk.intro.intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u_1
pi : ι → Prop
s : ι → Set (β × β)
h : HasBasis (𝓤 β) pi s
t₁ : Set α
t₂ : Set (β × β)
h₁ : IsCompact (t₁, t₂).fst
h₂ : (t₁, t₂).snd ∈ 𝓤 β
i : ι
hpi : pi i
hi : s i ⊆ (t₁, t₂).snd
⊢ ∃ i',
    (IsCompact i'.fst ∧ pi i'.snd) ∧
      {fg | ∀ (x : α), x ∈ i'.fst → (↑fg.fst x, ↑fg.snd x) ∈ s i'.snd} ⊆
        {fg | ∀ (x : α), x ∈ (t₁, t₂).fst → (↑fg.fst x, ↑fg.snd x) ∈ (t₁, t₂).snd}
[PROOFSTEP]
exact ⟨(t₁, i), ⟨h₁, hpi⟩, fun fg hfg x hx => hi (hfg _ hx)⟩
[GOAL]
case refine'_2
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u_1
pi : ι → Prop
s : ι → Set (β × β)
h : HasBasis (𝓤 β) pi s
⊢ ∀ (i' : Set α × ι),
    IsCompact i'.fst ∧ pi i'.snd →
      ∃ i,
        (IsCompact i.fst ∧ i.snd ∈ 𝓤 β) ∧
          {fg | ∀ (x : α), x ∈ i.fst → (↑fg.fst x, ↑fg.snd x) ∈ i.snd} ⊆
            {fg | ∀ (x : α), x ∈ i'.fst → (↑fg.fst x, ↑fg.snd x) ∈ s i'.snd}
[PROOFSTEP]
rintro ⟨t, i⟩ ⟨ht, hi⟩
[GOAL]
case refine'_2.mk.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u_1
pi : ι → Prop
s : ι → Set (β × β)
h : HasBasis (𝓤 β) pi s
t : Set α
i : ι
ht : IsCompact (t, i).fst
hi : pi (t, i).snd
⊢ ∃ i_1,
    (IsCompact i_1.fst ∧ i_1.snd ∈ 𝓤 β) ∧
      {fg | ∀ (x : α), x ∈ i_1.fst → (↑fg.fst x, ↑fg.snd x) ∈ i_1.snd} ⊆
        {fg | ∀ (x : α), x ∈ (t, i).fst → (↑fg.fst x, ↑fg.snd x) ∈ s (t, i).snd}
[PROOFSTEP]
exact ⟨(t, s i), ⟨ht, h.mem_of_mem hi⟩, Subset.rfl⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
⊢ Tendsto F p (𝓝 f) ↔ ∀ (K : Set α), IsCompact K → TendstoUniformlyOn (fun i a => ↑(F i) a) (↑f) p K
[PROOFSTEP]
rw [compactOpen_eq_compactConvergence, tendsto_iff_forall_compact_tendstoUniformlyOn']
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
h : TendstoLocallyUniformly (fun i a => ↑(F i) a) (↑f) p
⊢ Tendsto F p (𝓝 f)
[PROOFSTEP]
rw [tendsto_iff_forall_compact_tendstoUniformlyOn]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
h : TendstoLocallyUniformly (fun i a => ↑(F i) a) (↑f) p
⊢ ∀ (K : Set α), IsCompact K → TendstoUniformlyOn (fun i a => ↑(F i) a) (↑f) p K
[PROOFSTEP]
intro K hK
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
h : TendstoLocallyUniformly (fun i a => ↑(F i) a) (↑f) p
K : Set α
hK : IsCompact K
⊢ TendstoUniformlyOn (fun i a => ↑(F i) a) (↑f) p K
[PROOFSTEP]
rw [← tendstoLocallyUniformlyOn_iff_tendstoUniformlyOn_of_compact hK]
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K✝ : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
h : TendstoLocallyUniformly (fun i a => ↑(F i) a) (↑f) p
K : Set α
hK : IsCompact K
⊢ TendstoLocallyUniformlyOn (fun i a => ↑(F i) a) (↑f) p K
[PROOFSTEP]
exact h.tendstoLocallyUniformlyOn
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
hα : ∀ (x : α), ∃ n, IsCompact n ∧ n ∈ 𝓝 x
h : Tendsto F p (𝓝 f)
⊢ TendstoLocallyUniformly (fun i a => ↑(F i) a) (↑f) p
[PROOFSTEP]
rw [tendsto_iff_forall_compact_tendstoUniformlyOn] at h
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
hα : ∀ (x : α), ∃ n, IsCompact n ∧ n ∈ 𝓝 x
h : ∀ (K : Set α), IsCompact K → TendstoUniformlyOn (fun i a => ↑(F i) a) (↑f) p K
⊢ TendstoLocallyUniformly (fun i a => ↑(F i) a) (↑f) p
[PROOFSTEP]
intro V hV x
[GOAL]
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V✝ : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
hα : ∀ (x : α), ∃ n, IsCompact n ∧ n ∈ 𝓝 x
h : ∀ (K : Set α), IsCompact K → TendstoUniformlyOn (fun i a => ↑(F i) a) (↑f) p K
V : Set (β × β)
hV : V ∈ 𝓤 β
x : α
⊢ ∃ t, t ∈ 𝓝 x ∧ ∀ᶠ (n : ι) in p, ∀ (y : α), y ∈ t → (↑f y, (fun i a => ↑(F i) a) n y) ∈ V
[PROOFSTEP]
obtain ⟨n, hn₁, hn₂⟩ := hα x
[GOAL]
case intro.intro
α : Type u₁
β : Type u₂
inst✝¹ : TopologicalSpace α
inst✝ : UniformSpace β
K : Set α
V✝ : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
hα : ∀ (x : α), ∃ n, IsCompact n ∧ n ∈ 𝓝 x
h : ∀ (K : Set α), IsCompact K → TendstoUniformlyOn (fun i a => ↑(F i) a) (↑f) p K
V : Set (β × β)
hV : V ∈ 𝓤 β
x : α
n : Set α
hn₁ : IsCompact n
hn₂ : n ∈ 𝓝 x
⊢ ∃ t, t ∈ 𝓝 x ∧ ∀ᶠ (n : ι) in p, ∀ (y : α), y ∈ t → (↑f y, (fun i a => ↑(F i) a) n y) ∈ V
[PROOFSTEP]
exact ⟨n, hn₂, h n hn₁ V hV⟩
[GOAL]
α : Type u₁
β : Type u₂
inst✝² : TopologicalSpace α
inst✝¹ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
inst✝ : CompactSpace α
⊢ Tendsto F p (𝓝 f) ↔ TendstoUniformly (fun i a => ↑(F i) a) (↑f) p
[PROOFSTEP]
rw [tendsto_iff_forall_compact_tendstoUniformlyOn, ← tendstoUniformlyOn_univ]
[GOAL]
α : Type u₁
β : Type u₂
inst✝² : TopologicalSpace α
inst✝¹ : UniformSpace β
K : Set α
V : Set (β × β)
f : C(α, β)
ι : Type u₃
p : Filter ι
F : ι → C(α, β)
inst✝ : CompactSpace α
⊢ (∀ (K : Set α), IsCompact K → TendstoUniformlyOn (fun i a => ↑(F i) a) (↑f) p K) ↔
    TendstoUniformlyOn (fun i a => ↑(F i) a) (↑f) p univ
[PROOFSTEP]
exact ⟨fun h => h univ isCompact_univ, fun h K _hK => h.mono (subset_univ K)⟩


[GOAL]
ι : Type u_1
α : ι → Type u
U : (i : ι) → UniformSpace (α i)
β : Type u_2
inst✝ : UniformSpace β
f : β → (i : ι) → α i
⊢ UniformContinuous f ↔ ∀ (i : ι), UniformContinuous fun x => f x i
[PROOFSTEP]
simp only [UniformContinuous, Pi.uniformity, tendsto_iInf, tendsto_comap_iff, Function.comp]
[GOAL]
ι : Type u_1
α : ι → Type u
U : (i : ι) → UniformSpace (α i)
inst✝ : ∀ (i : ι), CompleteSpace (α i)
⊢ ∀ {f : Filter ((i : ι) → α i)}, Cauchy f → ∃ x, f ≤ 𝓝 x
[PROOFSTEP]
intro f hf
[GOAL]
ι : Type u_1
α : ι → Type u
U : (i : ι) → UniformSpace (α i)
inst✝ : ∀ (i : ι), CompleteSpace (α i)
f : Filter ((i : ι) → α i)
hf : Cauchy f
⊢ ∃ x, f ≤ 𝓝 x
[PROOFSTEP]
haveI := hf.1
[GOAL]
ι : Type u_1
α : ι → Type u
U : (i : ι) → UniformSpace (α i)
inst✝ : ∀ (i : ι), CompleteSpace (α i)
f : Filter ((i : ι) → α i)
hf : Cauchy f
this : NeBot f
⊢ ∃ x, f ≤ 𝓝 x
[PROOFSTEP]
have : ∀ i, ∃ x : α i, Filter.map (fun a : ∀ i, α i => a i) f ≤ 𝓝 x :=
  by
  intro i
  have key : Cauchy (map (fun a : ∀ i : ι, α i => a i) f) := hf.map (Pi.uniformContinuous_proj α i)
  exact cauchy_iff_exists_le_nhds.1 key
[GOAL]
ι : Type u_1
α : ι → Type u
U : (i : ι) → UniformSpace (α i)
inst✝ : ∀ (i : ι), CompleteSpace (α i)
f : Filter ((i : ι) → α i)
hf : Cauchy f
this : NeBot f
⊢ ∀ (i : ι), ∃ x, map (fun a => a i) f ≤ 𝓝 x
[PROOFSTEP]
intro i
[GOAL]
ι : Type u_1
α : ι → Type u
U : (i : ι) → UniformSpace (α i)
inst✝ : ∀ (i : ι), CompleteSpace (α i)
f : Filter ((i : ι) → α i)
hf : Cauchy f
this : NeBot f
i : ι
⊢ ∃ x, map (fun a => a i) f ≤ 𝓝 x
[PROOFSTEP]
have key : Cauchy (map (fun a : ∀ i : ι, α i => a i) f) := hf.map (Pi.uniformContinuous_proj α i)
[GOAL]
ι : Type u_1
α : ι → Type u
U : (i : ι) → UniformSpace (α i)
inst✝ : ∀ (i : ι), CompleteSpace (α i)
f : Filter ((i : ι) → α i)
hf : Cauchy f
this : NeBot f
i : ι
key : Cauchy (map (fun a => a i) f)
⊢ ∃ x, map (fun a => a i) f ≤ 𝓝 x
[PROOFSTEP]
exact cauchy_iff_exists_le_nhds.1 key
[GOAL]
ι : Type u_1
α : ι → Type u
U : (i : ι) → UniformSpace (α i)
inst✝ : ∀ (i : ι), CompleteSpace (α i)
f : Filter ((i : ι) → α i)
hf : Cauchy f
this✝ : NeBot f
this : ∀ (i : ι), ∃ x, map (fun a => a i) f ≤ 𝓝 x
⊢ ∃ x, f ≤ 𝓝 x
[PROOFSTEP]
choose x hx using this
[GOAL]
ι : Type u_1
α : ι → Type u
U : (i : ι) → UniformSpace (α i)
inst✝ : ∀ (i : ι), CompleteSpace (α i)
f : Filter ((i : ι) → α i)
hf : Cauchy f
this : NeBot f
x : (i : ι) → α i
hx : ∀ (i : ι), map (fun a => a i) f ≤ 𝓝 (x i)
⊢ ∃ x, f ≤ 𝓝 x
[PROOFSTEP]
use x
[GOAL]
case h
ι : Type u_1
α : ι → Type u
U : (i : ι) → UniformSpace (α i)
inst✝ : ∀ (i : ι), CompleteSpace (α i)
f : Filter ((i : ι) → α i)
hf : Cauchy f
this : NeBot f
x : (i : ι) → α i
hx : ∀ (i : ι), map (fun a => a i) f ≤ 𝓝 (x i)
⊢ f ≤ 𝓝 x
[PROOFSTEP]
rwa [nhds_pi, le_pi]
[GOAL]
ι : Type u_1
α : ι → Type u
U : (i : ι) → UniformSpace (α i)
inst✝ : ∀ (i : ι), SeparatedSpace (α i)
x y : (i : ι) → α i
H : ∀ (r : Set (((i : ι) → α i) × ((i : ι) → α i))), r ∈ 𝓤 ((i : ι) → α i) → (x, y) ∈ r
⊢ x = y
[PROOFSTEP]
ext i
[GOAL]
case h
ι : Type u_1
α : ι → Type u
U : (i : ι) → UniformSpace (α i)
inst✝ : ∀ (i : ι), SeparatedSpace (α i)
x y : (i : ι) → α i
H : ∀ (r : Set (((i : ι) → α i) × ((i : ι) → α i))), r ∈ 𝓤 ((i : ι) → α i) → (x, y) ∈ r
i : ι
⊢ x i = y i
[PROOFSTEP]
apply eq_of_separated_of_uniformContinuous (Pi.uniformContinuous_proj α i)
[GOAL]
case h
ι : Type u_1
α : ι → Type u
U : (i : ι) → UniformSpace (α i)
inst✝ : ∀ (i : ι), SeparatedSpace (α i)
x y : (i : ι) → α i
H : ∀ (r : Set (((i : ι) → α i) × ((i : ι) → α i))), r ∈ 𝓤 ((i : ι) → α i) → (x, y) ∈ r
i : ι
⊢ (fun i => x i) ≈ fun i => y i
[PROOFSTEP]
apply H