Theorem: ContinuousMap.iInter_compactOpen_gen_subset_compactConvNhd
File: Mathlib/Topology/UniformSpace/CompactConvergence.lean

tactic: obtain ⟨W, hW₁, hW₄, hW₂, hW₃⟩ := comp_open_symm_mem_uniformity_sets hV
state_before: α : 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

tactic: obtain ⟨Z, hZ₁, hZ₄, hZ₂, hZ₃⟩ := comp_open_symm_mem_uniformity_sets hW₁
state_before: 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

tactic: let U : α → Set α := fun x => f ⁻¹' ball (f x) Z
state_before: 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

tactic: have hU : ∀ x, IsOpen (U x) := fun x => f.continuous.isOpen_preimage _ (isOpen_ball _ hZ₄)
state_before: 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

tactic: 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₁]⟩
state_before: 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

tactic: obtain ⟨t, ht⟩ := hK.elim_finite_subcover _ (fun x : K => hU x.val) hUK
state_before: 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

tactic: let C : t → Set α := fun i => K ∩ closure (U ((i : K) : α))
state_before: 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

tactic: 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])
state_before: 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

tactic: 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
state_before: 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

tactic: 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 _)⟩
state_before: 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

tactic: simp only [mem_iInter, CompactOpen.gen, mem_setOf_eq, image_subset_iff] at hg
state_before: 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

tactic: obtain ⟨y, hy⟩ := mem_iUnion.mp (hC hx)
state_before: 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

tactic: exact ⟨f y, (mem_ball_symmetry hW₂).mp (hfC y hy), mem_preimage.mp (hg y hy)⟩
state_before: 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

tactic: intro x hx
state_before: α : 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

tactic: simp only [exists_prop, mem_iUnion, iUnion_coe_set, mem_preimage]
state_before: α : 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

tactic: exact ⟨(⟨x, hx⟩ : K), by simp [hx, mem_ball_self (f x) hZ₁]⟩
state_before: α : 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

tactic: simp [hx, mem_ball_self (f x) hZ₁]
state_before: α : 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

tactic: rw [← K.inter_iUnion, subset_inter_iff]
state_before: α : 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

tactic: refine' ⟨Subset.rfl, ht.trans _⟩
state_before: α : 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)

tactic: simp only [SetCoe.forall, Subtype.coe_mk, iUnion_subset_iff]
state_before: α : 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)

tactic: exact fun x hx₁ hx₂ => subset_iUnion_of_subset (⟨_, hx₂⟩ : t) (by simp [subset_closure])
state_before: α : 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)

tactic: simp [subset_closure]
state_before: α : 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)

tactic: simp only [← image_subset_iff, ← mem_preimage]
state_before: α : 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

tactic: rintro ⟨⟨x, hx₁⟩, hx₂⟩
state_before: α : 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

tactic: 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₁))
state_before: 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

tactic: 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
state_before: 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

tactic: intro y hy
state_before: α : 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

tactic: obtain ⟨z, hz₁, hz₂⟩ := UniformSpace.mem_closure_iff_ball.mp hy hZ₁
state_before: α : 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

tactic: exact ball_mono hZ₃ _ (mem_ball_comp hz₂ ((mem_ball_symmetry hZ₂).mp hz₁))
state_before: 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

tactic: apply closure_mono
state_before: α : 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)

tactic: simp only [image_subset_iff]
state_before: 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

tactic: rfl
state_before: 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

tactic: simp [CompactOpen.gen, hfC]
state_before: α : 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)