topology.metric_space.metrizableMathlib.Topology.Metrizable.Urysohn

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -219,7 +219,7 @@ theorem exists_inducing_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
         eq_on f 0 UV.1.1 ∧ eq_on f (fun _ => ε UV) (UV.1.2ᶜ) ∧ ∀ x, f x ∈ Icc 0 (ε UV) :=
     by
     intro UV
-    rcases exists_continuous_zero_one_of_closed isClosed_closure
+    rcases exists_continuous_zero_one_of_isClosed isClosed_closure
         (hB.is_open UV.2.1.2).isClosed_compl (hd UV) with
       ⟨f, hf₀, hf₁, hf01⟩
     exact
Diff
@@ -82,7 +82,7 @@ theorem Inducing.pseudoMetrizableSpace [PseudoMetrizableSpace Y] {f : X → Y} (
 #print TopologicalSpace.PseudoMetrizableSpace.firstCountableTopology /-
 /-- Every pseudo-metrizable space is first countable. -/
 instance (priority := 100) PseudoMetrizableSpace.firstCountableTopology
-    [h : PseudoMetrizableSpace X] : TopologicalSpace.FirstCountableTopology X :=
+    [h : PseudoMetrizableSpace X] : FirstCountableTopology X :=
   by
   rcases h with ⟨_, hm⟩; rw [← hm]
   exact
Diff
@@ -179,10 +179,10 @@ instance metrizableSpace_pi [∀ i, MetrizableSpace (π i)] : MetrizableSpace (
 variable (X) [T3Space X] [SecondCountableTopology X]
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
-#print TopologicalSpace.exists_embedding_l_infty /-
+#print TopologicalSpace.exists_inducing_l_infty /-
 /-- A T₃ topological space with second countable topology can be embedded into `l^∞ = ℕ →ᵇ ℝ`.
 -/
-theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
+theorem exists_inducing_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
   by
   haveI : NormalSpace X := NormalSpace.of_regularSpace_secondCountableTopology X
   -- Choose a countable basis, and consider the set `s` of pairs of set `(U, V)` such that `U ∈ B`,
@@ -275,7 +275,7 @@ theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
     refine' this.mono fun y hy => (BoundedContinuousFunction.dist_le δ0.le).2 fun UV => _
     cases' le_total δ (ε UV) with hle hle
     exacts [hy _ hle, (Real.dist_le_of_mem_Icc (hf0ε _ _) (hf0ε _ _)).trans (by rwa [sub_zero])]
-#align topological_space.exists_embedding_l_infty TopologicalSpace.exists_embedding_l_infty
+#align topological_space.exists_embedding_l_infty TopologicalSpace.exists_inducing_l_infty
 -/
 
 #print TopologicalSpace.metrizableSpace_of_t3_second_countable /-
@@ -283,7 +283,7 @@ theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
 countable topology `X` is metrizable, i.e., there exists a metric space structure that generates the
 same topology. -/
 theorem metrizableSpace_of_t3_second_countable : MetrizableSpace X :=
-  let ⟨f, hf⟩ := exists_embedding_l_infty X
+  let ⟨f, hf⟩ := exists_inducing_l_infty X
   hf.MetrizableSpace
 #align topological_space.metrizable_space_of_t3_second_countable TopologicalSpace.metrizableSpace_of_t3_second_countable
 -/
Diff
@@ -3,10 +3,10 @@ Copyright (c) 2021 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov
 -/
-import Mathbin.Analysis.SpecificLimits.Basic
-import Mathbin.Topology.UrysohnsLemma
-import Mathbin.Topology.ContinuousFunction.Bounded
-import Mathbin.Topology.UniformSpace.Cauchy
+import Analysis.SpecificLimits.Basic
+import Topology.UrysohnsLemma
+import Topology.ContinuousFunction.Bounded
+import Topology.UniformSpace.Cauchy
 
 #align_import topology.metric_space.metrizable from "leanprover-community/mathlib"@"38df578a6450a8c5142b3727e3ae894c2300cae0"
 
Diff
@@ -184,7 +184,7 @@ variable (X) [T3Space X] [SecondCountableTopology X]
 -/
 theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
   by
-  haveI : NormalSpace X := normalSpaceOfT3SecondCountable X
+  haveI : NormalSpace X := NormalSpace.of_regularSpace_secondCountableTopology X
   -- Choose a countable basis, and consider the set `s` of pairs of set `(U, V)` such that `U ∈ B`,
   -- `V ∈ B`, and `closure U ⊆ V`.
   rcases exists_countable_basis X with ⟨B, hBc, -, hB⟩
Diff
@@ -2,17 +2,14 @@
 Copyright (c) 2021 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module topology.metric_space.metrizable
-! leanprover-community/mathlib commit 38df578a6450a8c5142b3727e3ae894c2300cae0
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.Analysis.SpecificLimits.Basic
 import Mathbin.Topology.UrysohnsLemma
 import Mathbin.Topology.ContinuousFunction.Bounded
 import Mathbin.Topology.UniformSpace.Cauchy
 
+#align_import topology.metric_space.metrizable from "leanprover-community/mathlib"@"38df578a6450a8c5142b3727e3ae894c2300cae0"
+
 /-!
 # Metrizability of a T₃ topological space with second countable topology
 
Diff
@@ -62,6 +62,7 @@ noncomputable def pseudoMetrizableSpacePseudoMetric (X : Type _) [TopologicalSpa
 #align topological_space.pseudo_metrizable_space_pseudo_metric TopologicalSpace.pseudoMetrizableSpacePseudoMetric
 -/
 
+#print TopologicalSpace.pseudoMetrizableSpace_prod /-
 instance pseudoMetrizableSpace_prod [PseudoMetrizableSpace X] [PseudoMetrizableSpace Y] :
     PseudoMetrizableSpace (X × Y) :=
   by
@@ -69,6 +70,7 @@ instance pseudoMetrizableSpace_prod [PseudoMetrizableSpace X] [PseudoMetrizableS
   letI : PseudoMetricSpace Y := pseudo_metrizable_space_pseudo_metric Y
   infer_instance
 #align topological_space.pseudo_metrizable_space_prod TopologicalSpace.pseudoMetrizableSpace_prod
+-/
 
 #print Inducing.pseudoMetrizableSpace /-
 /-- Given an inducing map of a topological space into a pseudo metrizable space, the source space
@@ -146,12 +148,14 @@ instance (priority := 100) t2Space_of_metrizableSpace [MetrizableSpace X] : T2Sp
 #align topological_space.t2_space_of_metrizable_space TopologicalSpace.t2Space_of_metrizableSpace
 -/
 
+#print TopologicalSpace.metrizableSpace_prod /-
 instance metrizableSpace_prod [MetrizableSpace X] [MetrizableSpace Y] : MetrizableSpace (X × Y) :=
   by
   letI : MetricSpace X := metrizable_space_metric X
   letI : MetricSpace Y := metrizable_space_metric Y
   infer_instance
 #align topological_space.metrizable_space_prod TopologicalSpace.metrizableSpace_prod
+-/
 
 #print Embedding.metrizableSpace /-
 /-- Given an embedding of a topological space into a metrizable space, the source space is also
@@ -178,6 +182,7 @@ instance metrizableSpace_pi [∀ i, MetrizableSpace (π i)] : MetrizableSpace (
 variable (X) [T3Space X] [SecondCountableTopology X]
 
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
+#print TopologicalSpace.exists_embedding_l_infty /-
 /-- A T₃ topological space with second countable topology can be embedded into `l^∞ = ℕ →ᵇ ℝ`.
 -/
 theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
@@ -274,6 +279,7 @@ theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
     cases' le_total δ (ε UV) with hle hle
     exacts [hy _ hle, (Real.dist_le_of_mem_Icc (hf0ε _ _) (hf0ε _ _)).trans (by rwa [sub_zero])]
 #align topological_space.exists_embedding_l_infty TopologicalSpace.exists_embedding_l_infty
+-/
 
 #print TopologicalSpace.metrizableSpace_of_t3_second_countable /-
 /-- *Urysohn's metrization theorem* (Tychonoff's version): a T₃ topological space with second
Diff
@@ -245,7 +245,6 @@ theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
       (0 : ℝ) = F x UV := (hf0 UV hxU).symm
       _ = F y UV := by rw [hxy]
       _ = ε UV := hfε UV fun h : y ∈ V => hVy h rfl
-      
   · /- Now we prove that each neighborhood `V` of `x : X` include a preimage of a neighborhood of
         `F x` under `F`. Without loss of generality, `V` belongs to `B`. Choose `U ∈ B` such that
         `x ∈ V` and `closure V ⊆ U`. Then the preimage of the `(ε (U, V))`-neighborhood of `F x`
Diff
@@ -186,7 +186,7 @@ theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
   -- Choose a countable basis, and consider the set `s` of pairs of set `(U, V)` such that `U ∈ B`,
   -- `V ∈ B`, and `closure U ⊆ V`.
   rcases exists_countable_basis X with ⟨B, hBc, -, hB⟩
-  set s : Set (Set X × Set X) := { UV ∈ B ×ˢ B | closure UV.1 ⊆ UV.2 }
+  set s : Set (Set X × Set X) := {UV ∈ B ×ˢ B | closure UV.1 ⊆ UV.2}
   -- `s` is a countable set.
   haveI : Encodable s := ((hBc.prod hBc).mono (inter_subset_left _ _)).toEncodable
   -- We don't have the space of bounded (possibly discontinuous) functions, so we equip `s`
@@ -266,7 +266,7 @@ theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
         `(U, V) ∈ T`. For `(U, V) ∉ T`, the same inequality is true because both `F y (U, V)` and
         `F x (U, V)` belong to the interval `[0, ε (U, V)]`. -/
     refine' (nhds_basis_closed_ball.comap _).ge_iff.2 fun δ δ0 => _
-    have h_fin : { UV : s | δ ≤ ε UV }.Finite := by simpa only [← not_lt] using hε (gt_mem_nhds δ0)
+    have h_fin : {UV : s | δ ≤ ε UV}.Finite := by simpa only [← not_lt] using hε (gt_mem_nhds δ0)
     have : ∀ᶠ y in 𝓝 x, ∀ UV, δ ≤ ε UV → dist (F y UV) (F x UV) ≤ δ :=
       by
       refine' (eventually_all_finite h_fin).2 fun UV hUV => _
Diff
@@ -273,7 +273,7 @@ theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
       exact (f UV).Continuous.Tendsto x (closed_ball_mem_nhds _ δ0)
     refine' this.mono fun y hy => (BoundedContinuousFunction.dist_le δ0.le).2 fun UV => _
     cases' le_total δ (ε UV) with hle hle
-    exacts[hy _ hle, (Real.dist_le_of_mem_Icc (hf0ε _ _) (hf0ε _ _)).trans (by rwa [sub_zero])]
+    exacts [hy _ hle, (Real.dist_le_of_mem_Icc (hf0ε _ _) (hf0ε _ _)).trans (by rwa [sub_zero])]
 #align topological_space.exists_embedding_l_infty TopologicalSpace.exists_embedding_l_infty
 
 #print TopologicalSpace.metrizableSpace_of_t3_second_countable /-
Diff
@@ -31,7 +31,7 @@ space structure.
 
 open Set Filter Metric
 
-open BoundedContinuousFunction Filter Topology
+open scoped BoundedContinuousFunction Filter Topology
 
 namespace TopologicalSpace
 
Diff
@@ -62,12 +62,6 @@ noncomputable def pseudoMetrizableSpacePseudoMetric (X : Type _) [TopologicalSpa
 #align topological_space.pseudo_metrizable_space_pseudo_metric TopologicalSpace.pseudoMetrizableSpacePseudoMetric
 -/
 
-/- warning: topological_space.pseudo_metrizable_space_prod -> TopologicalSpace.pseudoMetrizableSpace_prod is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_5 : TopologicalSpace.PseudoMetrizableSpace.{u1} X _inst_1] [_inst_6 : TopologicalSpace.PseudoMetrizableSpace.{u2} Y _inst_2], TopologicalSpace.PseudoMetrizableSpace.{max u1 u2} (Prod.{u1, u2} X Y) (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2)
-but is expected to have type
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_5 : TopologicalSpace.PseudoMetrizableSpace.{u1} X _inst_1] [_inst_6 : TopologicalSpace.PseudoMetrizableSpace.{u2} Y _inst_2], TopologicalSpace.PseudoMetrizableSpace.{max u2 u1} (Prod.{u1, u2} X Y) (instTopologicalSpaceProd.{u1, u2} X Y _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align topological_space.pseudo_metrizable_space_prod TopologicalSpace.pseudoMetrizableSpace_prodₓ'. -/
 instance pseudoMetrizableSpace_prod [PseudoMetrizableSpace X] [PseudoMetrizableSpace Y] :
     PseudoMetrizableSpace (X × Y) :=
   by
@@ -152,12 +146,6 @@ instance (priority := 100) t2Space_of_metrizableSpace [MetrizableSpace X] : T2Sp
 #align topological_space.t2_space_of_metrizable_space TopologicalSpace.t2Space_of_metrizableSpace
 -/
 
-/- warning: topological_space.metrizable_space_prod -> TopologicalSpace.metrizableSpace_prod is a dubious translation:
-lean 3 declaration is
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_5 : TopologicalSpace.MetrizableSpace.{u1} X _inst_1] [_inst_6 : TopologicalSpace.MetrizableSpace.{u2} Y _inst_2], TopologicalSpace.MetrizableSpace.{max u1 u2} (Prod.{u1, u2} X Y) (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2)
-but is expected to have type
-  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_5 : TopologicalSpace.MetrizableSpace.{u1} X _inst_1] [_inst_6 : TopologicalSpace.MetrizableSpace.{u2} Y _inst_2], TopologicalSpace.MetrizableSpace.{max u2 u1} (Prod.{u1, u2} X Y) (instTopologicalSpaceProd.{u1, u2} X Y _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align topological_space.metrizable_space_prod TopologicalSpace.metrizableSpace_prodₓ'. -/
 instance metrizableSpace_prod [MetrizableSpace X] [MetrizableSpace Y] : MetrizableSpace (X × Y) :=
   by
   letI : MetricSpace X := metrizable_space_metric X
@@ -189,12 +177,6 @@ instance metrizableSpace_pi [∀ i, MetrizableSpace (π i)] : MetrizableSpace (
 
 variable (X) [T3Space X] [SecondCountableTopology X]
 
-/- warning: topological_space.exists_embedding_l_infty -> TopologicalSpace.exists_embedding_l_infty is a dubious translation:
-lean 3 declaration is
-  forall (X : Type.{u1}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_5 : T3Space.{u1} X _inst_1] [_inst_6 : TopologicalSpace.SecondCountableTopology.{u1} X _inst_1], Exists.{succ u1} (X -> (BoundedContinuousFunction.{0, 0} Nat Real Nat.topologicalSpace Real.pseudoMetricSpace)) (fun (f : X -> (BoundedContinuousFunction.{0, 0} Nat Real Nat.topologicalSpace Real.pseudoMetricSpace)) => Embedding.{u1, 0} X (BoundedContinuousFunction.{0, 0} Nat Real Nat.topologicalSpace Real.pseudoMetricSpace) _inst_1 (UniformSpace.toTopologicalSpace.{0} (BoundedContinuousFunction.{0, 0} Nat Real Nat.topologicalSpace Real.pseudoMetricSpace) (PseudoMetricSpace.toUniformSpace.{0} (BoundedContinuousFunction.{0, 0} Nat Real Nat.topologicalSpace Real.pseudoMetricSpace) (BoundedContinuousFunction.pseudoMetricSpace.{0, 0} Nat Real Nat.topologicalSpace Real.pseudoMetricSpace))) f)
-but is expected to have type
-  forall (X : Type.{u1}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_5 : T3Space.{u1} X _inst_1] [_inst_6 : TopologicalSpace.SecondCountableTopology.{u1} X _inst_1], Exists.{succ u1} (X -> (BoundedContinuousFunction.{0, 0} Nat Real instTopologicalSpaceNat Real.pseudoMetricSpace)) (fun (f : X -> (BoundedContinuousFunction.{0, 0} Nat Real instTopologicalSpaceNat Real.pseudoMetricSpace)) => Embedding.{u1, 0} X (BoundedContinuousFunction.{0, 0} Nat Real instTopologicalSpaceNat Real.pseudoMetricSpace) _inst_1 (UniformSpace.toTopologicalSpace.{0} (BoundedContinuousFunction.{0, 0} Nat Real instTopologicalSpaceNat Real.pseudoMetricSpace) (PseudoMetricSpace.toUniformSpace.{0} (BoundedContinuousFunction.{0, 0} Nat Real instTopologicalSpaceNat Real.pseudoMetricSpace) (BoundedContinuousFunction.instPseudoMetricSpaceBoundedContinuousFunction.{0, 0} Nat Real instTopologicalSpaceNat Real.pseudoMetricSpace))) f)
-Case conversion may be inaccurate. Consider using '#align topological_space.exists_embedding_l_infty TopologicalSpace.exists_embedding_l_inftyₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 /-- A T₃ topological space with second countable topology can be embedded into `l^∞ = ℕ →ᵇ ℝ`.
 -/
Diff
@@ -91,8 +91,7 @@ theorem Inducing.pseudoMetrizableSpace [PseudoMetrizableSpace Y] {f : X → Y} (
 instance (priority := 100) PseudoMetrizableSpace.firstCountableTopology
     [h : PseudoMetrizableSpace X] : TopologicalSpace.FirstCountableTopology X :=
   by
-  rcases h with ⟨_, hm⟩
-  rw [← hm]
+  rcases h with ⟨_, hm⟩; rw [← hm]
   exact
     @UniformSpace.firstCountableTopology X PseudoMetricSpace.toUniformSpace
       Emetric.Uniformity.Filter.isCountablyGenerated
@@ -110,8 +109,7 @@ instance PseudoMetrizableSpace.subtype [PseudoMetrizableSpace X] (s : Set X) :
 instance pseudoMetrizableSpace_pi [∀ i, PseudoMetrizableSpace (π i)] :
     PseudoMetrizableSpace (∀ i, π i) :=
   by
-  cases nonempty_fintype ι
-  letI := fun i => pseudo_metrizable_space_pseudo_metric (π i)
+  cases nonempty_fintype ι; letI := fun i => pseudo_metrizable_space_pseudo_metric (π i)
   infer_instance
 #align topological_space.pseudo_metrizable_space_pi TopologicalSpace.pseudoMetrizableSpace_pi
 -/
@@ -149,10 +147,8 @@ noncomputable def metrizableSpaceMetric (X : Type _) [TopologicalSpace X] [h : M
 -/
 
 #print TopologicalSpace.t2Space_of_metrizableSpace /-
-instance (priority := 100) t2Space_of_metrizableSpace [MetrizableSpace X] : T2Space X :=
-  by
-  letI : MetricSpace X := metrizable_space_metric X
-  infer_instance
+instance (priority := 100) t2Space_of_metrizableSpace [MetrizableSpace X] : T2Space X := by
+  letI : MetricSpace X := metrizable_space_metric X; infer_instance
 #align topological_space.t2_space_of_metrizable_space TopologicalSpace.t2Space_of_metrizableSpace
 -/
 
@@ -186,11 +182,8 @@ instance MetrizableSpace.subtype [MetrizableSpace X] (s : Set X) : MetrizableSpa
 -/
 
 #print TopologicalSpace.metrizableSpace_pi /-
-instance metrizableSpace_pi [∀ i, MetrizableSpace (π i)] : MetrizableSpace (∀ i, π i) :=
-  by
-  cases nonempty_fintype ι
-  letI := fun i => metrizable_space_metric (π i)
-  infer_instance
+instance metrizableSpace_pi [∀ i, MetrizableSpace (π i)] : MetrizableSpace (∀ i, π i) := by
+  cases nonempty_fintype ι; letI := fun i => metrizable_space_metric (π i); infer_instance
 #align topological_space.metrizable_space_pi TopologicalSpace.metrizableSpace_pi
 -/
 
@@ -216,7 +209,7 @@ theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
   haveI : Encodable s := ((hBc.prod hBc).mono (inter_subset_left _ _)).toEncodable
   -- We don't have the space of bounded (possibly discontinuous) functions, so we equip `s`
   -- with the discrete topology and deal with `s →ᵇ ℝ` instead.
-  letI : TopologicalSpace s := ⊥
+  letI : TopologicalSpace s := ⊥;
   haveI : DiscreteTopology s := ⟨rfl⟩
   rsuffices ⟨f, hf⟩ : ∃ f : X → s →ᵇ ℝ, Embedding f
   ·
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov
 
 ! This file was ported from Lean 3 source module topology.metric_space.metrizable
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit 38df578a6450a8c5142b3727e3ae894c2300cae0
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -16,6 +16,9 @@ import Mathbin.Topology.UniformSpace.Cauchy
 /-!
 # Metrizability of a T₃ topological space with second countable topology
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 In this file we define metrizable topological spaces, i.e., topological spaces for which there
 exists a metric space structure that generates the same topology.
 
Diff
@@ -35,24 +35,36 @@ namespace TopologicalSpace
 variable {ι X Y : Type _} {π : ι → Type _} [TopologicalSpace X] [TopologicalSpace Y] [Finite ι]
   [∀ i, TopologicalSpace (π i)]
 
+#print TopologicalSpace.PseudoMetrizableSpace /-
 /-- A topological space is *pseudo metrizable* if there exists a pseudo metric space structure
 compatible with the topology. To endow such a space with a compatible distance, use
 `letI : pseudo_metric_space X := topological_space.pseudo_metrizable_space_pseudo_metric X`. -/
 class PseudoMetrizableSpace (X : Type _) [t : TopologicalSpace X] : Prop where
   exists_pseudo_metric : ∃ m : PseudoMetricSpace X, m.toUniformSpace.toTopologicalSpace = t
 #align topological_space.pseudo_metrizable_space TopologicalSpace.PseudoMetrizableSpace
+-/
 
-instance (priority := 100) PseudoMetricSpace.to_pseudoMetrizableSpace {X : Type _}
+#print PseudoMetricSpace.toPseudoMetrizableSpace /-
+instance (priority := 100) PseudoMetricSpace.toPseudoMetrizableSpace {X : Type _}
     [m : PseudoMetricSpace X] : PseudoMetrizableSpace X :=
   ⟨⟨m, rfl⟩⟩
-#align pseudo_metric_space.to_pseudo_metrizable_space PseudoMetricSpace.to_pseudoMetrizableSpace
+#align pseudo_metric_space.to_pseudo_metrizable_space PseudoMetricSpace.toPseudoMetrizableSpace
+-/
 
+#print TopologicalSpace.pseudoMetrizableSpacePseudoMetric /-
 /-- Construct on a metrizable space a metric compatible with the topology. -/
 noncomputable def pseudoMetrizableSpacePseudoMetric (X : Type _) [TopologicalSpace X]
     [h : PseudoMetrizableSpace X] : PseudoMetricSpace X :=
   h.exists_pseudo_metric.some.replaceTopology h.exists_pseudo_metric.choose_spec.symm
 #align topological_space.pseudo_metrizable_space_pseudo_metric TopologicalSpace.pseudoMetrizableSpacePseudoMetric
+-/
 
+/- warning: topological_space.pseudo_metrizable_space_prod -> TopologicalSpace.pseudoMetrizableSpace_prod is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_5 : TopologicalSpace.PseudoMetrizableSpace.{u1} X _inst_1] [_inst_6 : TopologicalSpace.PseudoMetrizableSpace.{u2} Y _inst_2], TopologicalSpace.PseudoMetrizableSpace.{max u1 u2} (Prod.{u1, u2} X Y) (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2)
+but is expected to have type
+  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_5 : TopologicalSpace.PseudoMetrizableSpace.{u1} X _inst_1] [_inst_6 : TopologicalSpace.PseudoMetrizableSpace.{u2} Y _inst_2], TopologicalSpace.PseudoMetrizableSpace.{max u2 u1} (Prod.{u1, u2} X Y) (instTopologicalSpaceProd.{u1, u2} X Y _inst_1 _inst_2)
+Case conversion may be inaccurate. Consider using '#align topological_space.pseudo_metrizable_space_prod TopologicalSpace.pseudoMetrizableSpace_prodₓ'. -/
 instance pseudoMetrizableSpace_prod [PseudoMetrizableSpace X] [PseudoMetrizableSpace Y] :
     PseudoMetrizableSpace (X × Y) :=
   by
@@ -61,6 +73,7 @@ instance pseudoMetrizableSpace_prod [PseudoMetrizableSpace X] [PseudoMetrizableS
   infer_instance
 #align topological_space.pseudo_metrizable_space_prod TopologicalSpace.pseudoMetrizableSpace_prod
 
+#print Inducing.pseudoMetrizableSpace /-
 /-- Given an inducing map of a topological space into a pseudo metrizable space, the source space
 is also pseudo metrizable. -/
 theorem Inducing.pseudoMetrizableSpace [PseudoMetrizableSpace Y] {f : X → Y} (hf : Inducing f) :
@@ -68,7 +81,9 @@ theorem Inducing.pseudoMetrizableSpace [PseudoMetrizableSpace Y] {f : X → Y} (
   letI : PseudoMetricSpace Y := pseudo_metrizable_space_pseudo_metric Y
   ⟨⟨hf.comap_pseudo_metric_space, rfl⟩⟩
 #align inducing.pseudo_metrizable_space Inducing.pseudoMetrizableSpace
+-/
 
+#print TopologicalSpace.PseudoMetrizableSpace.firstCountableTopology /-
 /-- Every pseudo-metrizable space is first countable. -/
 instance (priority := 100) PseudoMetrizableSpace.firstCountableTopology
     [h : PseudoMetrizableSpace X] : TopologicalSpace.FirstCountableTopology X :=
@@ -79,12 +94,16 @@ instance (priority := 100) PseudoMetrizableSpace.firstCountableTopology
     @UniformSpace.firstCountableTopology X PseudoMetricSpace.toUniformSpace
       Emetric.Uniformity.Filter.isCountablyGenerated
 #align topological_space.pseudo_metrizable_space.first_countable_topology TopologicalSpace.PseudoMetrizableSpace.firstCountableTopology
+-/
 
+#print TopologicalSpace.PseudoMetrizableSpace.subtype /-
 instance PseudoMetrizableSpace.subtype [PseudoMetrizableSpace X] (s : Set X) :
     PseudoMetrizableSpace s :=
   inducing_subtype_val.PseudoMetrizableSpace
 #align topological_space.pseudo_metrizable_space.subtype TopologicalSpace.PseudoMetrizableSpace.subtype
+-/
 
+#print TopologicalSpace.pseudoMetrizableSpace_pi /-
 instance pseudoMetrizableSpace_pi [∀ i, PseudoMetrizableSpace (π i)] :
     PseudoMetrizableSpace (∀ i, π i) :=
   by
@@ -92,37 +111,54 @@ instance pseudoMetrizableSpace_pi [∀ i, PseudoMetrizableSpace (π i)] :
   letI := fun i => pseudo_metrizable_space_pseudo_metric (π i)
   infer_instance
 #align topological_space.pseudo_metrizable_space_pi TopologicalSpace.pseudoMetrizableSpace_pi
+-/
 
+#print TopologicalSpace.MetrizableSpace /-
 /-- A topological space is metrizable if there exists a metric space structure compatible with the
 topology. To endow such a space with a compatible distance, use
 `letI : metric_space X := topological_space.metrizable_space_metric X` -/
 class MetrizableSpace (X : Type _) [t : TopologicalSpace X] : Prop where
   exists_metric : ∃ m : MetricSpace X, m.toUniformSpace.toTopologicalSpace = t
 #align topological_space.metrizable_space TopologicalSpace.MetrizableSpace
+-/
 
-instance (priority := 100) MetricSpace.to_metrizableSpace {X : Type _} [m : MetricSpace X] :
+#print MetricSpace.toMetrizableSpace /-
+instance (priority := 100) MetricSpace.toMetrizableSpace {X : Type _} [m : MetricSpace X] :
     MetrizableSpace X :=
   ⟨⟨m, rfl⟩⟩
-#align metric_space.to_metrizable_space MetricSpace.to_metrizableSpace
+#align metric_space.to_metrizable_space MetricSpace.toMetrizableSpace
+-/
 
-instance (priority := 100) MetrizableSpace.to_pseudoMetrizableSpace [h : MetrizableSpace X] :
+#print TopologicalSpace.MetrizableSpace.toPseudoMetrizableSpace /-
+instance (priority := 100) MetrizableSpace.toPseudoMetrizableSpace [h : MetrizableSpace X] :
     PseudoMetrizableSpace X :=
   ⟨let ⟨m, hm⟩ := h.1
     ⟨m.toPseudoMetricSpace, hm⟩⟩
-#align topological_space.metrizable_space.to_pseudo_metrizable_space TopologicalSpace.MetrizableSpace.to_pseudoMetrizableSpace
+#align topological_space.metrizable_space.to_pseudo_metrizable_space TopologicalSpace.MetrizableSpace.toPseudoMetrizableSpace
+-/
 
+#print TopologicalSpace.metrizableSpaceMetric /-
 /-- Construct on a metrizable space a metric compatible with the topology. -/
 noncomputable def metrizableSpaceMetric (X : Type _) [TopologicalSpace X] [h : MetrizableSpace X] :
     MetricSpace X :=
   h.exists_metric.some.replaceTopology h.exists_metric.choose_spec.symm
 #align topological_space.metrizable_space_metric TopologicalSpace.metrizableSpaceMetric
+-/
 
+#print TopologicalSpace.t2Space_of_metrizableSpace /-
 instance (priority := 100) t2Space_of_metrizableSpace [MetrizableSpace X] : T2Space X :=
   by
   letI : MetricSpace X := metrizable_space_metric X
   infer_instance
 #align topological_space.t2_space_of_metrizable_space TopologicalSpace.t2Space_of_metrizableSpace
+-/
 
+/- warning: topological_space.metrizable_space_prod -> TopologicalSpace.metrizableSpace_prod is a dubious translation:
+lean 3 declaration is
+  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_5 : TopologicalSpace.MetrizableSpace.{u1} X _inst_1] [_inst_6 : TopologicalSpace.MetrizableSpace.{u2} Y _inst_2], TopologicalSpace.MetrizableSpace.{max u1 u2} (Prod.{u1, u2} X Y) (Prod.topologicalSpace.{u1, u2} X Y _inst_1 _inst_2)
+but is expected to have type
+  forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} X] [_inst_2 : TopologicalSpace.{u2} Y] [_inst_5 : TopologicalSpace.MetrizableSpace.{u1} X _inst_1] [_inst_6 : TopologicalSpace.MetrizableSpace.{u2} Y _inst_2], TopologicalSpace.MetrizableSpace.{max u2 u1} (Prod.{u1, u2} X Y) (instTopologicalSpaceProd.{u1, u2} X Y _inst_1 _inst_2)
+Case conversion may be inaccurate. Consider using '#align topological_space.metrizable_space_prod TopologicalSpace.metrizableSpace_prodₓ'. -/
 instance metrizableSpace_prod [MetrizableSpace X] [MetrizableSpace Y] : MetrizableSpace (X × Y) :=
   by
   letI : MetricSpace X := metrizable_space_metric X
@@ -130,6 +166,7 @@ instance metrizableSpace_prod [MetrizableSpace X] [MetrizableSpace Y] : Metrizab
   infer_instance
 #align topological_space.metrizable_space_prod TopologicalSpace.metrizableSpace_prod
 
+#print Embedding.metrizableSpace /-
 /-- Given an embedding of a topological space into a metrizable space, the source space is also
 metrizable. -/
 theorem Embedding.metrizableSpace [MetrizableSpace Y] {f : X → Y} (hf : Embedding f) :
@@ -137,20 +174,31 @@ theorem Embedding.metrizableSpace [MetrizableSpace Y] {f : X → Y} (hf : Embedd
   letI : MetricSpace Y := metrizable_space_metric Y
   ⟨⟨hf.comap_metric_space f, rfl⟩⟩
 #align embedding.metrizable_space Embedding.metrizableSpace
+-/
 
+#print TopologicalSpace.MetrizableSpace.subtype /-
 instance MetrizableSpace.subtype [MetrizableSpace X] (s : Set X) : MetrizableSpace s :=
   embedding_subtype_val.MetrizableSpace
 #align topological_space.metrizable_space.subtype TopologicalSpace.MetrizableSpace.subtype
+-/
 
+#print TopologicalSpace.metrizableSpace_pi /-
 instance metrizableSpace_pi [∀ i, MetrizableSpace (π i)] : MetrizableSpace (∀ i, π i) :=
   by
   cases nonempty_fintype ι
   letI := fun i => metrizable_space_metric (π i)
   infer_instance
 #align topological_space.metrizable_space_pi TopologicalSpace.metrizableSpace_pi
+-/
 
 variable (X) [T3Space X] [SecondCountableTopology X]
 
+/- warning: topological_space.exists_embedding_l_infty -> TopologicalSpace.exists_embedding_l_infty is a dubious translation:
+lean 3 declaration is
+  forall (X : Type.{u1}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_5 : T3Space.{u1} X _inst_1] [_inst_6 : TopologicalSpace.SecondCountableTopology.{u1} X _inst_1], Exists.{succ u1} (X -> (BoundedContinuousFunction.{0, 0} Nat Real Nat.topologicalSpace Real.pseudoMetricSpace)) (fun (f : X -> (BoundedContinuousFunction.{0, 0} Nat Real Nat.topologicalSpace Real.pseudoMetricSpace)) => Embedding.{u1, 0} X (BoundedContinuousFunction.{0, 0} Nat Real Nat.topologicalSpace Real.pseudoMetricSpace) _inst_1 (UniformSpace.toTopologicalSpace.{0} (BoundedContinuousFunction.{0, 0} Nat Real Nat.topologicalSpace Real.pseudoMetricSpace) (PseudoMetricSpace.toUniformSpace.{0} (BoundedContinuousFunction.{0, 0} Nat Real Nat.topologicalSpace Real.pseudoMetricSpace) (BoundedContinuousFunction.pseudoMetricSpace.{0, 0} Nat Real Nat.topologicalSpace Real.pseudoMetricSpace))) f)
+but is expected to have type
+  forall (X : Type.{u1}) [_inst_1 : TopologicalSpace.{u1} X] [_inst_5 : T3Space.{u1} X _inst_1] [_inst_6 : TopologicalSpace.SecondCountableTopology.{u1} X _inst_1], Exists.{succ u1} (X -> (BoundedContinuousFunction.{0, 0} Nat Real instTopologicalSpaceNat Real.pseudoMetricSpace)) (fun (f : X -> (BoundedContinuousFunction.{0, 0} Nat Real instTopologicalSpaceNat Real.pseudoMetricSpace)) => Embedding.{u1, 0} X (BoundedContinuousFunction.{0, 0} Nat Real instTopologicalSpaceNat Real.pseudoMetricSpace) _inst_1 (UniformSpace.toTopologicalSpace.{0} (BoundedContinuousFunction.{0, 0} Nat Real instTopologicalSpaceNat Real.pseudoMetricSpace) (PseudoMetricSpace.toUniformSpace.{0} (BoundedContinuousFunction.{0, 0} Nat Real instTopologicalSpaceNat Real.pseudoMetricSpace) (BoundedContinuousFunction.instPseudoMetricSpaceBoundedContinuousFunction.{0, 0} Nat Real instTopologicalSpaceNat Real.pseudoMetricSpace))) f)
+Case conversion may be inaccurate. Consider using '#align topological_space.exists_embedding_l_infty TopologicalSpace.exists_embedding_l_inftyₓ'. -/
 /- ./././Mathport/Syntax/Translate/Expr.lean:177:8: unsupported: ambiguous notation -/
 /-- A T₃ topological space with second countable topology can be embedded into `l^∞ = ℕ →ᵇ ℝ`.
 -/
@@ -250,6 +298,7 @@ theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
     exacts[hy _ hle, (Real.dist_le_of_mem_Icc (hf0ε _ _) (hf0ε _ _)).trans (by rwa [sub_zero])]
 #align topological_space.exists_embedding_l_infty TopologicalSpace.exists_embedding_l_infty
 
+#print TopologicalSpace.metrizableSpace_of_t3_second_countable /-
 /-- *Urysohn's metrization theorem* (Tychonoff's version): a T₃ topological space with second
 countable topology `X` is metrizable, i.e., there exists a metric space structure that generates the
 same topology. -/
@@ -257,6 +306,7 @@ theorem metrizableSpace_of_t3_second_countable : MetrizableSpace X :=
   let ⟨f, hf⟩ := exists_embedding_l_infty X
   hf.MetrizableSpace
 #align topological_space.metrizable_space_of_t3_second_countable TopologicalSpace.metrizableSpace_of_t3_second_countable
+-/
 
 instance : MetrizableSpace ENNReal :=
   metrizableSpace_of_t3_second_countable ENNReal
Diff
@@ -258,8 +258,8 @@ theorem metrizableSpace_of_t3_second_countable : MetrizableSpace X :=
   hf.MetrizableSpace
 #align topological_space.metrizable_space_of_t3_second_countable TopologicalSpace.metrizableSpace_of_t3_second_countable
 
-instance : MetrizableSpace Ennreal :=
-  metrizableSpace_of_t3_second_countable Ennreal
+instance : MetrizableSpace ENNReal :=
+  metrizableSpace_of_t3_second_countable ENNReal
 
 end TopologicalSpace
 

Changes in mathlib4

mathlib3
mathlib4
chore: remove stream-of-consciousness uses of have, replace and suffices (#10640)

No changes to tactic file, it's just boring fixes throughout the library.

This follows on from #6964.

Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -99,8 +99,8 @@ theorem exists_inducing_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Inducing f := by
     rcases hB.exists_closure_subset (hB.mem_nhds hVB hxV) with ⟨U, hUB, hxU, hUV⟩
     set UV : ↥s := ⟨(U, V), ⟨hUB, hVB⟩, hUV⟩
     refine' ⟨ε UV, (ε01 UV).1, fun y (hy : dist (F y) (F x) < ε UV) => _⟩
-    replace hy : dist (F y UV) (F x UV) < ε UV
-    exact (BoundedContinuousFunction.dist_coe_le_dist _).trans_lt hy
+    replace hy : dist (F y UV) (F x UV) < ε UV :=
+      (BoundedContinuousFunction.dist_coe_le_dist _).trans_lt hy
     contrapose! hy
     rw [hF, hF, hfε UV hy, hf0 UV hxU, Pi.zero_apply, dist_zero_right]
     exact le_abs_self _
chore: remove uses of cases' (#9171)

I literally went through and regex'd some uses of cases', replacing them with rcases; this is meant to be a low effort PR as I hope that tools can do this in the future.

rcases is an easier replacement than cases, though with better tools we could in future do a second pass converting simple rcases added here (and existing ones) to cases.

Diff
@@ -87,7 +87,7 @@ theorem exists_inducing_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Inducing f := by
       refine' (eventually_all_finite h_fin).2 fun UV _ => _
       exact (f UV).continuous.tendsto x (closedBall_mem_nhds _ δ0)
     refine' this.mono fun y hy => (BoundedContinuousFunction.dist_le δ0.le).2 fun UV => _
-    cases' le_total δ (ε UV) with hle hle
+    rcases le_total δ (ε UV) with hle | hle
     exacts [hy _ hle, (Real.dist_le_of_mem_Icc (hf0ε _ _) (hf0ε _ _)).trans (by rwa [sub_zero])]
   · /- Finally, we prove that each neighborhood `V` of `x : X`
     includes a preimage of a neighborhood of `F x` under `F`.
chore: rename some lemmas involving "of_closed" (#8492)

Three particular examples which caught my eye; not exhaustive.

Diff
@@ -62,7 +62,7 @@ theorem exists_inducing_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Inducing f := by
   have : ∀ UV : s, ∃ f : C(X, ℝ),
       EqOn f 0 UV.1.1 ∧ EqOn f (fun _ => ε UV) UV.1.2ᶜ ∧ ∀ x, f x ∈ Icc 0 (ε UV) := by
     intro UV
-    rcases exists_continuous_zero_one_of_closed isClosed_closure
+    rcases exists_continuous_zero_one_of_isClosed isClosed_closure
         (hB.isOpen UV.2.1.2).isClosed_compl (hd UV) with
       ⟨f, hf₀, hf₁, hf01⟩
     exact ⟨ε UV • f, fun x hx => by simp [hf₀ (subset_closure hx)], fun x hx => by simp [hf₁ hx],
chore: move TopologicalSpace.SecondCountableTopology into the root namespace (#8186)

All the other properties of topological spaces like T0Space or RegularSpace are in the root namespace. Many files were opening TopologicalSpace just for the sake of shortening TopologicalSpace.SecondCountableTopology...

Diff
@@ -58,7 +58,7 @@ theorem _root_.Inducing.pseudoMetrizableSpace [PseudoMetrizableSpace Y] {f : X 
 
 /-- Every pseudo-metrizable space is first countable. -/
 instance (priority := 100) PseudoMetrizableSpace.firstCountableTopology
-    [h : PseudoMetrizableSpace X] : TopologicalSpace.FirstCountableTopology X := by
+    [h : PseudoMetrizableSpace X] : FirstCountableTopology X := by
   rcases h with ⟨_, hm⟩
   rw [← hm]
   exact @UniformSpace.firstCountableTopology X PseudoMetricSpace.toUniformSpace
feat: Urysohn lemma in regular locally compact spaces (#8124)

Also change a few theorems to instances, as instance loops are not a problem any more.


Open in Gitpod

Diff
@@ -109,7 +109,8 @@ theorem exists_inducing_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Inducing f := by
 /-- *Urysohn's metrization theorem* (Tychonoff's version):
 a regular topological space with second countable topology `X` is metrizable,
 i.e., there exists a pseudometric space structure that generates the same topology. -/
-lemma PseudoMetrizableSpace.of_regularSpace_secondCountableTopology : PseudoMetrizableSpace X :=
+instance (priority := 90) PseudoMetrizableSpace.of_regularSpace_secondCountableTopology :
+    PseudoMetrizableSpace X :=
   let ⟨_, hf⟩ := exists_inducing_l_infty X
   hf.pseudoMetrizableSpace
 
@@ -124,8 +125,7 @@ theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
 /-- *Urysohn's metrization theorem* (Tychonoff's version): a T₃ topological space with second
 countable topology `X` is metrizable, i.e., there exists a metric space structure that generates the
 same topology. -/
-theorem metrizableSpace_of_t3_second_countable : MetrizableSpace X :=
+instance (priority := 90) metrizableSpace_of_t3_second_countable : MetrizableSpace X :=
   let ⟨_, hf⟩ := exists_embedding_l_infty X
   hf.metrizableSpace
 #align topological_space.metrizable_space_of_t3_second_countable TopologicalSpace.metrizableSpace_of_t3_second_countable
-
chore: split Topology.MetricSpace.Metrizable* (#7912)

Move

  • basic definitions to Topology.Metrizable.Basic,
  • Urysohn's metrization theorem to `Topology.Metrizable.Urysohns', and
  • metrizability of a uniform space with countably generated uniformity to Topology.Metrizable.Uniform.

The next step is to redefine Metrizable as "uniformizable with countably generated uniformity" and make this definition available much earlier.

chore: split Topology.MetricSpace.Metrizable* (#7912)

Move

  • basic definitions to Topology.Metrizable.Basic,
  • Urysohn's metrization theorem to `Topology.Metrizable.Urysohns', and
  • metrizability of a uniform space with countably generated uniformity to Topology.Metrizable.Uniform.

The next step is to redefine Metrizable as "uniformizable with countably generated uniformity" and make this definition available much earlier.

Diff
@@ -3,10 +3,7 @@ Copyright (c) 2021 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov
 -/
-import Mathlib.Analysis.SpecificLimits.Basic
-import Mathlib.Topology.UrysohnsLemma
-import Mathlib.Topology.ContinuousFunction.Bounded
-import Mathlib.Topology.UniformSpace.Cauchy
+import Mathlib.Topology.MetricSpace.Basic
 
 #align_import topology.metric_space.metrizable from "leanprover-community/mathlib"@"f2ce6086713c78a7f880485f7917ea547a215982"
 
@@ -15,17 +12,11 @@ import Mathlib.Topology.UniformSpace.Cauchy
 
 In this file we define metrizable topological spaces, i.e., topological spaces for which there
 exists a metric space structure that generates the same topology.
-
-We also show that a T₃ topological space with second countable topology `X` is metrizable.
-
-First we prove that `X` can be embedded into `l^∞`, then use this embedding to pull back the metric
-space structure.
 -/
 
 
 open Set Filter Metric
-
-open BoundedContinuousFunction Filter Topology
+open scoped Filter Topology
 
 namespace TopologicalSpace
 
@@ -145,101 +136,4 @@ theorem IsSeparable.secondCountableTopology [PseudoMetrizableSpace X] {s : Set X
   have := hs.separableSpace
   exact UniformSpace.secondCountable_of_separable s
 
-variable (X)
-variable [T3Space X] [SecondCountableTopology X]
-
-/-- A T₃ topological space with second countable topology can be embedded into `l^∞ = ℕ →ᵇ ℝ`. -/
-theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f := by
-  -- Choose a countable basis, and consider the set `s` of pairs of set `(U, V)` such that `U ∈ B`,
-  -- `V ∈ B`, and `closure U ⊆ V`.
-  rcases exists_countable_basis X with ⟨B, hBc, -, hB⟩
-  let s : Set (Set X × Set X) := { UV ∈ B ×ˢ B | closure UV.1 ⊆ UV.2 }
-  -- `s` is a countable set.
-  haveI : Encodable s := ((hBc.prod hBc).mono (inter_subset_left _ _)).toEncodable
-  -- We don't have the space of bounded (possibly discontinuous) functions, so we equip `s`
-  -- with the discrete topology and deal with `s →ᵇ ℝ` instead.
-  letI : TopologicalSpace s := ⊥
-  haveI : DiscreteTopology s := ⟨rfl⟩
-  rsuffices ⟨f, hf⟩ : ∃ f : X → s →ᵇ ℝ, Embedding f
-  · exact ⟨fun x => (f x).extend (Encodable.encode' s) 0,
-      (BoundedContinuousFunction.isometry_extend (Encodable.encode' s) (0 : ℕ →ᵇ ℝ)).embedding.comp
-        hf⟩
-  have hd : ∀ UV : s, Disjoint (closure UV.1.1) UV.1.2ᶜ :=
-    fun UV => disjoint_compl_right.mono_right (compl_subset_compl.2 UV.2.2)
-  -- Choose a sequence of `εₙ > 0`, `n : s`, that is bounded above by `1` and tends to zero
-  -- along the `cofinite` filter.
-  obtain ⟨ε, ε01, hε⟩ : ∃ ε : s → ℝ, (∀ UV, ε UV ∈ Ioc (0 : ℝ) 1) ∧ Tendsto ε cofinite (𝓝 0) := by
-    rcases posSumOfEncodable zero_lt_one s with ⟨ε, ε0, c, hεc, hc1⟩
-    refine' ⟨ε, fun UV => ⟨ε0 UV, _⟩, hεc.summable.tendsto_cofinite_zero⟩
-    exact (le_hasSum hεc UV fun _ _ => (ε0 _).le).trans hc1
-  /- For each `UV = (U, V) ∈ s` we use Urysohn's lemma to choose a function `f UV` that is equal to
-    zero on `U` and is equal to `ε UV` on the complement to `V`. -/
-  have : ∀ UV : s, ∃ f : C(X, ℝ),
-      EqOn f 0 UV.1.1 ∧ EqOn f (fun _ => ε UV) UV.1.2ᶜ ∧ ∀ x, f x ∈ Icc 0 (ε UV) := by
-    intro UV
-    rcases exists_continuous_zero_one_of_closed isClosed_closure
-        (hB.isOpen UV.2.1.2).isClosed_compl (hd UV) with
-      ⟨f, hf₀, hf₁, hf01⟩
-    exact ⟨ε UV • f, fun x hx => by simp [hf₀ (subset_closure hx)], fun x hx => by simp [hf₁ hx],
-      fun x => ⟨mul_nonneg (ε01 _).1.le (hf01 _).1, mul_le_of_le_one_right (ε01 _).1.le (hf01 _).2⟩⟩
-  choose f hf0 hfε hf0ε using this
-  have hf01 : ∀ UV x, f UV x ∈ Icc (0 : ℝ) 1 :=
-    fun UV x => Icc_subset_Icc_right (ε01 _).2 (hf0ε _ _)
-  -- The embedding is given by `F x UV = f UV x`.
-  set F : X → s →ᵇ ℝ := fun x =>
-    ⟨⟨fun UV => f UV x, continuous_of_discreteTopology⟩, 1,
-      fun UV₁ UV₂ => Real.dist_le_of_mem_Icc_01 (hf01 _ _) (hf01 _ _)⟩
-  have hF : ∀ x UV, F x UV = f UV x := fun _ _ => rfl
-  refine' ⟨F, Embedding.mk' _ (fun x y hxy => _) fun x => le_antisymm _ _⟩
-  · /- First we prove that `F` is injective. Indeed, if `F x = F y` and `x ≠ y`, then we can find
-    `(U, V) ∈ s` such that `x ∈ U` and `y ∉ V`, hence `F x UV = 0 ≠ ε UV = F y UV`. -/
-    by_contra Hne
-    rcases hB.mem_nhds_iff.1 (isOpen_ne.mem_nhds Hne) with ⟨V, hVB, hxV, hVy⟩
-    rcases hB.exists_closure_subset (hB.mem_nhds hVB hxV) with ⟨U, hUB, hxU, hUV⟩
-    set UV : ↥s := ⟨(U, V), ⟨hUB, hVB⟩, hUV⟩
-    apply (ε01 UV).1.ne
-    calc
-      (0 : ℝ) = F x UV := (hf0 UV hxU).symm
-      _ = F y UV := by rw [hxy]
-      _ = ε UV := hfε UV fun h : y ∈ V => hVy h rfl
-  · /- Now we prove that each neighborhood `V` of `x : X` include a preimage of a neighborhood of
-    `F x` under `F`. Without loss of generality, `V` belongs to `B`. Choose `U ∈ B` such that
-    `x ∈ V` and `closure V ⊆ U`. Then the preimage of the `(ε (U, V))`-neighborhood of `F x`
-    is included by `V`. -/
-    refine' ((nhds_basis_ball.comap _).le_basis_iff hB.nhds_hasBasis).2 _
-    rintro V ⟨hVB, hxV⟩
-    rcases hB.exists_closure_subset (hB.mem_nhds hVB hxV) with ⟨U, hUB, hxU, hUV⟩
-    set UV : ↥s := ⟨(U, V), ⟨hUB, hVB⟩, hUV⟩
-    refine' ⟨ε UV, (ε01 UV).1, fun y (hy : dist (F y) (F x) < ε UV) => _⟩
-    replace hy : dist (F y UV) (F x UV) < ε UV
-    exact (BoundedContinuousFunction.dist_coe_le_dist _).trans_lt hy
-    contrapose! hy
-    rw [hF, hF, hfε UV hy, hf0 UV hxU, Pi.zero_apply, dist_zero_right]
-    exact le_abs_self _
-  · /- Finally, we prove that `F` is continuous. Given `δ > 0`, consider the set `T` of `(U, V) ∈ s`
-    such that `ε (U, V) ≥ δ`. Since `ε` tends to zero, `T` is finite. Since each `f` is continuous,
-    we can choose a neighborhood such that `dist (F y (U, V)) (F x (U, V)) ≤ δ` for any
-    `(U, V) ∈ T`. For `(U, V) ∉ T`, the same inequality is true because both `F y (U, V)` and
-    `F x (U, V)` belong to the interval `[0, ε (U, V)]`. -/
-    refine' (nhds_basis_closedBall.comap _).ge_iff.2 fun δ δ0 => _
-    have h_fin : { UV : s | δ ≤ ε UV }.Finite := by simpa only [← not_lt] using hε (gt_mem_nhds δ0)
-    have : ∀ᶠ y in 𝓝 x, ∀ UV, δ ≤ ε UV → dist (F y UV) (F x UV) ≤ δ := by
-      refine' (eventually_all_finite h_fin).2 fun UV _ => _
-      exact (f UV).continuous.tendsto x (closedBall_mem_nhds _ δ0)
-    refine' this.mono fun y hy => (BoundedContinuousFunction.dist_le δ0.le).2 fun UV => _
-    cases' le_total δ (ε UV) with hle hle
-    exacts [hy _ hle, (Real.dist_le_of_mem_Icc (hf0ε _ _) (hf0ε _ _)).trans (by rwa [sub_zero])]
-#align topological_space.exists_embedding_l_infty TopologicalSpace.exists_embedding_l_infty
-
-/-- *Urysohn's metrization theorem* (Tychonoff's version): a T₃ topological space with second
-countable topology `X` is metrizable, i.e., there exists a metric space structure that generates the
-same topology. -/
-theorem metrizableSpace_of_t3_second_countable : MetrizableSpace X :=
-  let ⟨_, hf⟩ := exists_embedding_l_infty X
-  hf.metrizableSpace
-#align topological_space.metrizable_space_of_t3_second_countable TopologicalSpace.metrizableSpace_of_t3_second_countable
-
-instance : MetrizableSpace ENNReal :=
-  metrizableSpace_of_t3_second_countable ENNReal
-
 end TopologicalSpace
refactor: split NormalSpace into NormalSpace and T4Space (#7072)
  • Rename NormalSpace to T4Space.
  • Add NormalSpace, a version without the T1Space assumption.
  • Adjust some theorems.
  • Supersedes thus closes #6892.
  • Add some instance cycles, see #2030
Diff
@@ -150,7 +150,6 @@ variable [T3Space X] [SecondCountableTopology X]
 
 /-- A T₃ topological space with second countable topology can be embedded into `l^∞ = ℕ →ᵇ ℝ`. -/
 theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f := by
-  haveI : NormalSpace X := normalSpaceOfT3SecondCountable X
   -- Choose a countable basis, and consider the set `s` of pairs of set `(U, V)` such that `U ∈ B`,
   -- `V ∈ B`, and `closure U ⊆ V`.
   rcases exists_countable_basis X with ⟨B, hBc, -, hB⟩
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -29,23 +29,23 @@ open BoundedContinuousFunction Filter Topology
 
 namespace TopologicalSpace
 
-variable {ι X Y : Type _} {π : ι → Type _} [TopologicalSpace X] [TopologicalSpace Y] [Finite ι]
+variable {ι X Y : Type*} {π : ι → Type*} [TopologicalSpace X] [TopologicalSpace Y] [Finite ι]
   [∀ i, TopologicalSpace (π i)]
 
 /-- A topological space is *pseudo metrizable* if there exists a pseudo metric space structure
 compatible with the topology. To endow such a space with a compatible distance, use
 `letI : PseudoMetricSpace X := TopologicalSpace.pseudoMetrizableSpacePseudoMetric X`. -/
-class PseudoMetrizableSpace (X : Type _) [t : TopologicalSpace X] : Prop where
+class PseudoMetrizableSpace (X : Type*) [t : TopologicalSpace X] : Prop where
   exists_pseudo_metric : ∃ m : PseudoMetricSpace X, m.toUniformSpace.toTopologicalSpace = t
 #align topological_space.pseudo_metrizable_space TopologicalSpace.PseudoMetrizableSpace
 
-instance (priority := 100) _root_.PseudoMetricSpace.toPseudoMetrizableSpace {X : Type _}
+instance (priority := 100) _root_.PseudoMetricSpace.toPseudoMetrizableSpace {X : Type*}
     [m : PseudoMetricSpace X] : PseudoMetrizableSpace X :=
   ⟨⟨m, rfl⟩⟩
 #align pseudo_metric_space.to_pseudo_metrizable_space PseudoMetricSpace.toPseudoMetrizableSpace
 
 /-- Construct on a metrizable space a metric compatible with the topology. -/
-noncomputable def pseudoMetrizableSpacePseudoMetric (X : Type _) [TopologicalSpace X]
+noncomputable def pseudoMetrizableSpacePseudoMetric (X : Type*) [TopologicalSpace X]
     [h : PseudoMetrizableSpace X] : PseudoMetricSpace X :=
   h.exists_pseudo_metric.choose.replaceTopology h.exists_pseudo_metric.choose_spec.symm
 #align topological_space.pseudo_metrizable_space_pseudo_metric TopologicalSpace.pseudoMetrizableSpacePseudoMetric
@@ -89,11 +89,11 @@ instance pseudoMetrizableSpace_pi [∀ i, PseudoMetrizableSpace (π i)] :
 /-- A topological space is metrizable if there exists a metric space structure compatible with the
 topology. To endow such a space with a compatible distance, use
 `letI : MetricSpace X := TopologicalSpace.metrizableSpaceMetric X`. -/
-class MetrizableSpace (X : Type _) [t : TopologicalSpace X] : Prop where
+class MetrizableSpace (X : Type*) [t : TopologicalSpace X] : Prop where
   exists_metric : ∃ m : MetricSpace X, m.toUniformSpace.toTopologicalSpace = t
 #align topological_space.metrizable_space TopologicalSpace.MetrizableSpace
 
-instance (priority := 100) _root_.MetricSpace.toMetrizableSpace {X : Type _} [m : MetricSpace X] :
+instance (priority := 100) _root_.MetricSpace.toMetrizableSpace {X : Type*} [m : MetricSpace X] :
     MetrizableSpace X :=
   ⟨⟨m, rfl⟩⟩
 #align metric_space.to_metrizable_space MetricSpace.toMetrizableSpace
@@ -105,7 +105,7 @@ instance (priority := 100) MetrizableSpace.toPseudoMetrizableSpace [h : Metrizab
 #align topological_space.metrizable_space.to_pseudo_metrizable_space TopologicalSpace.MetrizableSpace.toPseudoMetrizableSpace
 
 /-- Construct on a metrizable space a metric compatible with the topology. -/
-noncomputable def metrizableSpaceMetric (X : Type _) [TopologicalSpace X] [h : MetrizableSpace X] :
+noncomputable def metrizableSpaceMetric (X : Type*) [TopologicalSpace X] [h : MetrizableSpace X] :
     MetricSpace X :=
   h.exists_metric.choose.replaceTopology h.exists_metric.choose_spec.symm
 #align topological_space.metrizable_space_metric TopologicalSpace.metrizableSpaceMetric
chore: ensure all instances referred to directly have explicit names (#6423)

Per https://github.com/leanprover/lean4/issues/2343, we are going to need to change the automatic generation of instance names, as they become too long.

This PR ensures that everywhere in Mathlib that refers to an instance by name, that name is given explicitly, rather than being automatically generated.

There are four exceptions, which are now commented, with links to https://github.com/leanprover/lean4/issues/2343.

This was implemented by running Mathlib against a modified Lean that appended _ᾰ to all automatically generated names, and fixing everything.

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -71,7 +71,7 @@ instance (priority := 100) PseudoMetrizableSpace.firstCountableTopology
   rcases h with ⟨_, hm⟩
   rw [← hm]
   exact @UniformSpace.firstCountableTopology X PseudoMetricSpace.toUniformSpace
-    EMetric.instIsCountablyGeneratedProdUniformityToUniformSpace
+    EMetric.instIsCountablyGeneratedUniformity
 #align topological_space.pseudo_metrizable_space.first_countable_topology TopologicalSpace.PseudoMetrizableSpace.firstCountableTopology
 
 instance PseudoMetrizableSpace.subtype [PseudoMetrizableSpace X] (s : Set X) :
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,17 +2,14 @@
 Copyright (c) 2021 Yury Kudryashov. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module topology.metric_space.metrizable
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Analysis.SpecificLimits.Basic
 import Mathlib.Topology.UrysohnsLemma
 import Mathlib.Topology.ContinuousFunction.Bounded
 import Mathlib.Topology.UniformSpace.Cauchy
 
+#align_import topology.metric_space.metrizable from "leanprover-community/mathlib"@"f2ce6086713c78a7f880485f7917ea547a215982"
+
 /-!
 # Metrizability of a T₃ topological space with second countable topology
 
feat: add IsSeparable.secondCountableTopology (#5635)
Diff
@@ -142,6 +142,12 @@ instance metrizableSpace_pi [∀ i, MetrizableSpace (π i)] : MetrizableSpace (
   infer_instance
 #align topological_space.metrizable_space_pi TopologicalSpace.metrizableSpace_pi
 
+theorem IsSeparable.secondCountableTopology [PseudoMetrizableSpace X] {s : Set X}
+    (hs : IsSeparable s) : SecondCountableTopology s := by
+  letI := pseudoMetrizableSpacePseudoMetric X
+  have := hs.separableSpace
+  exact UniformSpace.secondCountable_of_separable s
+
 variable (X)
 variable [T3Space X] [SecondCountableTopology X]
 
fix: change compl precedence (#5586)

Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>

Diff
@@ -162,7 +162,7 @@ theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
   · exact ⟨fun x => (f x).extend (Encodable.encode' s) 0,
       (BoundedContinuousFunction.isometry_extend (Encodable.encode' s) (0 : ℕ →ᵇ ℝ)).embedding.comp
         hf⟩
-  have hd : ∀ UV : s, Disjoint (closure UV.1.1) (UV.1.2ᶜ) :=
+  have hd : ∀ UV : s, Disjoint (closure UV.1.1) UV.1.2ᶜ :=
     fun UV => disjoint_compl_right.mono_right (compl_subset_compl.2 UV.2.2)
   -- Choose a sequence of `εₙ > 0`, `n : s`, that is bounded above by `1` and tends to zero
   -- along the `cofinite` filter.
@@ -173,7 +173,7 @@ theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
   /- For each `UV = (U, V) ∈ s` we use Urysohn's lemma to choose a function `f UV` that is equal to
     zero on `U` and is equal to `ε UV` on the complement to `V`. -/
   have : ∀ UV : s, ∃ f : C(X, ℝ),
-      EqOn f 0 UV.1.1 ∧ EqOn f (fun _ => ε UV) (UV.1.2ᶜ) ∧ ∀ x, f x ∈ Icc 0 (ε UV) := by
+      EqOn f 0 UV.1.1 ∧ EqOn f (fun _ => ε UV) UV.1.2ᶜ ∧ ∀ x, f x ∈ Icc 0 (ε UV) := by
     intro UV
     rcases exists_continuous_zero_one_of_closed isClosed_closure
         (hB.isOpen UV.2.1.2).isClosed_compl (hd UV) with
chore: add space after exacts (#4945)

Too often tempted to change these during other PRs, so doing a mass edit here.

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au>

Diff
@@ -226,7 +226,7 @@ theorem exists_embedding_l_infty : ∃ f : X → ℕ →ᵇ ℝ, Embedding f :=
       exact (f UV).continuous.tendsto x (closedBall_mem_nhds _ δ0)
     refine' this.mono fun y hy => (BoundedContinuousFunction.dist_le δ0.le).2 fun UV => _
     cases' le_total δ (ε UV) with hle hle
-    exacts[hy _ hle, (Real.dist_le_of_mem_Icc (hf0ε _ _) (hf0ε _ _)).trans (by rwa [sub_zero])]
+    exacts [hy _ hle, (Real.dist_le_of_mem_Icc (hf0ε _ _) (hf0ε _ _)).trans (by rwa [sub_zero])]
 #align topological_space.exists_embedding_l_infty TopologicalSpace.exists_embedding_l_infty
 
 /-- *Urysohn's metrization theorem* (Tychonoff's version): a T₃ topological space with second
feat: port Topology.MetricSpace.Metrizable (#4181)

Dependencies 10 + 688

689 files ported (98.6%)
301148 lines ported (98.3%)
Show graph

The unported dependencies are

The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file