Theorem: UniformFun.uniformSpace_eq_iInf_precomp_of_cover
File: Mathlib/Topology/UniformSpace/UniformConvergenceTopology.lean

Proof steps:
state_before: α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝¹ : UniformSpace β
δ✝ : ι → Type u_5
inst✝ : (i : ι) → UniformSpace (δ✝ i)
δ : ι → Type u_6
φ : (i : ι) → δ i → α
h_cover : ∃ I, I.Finite ∧ ⋃ i ∈ I, range (φ i) = univ
⊢ uniformSpace α β = ⨅ i, UniformSpace.comap (⇑ofFun ∘ (fun x => x ∘ φ i) ∘ ⇑toFun) (uniformSpace (δ i) β)
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝¹ : UniformSpace β
δ✝ : ι → Type u_5
inst✝ : (i : ι) → UniformSpace (δ✝ i)
δ : ι → Type u_6
φ : (i : ι) → δ i → α
h_cover : ∃ I, I.Finite ∧ ⋃ i ∈ I, range (φ i) = univ
⊢ 𝓤 (α →ᵤ β) = 𝓤 (α →ᵤ β)
tactic: ext : 1
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝¹ : UniformSpace β
δ✝ : ι → Type u_5
inst✝ : (i : ι) → UniformSpace (δ✝ i)
δ : ι → Type u_6
φ : (i : ι) → δ i → α
h_cover : ∃ I, I.Finite ∧ ⋃ i ∈ I, range (φ i) = univ
⊢ 𝓤 (α →ᵤ β) = 𝓤 (α →ᵤ β)
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝¹ : UniformSpace β
δ✝ : ι → Type u_5
inst✝ : (i : ι) → UniformSpace (δ✝ i)
δ : ι → Type u_6
φ : (i : ι) → δ i → α
h_cover : ∃ I, I.Finite ∧ ⋃ i ∈ I, range (φ i) = univ
⊢ 𝓤 (α →ᵤ β) =
    ⨅ i, comap (Prod.map (⇑ofFun ∘ (fun x => x ∘ φ i) ∘ ⇑toFun) (⇑ofFun ∘ (fun x => x ∘ φ i) ∘ ⇑toFun)) (𝓤 (δ i →ᵤ β))
tactic: simp_rw [iInf_uniformity, uniformity_comap]
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝¹ : UniformSpace β
δ✝ : ι → Type u_5
inst✝ : (i : ι) → UniformSpace (δ✝ i)
δ : ι → Type u_6
φ : (i : ι) → δ i → α
h_cover : ∃ I, I.Finite ∧ ⋃ i ∈ I, range (φ i) = univ
⊢ 𝓤 (α →ᵤ β) =
    ⨅ i, comap (Prod.map (⇑ofFun ∘ (fun x => x ∘ φ i) ∘ ⇑toFun) (⇑ofFun ∘ (fun x => x ∘ φ i) ∘ ⇑toFun)) (𝓤 (δ i →ᵤ β))
state_after: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝¹ : UniformSpace β
δ✝ : ι → Type u_5
inst✝ : (i : ι) → UniformSpace (δ✝ i)
δ : ι → Type u_6
φ : (i : ι) → δ i → α
h_cover : ∃ I, I.Finite ∧ ⋃ i ∈ I, range (φ i) = univ
⊢ ⨅ i, comap (Prod.map (⇑ofFun ∘ (fun x => x ∘ φ i) ∘ ⇑toFun) (⇑ofFun ∘ (fun x => x ∘ φ i) ∘ ⇑toFun)) (𝓤 (δ i →ᵤ β)) ≤
    𝓤 (α →ᵤ β)
tactic: refine le_antisymm (le_iInf fun i ↦ tendsto_iff_comap.mp UniformFun.precomp_uniformContinuous) ?_
state_before: case h
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝¹ : UniformSpace β
δ✝ : ι → Type u_5
inst✝ : (i : ι) → UniformSpace (δ✝ i)
δ : ι → Type u_6
φ : (i : ι) → δ i → α
h_cover : ∃ I, I.Finite ∧ ⋃ i ∈ I, range (φ i) = univ
⊢ ⨅ i, comap (Prod.map (⇑ofFun ∘ (fun x => x ∘ φ i) ∘ ⇑toFun) (⇑ofFun ∘ (fun x => x ∘ φ i) ∘ ⇑toFun)) (𝓤 (δ i →ᵤ β)) ≤
    𝓤 (α →ᵤ β)
state_after: case h.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝¹ : UniformSpace β
δ✝ : ι → Type u_5
inst✝ : (i : ι) → UniformSpace (δ✝ i)
δ : ι → Type u_6
φ : (i : ι) → δ i → α
I : Set ι
I_finite : I.Finite
I_cover : ⋃ i ∈ I, range (φ i) = univ
⊢ ⨅ i, comap (Prod.map (⇑ofFun ∘ (fun x => x ∘ φ i) ∘ ⇑toFun) (⇑ofFun ∘ (fun x => x ∘ φ i) ∘ ⇑toFun)) (𝓤 (δ i →ᵤ β)) ≤
    𝓤 (α →ᵤ β)
tactic: rcases h_cover with ⟨I, I_finite, I_cover⟩
state_before: case h.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g : ι → α
inst✝¹ : UniformSpace β
δ✝ : ι → Type u_5
inst✝ : (i : ι) → UniformSpace (δ✝ i)
δ : ι → Type u_6
φ : (i : ι) → δ i → α
I : Set ι
I_finite : I.Finite
I_cover : ⋃ i ∈ I, range (φ i) = univ
⊢ ⨅ i, comap (Prod.map (⇑ofFun ∘ (fun x => x ∘ φ i) ∘ ⇑toFun) (⇑ofFun ∘ (fun x => x ∘ φ i) ∘ ⇑toFun)) (𝓤 (δ i →ᵤ β)) ≤
    𝓤 (α →ᵤ β)
state_after: case h.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x✝¹ : α
p : Filter ι
g✝ : ι → α
inst✝¹ : UniformSpace β
δ✝ : ι → Type u_5
inst✝ : (i : ι) → UniformSpace (δ✝ i)
δ : ι → Type u_6
φ : (i : ι) → δ i → α
I : Set ι
I_finite : I.Finite
I_cover : ⋃ i ∈ I, range (φ i) = univ
U : Set (β × β)
hU : U ∈ 𝓤 β
x✝ : (α →ᵤ β) × (α →ᵤ β)
x : α
f g : α →ᵤ β
hfg :
  (f, g) ∈
    ⋂ i,
      Prod.map (⇑ofFun ∘ (fun x => x ∘ φ ↑i) ∘ ⇑toFun) (⇑ofFun ∘ (fun x => x ∘ φ ↑i) ∘ ⇑toFun) ⁻¹'
        UniformFun.gen (δ ↑i) β (⟨I, fun x => U⟩.snd i)
⊢ (toFun (f, g).1 x, toFun (f, g).2 x) ∈ U
tactic: refine Filter.hasBasis_iInf (fun i : ι ↦ UniformFun.hasBasis_uniformity (δ i) β |>.comap _)
      |>.le_basis_iff (UniformFun.hasBasis_uniformity α β) |>.mpr fun U hU ↦
    ⟨⟨I, fun _ ↦ U⟩, ⟨I_finite, fun _ ↦ hU⟩, fun ⟨f, g⟩ hfg x ↦ ?_⟩
state_before: case h.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x✝¹ : α
p : Filter ι
g✝ : ι → α
inst✝¹ : UniformSpace β
δ✝ : ι → Type u_5
inst✝ : (i : ι) → UniformSpace (δ✝ i)
δ : ι → Type u_6
φ : (i : ι) → δ i → α
I : Set ι
I_finite : I.Finite
I_cover : ⋃ i ∈ I, range (φ i) = univ
U : Set (β × β)
hU : U ∈ 𝓤 β
x✝ : (α →ᵤ β) × (α →ᵤ β)
x : α
f g : α →ᵤ β
hfg :
  (f, g) ∈
    ⋂ i,
      Prod.map (⇑ofFun ∘ (fun x => x ∘ φ ↑i) ∘ ⇑toFun) (⇑ofFun ∘ (fun x => x ∘ φ ↑i) ∘ ⇑toFun) ⁻¹'
        UniformFun.gen (δ ↑i) β (⟨I, fun x => U⟩.snd i)
⊢ (toFun (f, g).1 x, toFun (f, g).2 x) ∈ U
state_after: case h.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g✝ : ι → α
inst✝¹ : UniformSpace β
δ✝ : ι → Type u_5
inst✝ : (i : ι) → UniformSpace (δ✝ i)
δ : ι → Type u_6
φ : (i : ι) → δ i → α
I : Set ι
I_finite : I.Finite
I_cover : ⋃ i ∈ I, range (φ i) = univ
U : Set (β × β)
hU : U ∈ 𝓤 β
x✝ : (α →ᵤ β) × (α →ᵤ β)
f g : α →ᵤ β
hfg :
  (f, g) ∈
    ⋂ i,
      Prod.map (⇑ofFun ∘ (fun x => x ∘ φ ↑i) ∘ ⇑toFun) (⇑ofFun ∘ (fun x => x ∘ φ ↑i) ∘ ⇑toFun) ⁻¹'
        UniformFun.gen (δ ↑i) β (⟨I, fun x => U⟩.snd i)
i : ι
hi : i ∈ I
y : δ i
⊢ (toFun (f, g).1 (φ i y), toFun (f, g).2 (φ i y)) ∈ U
tactic: rcases mem_iUnion₂.mp <| I_cover.ge <| mem_univ x with ⟨i, hi, y, rfl⟩
state_before: case h.intro.intro.intro.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
ι : Type u_4
s s' : Set α
x : α
p : Filter ι
g✝ : ι → α
inst✝¹ : UniformSpace β
δ✝ : ι → Type u_5
inst✝ : (i : ι) → UniformSpace (δ✝ i)
δ : ι → Type u_6
φ : (i : ι) → δ i → α
I : Set ι
I_finite : I.Finite
I_cover : ⋃ i ∈ I, range (φ i) = univ
U : Set (β × β)
hU : U ∈ 𝓤 β
x✝ : (α →ᵤ β) × (α →ᵤ β)
f g : α →ᵤ β
hfg :
  (f, g) ∈
    ⋂ i,
      Prod.map (⇑ofFun ∘ (fun x => x ∘ φ ↑i) ∘ ⇑toFun) (⇑ofFun ∘ (fun x => x ∘ φ ↑i) ∘ ⇑toFun) ⁻¹'
        UniformFun.gen (δ ↑i) β (⟨I, fun x => U⟩.snd i)
i : ι
hi : i ∈ I
y : δ i
⊢ (toFun (f, g).1 (φ i y), toFun (f, g).2 (φ i y)) ∈ U
state_after: no goals
tactic: exact mem_iInter.mp hfg ⟨i, hi⟩ y