topology.metric_space.metrizable
⟷
Mathlib.Topology.Metrizable.Urysohn
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.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(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)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -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
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -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"
mathlib commit https://github.com/leanprover-community/mathlib/commit/001ffdc42920050657fd45bd2b8bfbec8eaaeb29
@@ -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⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -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`
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -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 => _
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -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 /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -31,7 +31,7 @@ space structure.
open Set Filter Metric
-open BoundedContinuousFunction Filter Topology
+open scoped BoundedContinuousFunction Filter Topology
namespace TopologicalSpace
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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^∞ = ℕ →ᵇ ℝ`.
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -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
·
mathlib commit https://github.com/leanprover-community/mathlib/commit/8d33f09cd7089ecf074b4791907588245aec5d1b
@@ -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.
mathlib commit https://github.com/leanprover-community/mathlib/commit/75e7fca56381d056096ce5d05e938f63a6567828
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -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
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
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>
@@ -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 _
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
.
@@ -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`.
Three particular examples which caught my eye; not exhaustive.
@@ -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],
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
...
@@ -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
Also change a few theorems to instances, as instance loops are not a problem any more.
@@ -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
-
Topology.MetricSpace.Metrizable*
(#7912)
Move
Topology.Metrizable.Basic
,Topology.Metrizable.Uniform
.The next step is to redefine Metrizable
as "uniformizable with countably generated uniformity"
and make this definition available much earlier.
Topology.MetricSpace.Metrizable*
(#7912)
Move
Topology.Metrizable.Basic
,Topology.Metrizable.Uniform
.The next step is to redefine Metrizable
as "uniformizable with countably generated uniformity"
and make this definition available much earlier.
@@ -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
@@ -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⟩
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -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
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>
@@ -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) :
@@ -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
@@ -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]
@@ -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
@@ -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
The unported dependencies are
algebra.order.module
init.core
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file