Skip to content

Commit 6014a43

Browse files
plp127urkud
andcommitted
refactor: have MetrizableSpace not depend on MetricSpace (#27946)
Some theorems for uniform spaces with a countably generated uniformity do not mention their uniformity in any of the hypotheses or the conclusion (for example `UniformSpace.isCompact_iff_isSeqCompact`). This PR allows those theorems to be stated for (pseudo)metrizable spaces without importing the real numbers. - Use `TopologicalSpace.pseudoMetrizableSpaceUniformity` to endow a pseudometrizable space with a compatible uniformity, and use `TopologicalSpace.pseudoMetrizableSpaceUniformity_countably_generated` to show that this is countably generated. - `TopologicalSpace.pseudoMetrizableSpacePseudoMetric` and `TopologicalSpace.metrizableSpaceMetric` have been moved to `Mathlib/Topology/Metrizable/Uniformity.lean`. See also #2032 Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>
1 parent 50a5c45 commit 6014a43

File tree

6 files changed

+152
-115
lines changed

6 files changed

+152
-115
lines changed

Mathlib/Topology/Compactness/PseudometrizableLindelof.lean

Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,6 @@ module
77

88
public import Mathlib.Topology.Metrizable.Basic
99
public import Mathlib.Topology.Compactness.Lindelof
10+
public import Mathlib.Tactic.Linter.DeprecatedModule
1011

11-
/-!
12-
# Second-countability of pseudometrizable Lindelöf spaces
13-
14-
Factored out from `Mathlib/Topology/Compactness/Lindelof.lean`
15-
to avoid circular dependencies.
16-
-/
17-
18-
@[expose] public section
19-
20-
variable {X : Type*} [TopologicalSpace X]
21-
22-
open Set Filter Topology TopologicalSpace
23-
24-
instance SecondCountableTopology.ofPseudoMetrizableSpaceLindelofSpace [PseudoMetrizableSpace X]
25-
[LindelofSpace X] : SecondCountableTopology X := by
26-
letI : PseudoMetricSpace X := TopologicalSpace.pseudoMetrizableSpacePseudoMetric X
27-
have h_dense (ε) (hpos : 0 < ε) : ∃ s : Set X, s.Countable ∧ ∀ x, ∃ y ∈ s, dist x y ≤ ε := by
28-
let U := fun (z : X) ↦ Metric.ball z ε
29-
obtain ⟨t, hct, huniv⟩ := LindelofSpace.elim_nhds_subcover U
30-
(fun _ ↦ (Metric.isOpen_ball).mem_nhds (Metric.mem_ball_self hpos))
31-
refine ⟨t, hct, fun z ↦ ?_⟩
32-
obtain ⟨y, ht, hzy⟩ : ∃ y ∈ t, z ∈ U y :=
33-
exists_set_mem_of_union_eq_top t (fun i ↦ U i) huniv z
34-
exact ⟨y, ht, (Metric.mem_ball.mp hzy).le⟩
35-
exact Metric.secondCountable_of_almost_dense_set h_dense
12+
deprecated_module (since := "2025-12-10")

Mathlib/Topology/GDelta/MetrizableSpace.lean

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ instance (priority := 100) [PseudoMetrizableSpace X] : NormalSpace X where
4444

4545
instance (priority := 500) [PseudoMetrizableSpace X] : PerfectlyNormalSpace X where
4646
closed_gdelta s hs := by
47-
let _ := pseudoMetrizableSpacePseudoMetric X
47+
let := pseudoMetrizableSpaceUniformity X
48+
have := pseudoMetrizableSpaceUniformity_countably_generated X
4849
rcases (@uniformity_hasBasis_open X _).exists_antitone_subbasis with ⟨U, hUo, hU, -⟩
4950
rw [← hs.closure_eq, ← hU.biInter_biUnion_ball]
5051
refine .biInter (to_countable _) fun n _ => IsOpen.isGδ ?_
@@ -61,7 +62,8 @@ variable {Y : Type*} [TopologicalSpace Y]
6162

6263
theorem IsGδ.setOf_continuousAt [PseudoMetrizableSpace Y] (f : X → Y) :
6364
IsGδ { x | ContinuousAt f x } := by
64-
let _ := pseudoMetrizableSpacePseudoMetric Y
65+
let := pseudoMetrizableSpaceUniformity Y
66+
have := pseudoMetrizableSpaceUniformity_countably_generated Y
6567
obtain ⟨U, _, hU⟩ := (@uniformity_hasBasis_open_symmetric Y _).exists_antitone_subbasis
6668
simp only [Uniform.continuousAt_iff_prod, nhds_prod_eq]
6769
simp only [(nhds_basis_opens _).prod_self.tendsto_iff hU.toHasBasis,

Mathlib/Topology/Metrizable/Basic.lean

Lines changed: 114 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -5,129 +5,176 @@ Authors: Yury Kudryashov
55
-/
66
module
77

8-
public import Mathlib.Topology.MetricSpace.Basic
8+
public import Mathlib.Topology.UniformSpace.Pi
99

1010
/-!
11-
# Metrizability of a T₃ topological space with second countable topology
11+
# Metrizable Spaces
1212
1313
In this file we define metrizable topological spaces, i.e., topological spaces for which there
1414
exists a metric space structure that generates the same topology.
15+
We define it without any reference to metric spaces in order to avoid importing the real numbers.
16+
For the proof that metrizable spaces admit a compatible metric,
17+
see `Mathlib/Topology/Metrizable/Uniformity`.
1518
-/
1619

20+
-- don't import the real numbers
21+
assert_not_exists AddMonoidWithOne
22+
1723
@[expose] public section
1824

19-
open Filter Set Metric Topology
25+
open Filter Set Topology Uniformity
2026

2127
namespace TopologicalSpace
2228

2329
variable {ι X Y : Type*} {A : ι → Type*} [TopologicalSpace X] [TopologicalSpace Y] [Finite ι]
2430
[∀ i, TopologicalSpace (A i)]
2531

2632
/-- A topological space is *pseudo metrizable* if there exists a pseudo metric space structure
27-
compatible with the topology. To endow such a space with a compatible distance, use
33+
compatible with the topology. To minimize imports, we implement this class in terms of the
34+
existence of a countably generated unifomity inducing the topology, which is mathematically
35+
equivalent.
36+
To endow such a space with a compatible uniformity, use
37+
`letI : UniformSpace X := TopologicalSpace.pseudoMetrizableSpaceUniformity X`.
38+
To endow such a space with a compatible distance, use
2839
`letI : PseudoMetricSpace X := TopologicalSpace.pseudoMetrizableSpacePseudoMetric X`. -/
2940
class PseudoMetrizableSpace (X : Type*) [t : TopologicalSpace X] : Prop where
30-
exists_pseudo_metric : ∃ m : PseudoMetricSpace X, m.toUniformSpace.toTopologicalSpace = t
31-
32-
instance (priority := 100) _root_.PseudoMetricSpace.toPseudoMetrizableSpace {X : Type*}
33-
[m : PseudoMetricSpace X] : PseudoMetrizableSpace X :=
34-
⟨⟨m, rfl⟩⟩
35-
36-
/-- Construct on a metrizable space a metric compatible with the topology. -/
37-
noncomputable def pseudoMetrizableSpacePseudoMetric (X : Type*) [TopologicalSpace X]
38-
[h : PseudoMetrizableSpace X] : PseudoMetricSpace X :=
39-
h.exists_pseudo_metric.choose.replaceTopology h.exists_pseudo_metric.choose_spec.symm
41+
exists_countably_generated :
42+
∃ u : UniformSpace X, u.toTopologicalSpace = t ∧ (uniformity X).IsCountablyGenerated
43+
44+
/-- A uniform space with countably generated `𝓤 X` is pseudo metrizable. -/
45+
instance (priority := 100) _root_.UniformSpace.pseudoMetrizableSpace {X : Type*}
46+
[u : UniformSpace X] [hu : IsCountablyGenerated (uniformity X)] : PseudoMetrizableSpace X :=
47+
⟨⟨u, rfl, hu⟩⟩
48+
49+
/-- Construct on a pseudometrizable space a countably generated uniformity
50+
compatible with the topology. Use `pseudoMetrizableSpaceUniformity_countably_generated` for a proof
51+
that this uniformity is countably generated. -/
52+
-- see note [reducible non-instances]
53+
noncomputable abbrev pseudoMetrizableSpaceUniformity (X : Type*) [TopologicalSpace X]
54+
[h : PseudoMetrizableSpace X] : UniformSpace X :=
55+
h.exists_countably_generated.choose.replaceTopology
56+
h.exists_countably_generated.choose_spec.1.symm
57+
58+
example {X : Type*} [t : TopologicalSpace X] [PseudoMetrizableSpace X] :
59+
(pseudoMetrizableSpaceUniformity X).toTopologicalSpace = t := by
60+
with_reducible_and_instances rfl
61+
62+
/-- The uniformity coming from `pseudoMetrizableSpaceUniformity` is countably generated.. -/
63+
theorem pseudoMetrizableSpaceUniformity_countably_generated
64+
(X : Type*) [TopologicalSpace X] [h : PseudoMetrizableSpace X] :
65+
𝓤[pseudoMetrizableSpaceUniformity X].IsCountablyGenerated :=
66+
h.exists_countably_generated.choose_spec.2
4067

4168
instance pseudoMetrizableSpace_prod [PseudoMetrizableSpace X] [PseudoMetrizableSpace Y] :
4269
PseudoMetrizableSpace (X × Y) :=
43-
letI : PseudoMetricSpace X := pseudoMetrizableSpacePseudoMetric X
44-
letI : PseudoMetricSpace Y := pseudoMetrizableSpacePseudoMetric Y
70+
let : UniformSpace X := pseudoMetrizableSpaceUniformity X
71+
have : (uniformity X).IsCountablyGenerated :=
72+
pseudoMetrizableSpaceUniformity_countably_generated X
73+
let : UniformSpace Y := pseudoMetrizableSpaceUniformity Y
74+
have : (uniformity Y).IsCountablyGenerated :=
75+
pseudoMetrizableSpaceUniformity_countably_generated Y
4576
inferInstance
4677

4778
/-- Given an inducing map of a topological space into a pseudo metrizable space, the source space
4879
is also pseudo metrizable. -/
4980
theorem _root_.Topology.IsInducing.pseudoMetrizableSpace [PseudoMetrizableSpace Y] {f : X → Y}
5081
(hf : IsInducing f) : PseudoMetrizableSpace X :=
51-
letI : PseudoMetricSpace Y := pseudoMetrizableSpacePseudoMetric Y
52-
⟨⟨hf.comapPseudoMetricSpace, rfl⟩⟩
82+
let u : UniformSpace Y := pseudoMetrizableSpaceUniformity Y
83+
have : (uniformity Y).IsCountablyGenerated :=
84+
pseudoMetrizableSpaceUniformity_countably_generated Y
85+
⟨⟨u.comap f, u.toTopologicalSpace_comap.trans hf.eq_induced.symm,
86+
Filter.comap.isCountablyGenerated (uniformity Y) (Prod.map f f)⟩⟩
5387

5488
/-- Every pseudo-metrizable space is first countable. -/
5589
instance (priority := 100) PseudoMetrizableSpace.firstCountableTopology
56-
[h : PseudoMetrizableSpace X] : FirstCountableTopology X := by
57-
rcases h with ⟨_, hm⟩
58-
rw [← hm]
59-
exact @UniformSpace.firstCountableTopology X PseudoMetricSpace.toUniformSpace
60-
EMetric.instIsCountablyGeneratedUniformity
90+
[h : PseudoMetrizableSpace X] : FirstCountableTopology X :=
91+
let : UniformSpace X := pseudoMetrizableSpaceUniformity X
92+
have : (uniformity X).IsCountablyGenerated :=
93+
pseudoMetrizableSpaceUniformity_countably_generated X
94+
inferInstance
6195

6296
instance PseudoMetrizableSpace.subtype [PseudoMetrizableSpace X] (s : Set X) :
6397
PseudoMetrizableSpace s :=
6498
IsInducing.subtypeVal.pseudoMetrizableSpace
6599

66100
instance pseudoMetrizableSpace_pi [∀ i, PseudoMetrizableSpace (A i)] :
67-
PseudoMetrizableSpace (∀ i, A i) := by
68-
cases nonempty_fintype ι
69-
letI := fun i => pseudoMetrizableSpacePseudoMetric (A i)
70-
infer_instance
101+
PseudoMetrizableSpace (∀ i, A i) :=
102+
let := fun i => pseudoMetrizableSpaceUniformity (A i)
103+
have := fun i => pseudoMetrizableSpaceUniformity_countably_generated (A i)
104+
inferInstance
105+
106+
instance PseudoMetrizableSpace.regularSpace [PseudoMetrizableSpace X] : RegularSpace X :=
107+
let := pseudoMetrizableSpaceUniformity X
108+
inferInstance
71109

72110
/-- A topological space is metrizable if there exists a metric space structure compatible with the
73-
topology. To endow such a space with a compatible distance, use
111+
topology. To minimize imports, we implement this class in terms of the existence of a
112+
countably generated unifomity inducing the topology, which is mathematically
113+
equivalent.
114+
To endow such a space with a compatible uniformity, use
115+
`letI : UniformSpace X := TopologicalSpace.pseudoMetrizableSpaceUniformity X`.
116+
To endow such a space with a compatible distance, use
74117
`letI : MetricSpace X := TopologicalSpace.metrizableSpaceMetric X`. -/
75-
class MetrizableSpace (X : Type*) [t : TopologicalSpace X] : Prop where
76-
exists_metric : ∃ m : MetricSpace X, m.toUniformSpace.toTopologicalSpace = t
77-
78-
instance (priority := 100) _root_.MetricSpace.toMetrizableSpace {X : Type*} [m : MetricSpace X] :
79-
MetrizableSpace X :=
80-
⟨⟨m, rfl⟩⟩
118+
class MetrizableSpace (X : Type*) [t : TopologicalSpace X] : Prop extends
119+
PseudoMetrizableSpace X, T0Space X
81120

82-
instance (priority := 100) MetrizableSpace.toPseudoMetrizableSpace [h : MetrizableSpace X] :
83-
PseudoMetrizableSpace X :=
84-
let ⟨m, hm⟩ := h.1
85-
⟨⟨m.toPseudoMetricSpace, hm⟩⟩
121+
-- See note [lower instance priority]
122+
attribute [instance 100] MetrizableSpace.toT0Space
123+
attribute [instance 100] MetrizableSpace.toPseudoMetrizableSpace
86124

87125
instance (priority := 100) PseudoMetrizableSpace.toMetrizableSpace
88-
[T0Space X] [h : PseudoMetrizableSpace X] : MetrizableSpace X :=
89-
letI := pseudoMetrizableSpacePseudoMetric X
90-
⟨.ofT0PseudoMetricSpace X, rfl⟩
91-
92-
/-- Construct on a metrizable space a metric compatible with the topology. -/
93-
noncomputable def metrizableSpaceMetric (X : Type*) [TopologicalSpace X] [h : MetrizableSpace X] :
94-
MetricSpace X :=
95-
h.exists_metric.choose.replaceTopology h.exists_metric.choose_spec.symm
126+
[T0Space X] [h : PseudoMetrizableSpace X] : MetrizableSpace X where
96127

97128
instance (priority := 100) t2Space_of_metrizableSpace [MetrizableSpace X] : T2Space X :=
98-
letI : MetricSpace X := metrizableSpaceMetric X
129+
letI : UniformSpace X := pseudoMetrizableSpaceUniformity X
99130
inferInstance
100131

101-
instance metrizableSpace_prod [MetrizableSpace X] [MetrizableSpace Y] : MetrizableSpace (X × Y) :=
102-
letI : MetricSpace X := metrizableSpaceMetric X
103-
letI : MetricSpace Y := metrizableSpaceMetric Y
104-
inferInstance
132+
instance metrizableSpace_prod [MetrizableSpace X] [MetrizableSpace Y] :
133+
MetrizableSpace (X × Y) where
105134

106135
/-- Given an embedding of a topological space into a metrizable space, the source space is also
107136
metrizable. -/
108137
theorem _root_.Topology.IsEmbedding.metrizableSpace [MetrizableSpace Y] {f : X → Y}
109-
(hf : IsEmbedding f) : MetrizableSpace X :=
110-
letI : MetricSpace Y := metrizableSpaceMetric Y
111-
⟨⟨hf.comapMetricSpace f, rfl⟩⟩
138+
(hf : IsEmbedding f) : MetrizableSpace X where
139+
toPseudoMetrizableSpace := hf.toIsInducing.pseudoMetrizableSpace
140+
toT0Space := hf.t0Space
112141

113142
instance MetrizableSpace.subtype [MetrizableSpace X] (s : Set X) : MetrizableSpace s :=
114143
IsEmbedding.subtypeVal.metrizableSpace
115144

116-
instance metrizableSpace_pi [∀ i, MetrizableSpace (A i)] : MetrizableSpace (∀ i, A i) := by
117-
cases nonempty_fintype ι
118-
letI := fun i => metrizableSpaceMetric (A i)
119-
infer_instance
145+
instance metrizableSpace_pi [∀ i, MetrizableSpace (A i)] : MetrizableSpace (∀ i, A i) where
120146

121147
theorem IsSeparable.secondCountableTopology [PseudoMetrizableSpace X] {s : Set X}
122-
(hs : IsSeparable s) : SecondCountableTopology s := by
123-
letI := pseudoMetrizableSpacePseudoMetric X
124-
have := hs.separableSpace
125-
exact UniformSpace.secondCountable_of_separable s
126-
127-
instance (X : Type*) [TopologicalSpace X] [c : CompactSpace X] [MetrizableSpace X] :
148+
(hs : IsSeparable s) : SecondCountableTopology s :=
149+
let ⟨u, hu, hs⟩ := hs
150+
have := hu.to_subtype
151+
have : SeparableSpace (closure u) :=
152+
⟨Set.range (u.inclusion subset_closure), Set.countable_range (u.inclusion subset_closure),
153+
Subtype.dense_iff.2 <| by rw [← Set.range_comp, Set.val_comp_inclusion, Subtype.range_coe]⟩
154+
let := pseudoMetrizableSpaceUniformity (closure u)
155+
have := pseudoMetrizableSpaceUniformity_countably_generated (closure u)
156+
have := UniformSpace.secondCountable_of_separable (closure u)
157+
(Topology.IsEmbedding.inclusion hs).secondCountableTopology
158+
159+
instance (X : Type*) [TopologicalSpace X] [LindelofSpace X] [PseudoMetrizableSpace X] :
128160
SecondCountableTopology X := by
129-
obtain ⟨_, h⟩ := MetrizableSpace.exists_metric (X := X)
130-
rw [← h] at c ⊢
131-
infer_instance
161+
let := pseudoMetrizableSpaceUniformity X
162+
have := pseudoMetrizableSpaceUniformity_countably_generated X
163+
suffices _ : SeparableSpace X from UniformSpace.secondCountable_of_separable X
164+
obtain ⟨V, hVb, hVs⟩ := UniformSpace.has_seq_basis X
165+
choose U hUc hUu using fun n =>
166+
LindelofSpace.elim_nhds_subcover (fun x => UniformSpace.ball x (V n))
167+
(fun x => UniformSpace.ball_mem_nhds x (hVb.mem n))
168+
refine ⟨Set.iUnion U, Set.countable_iUnion hUc, fun x => ?_⟩
169+
rw [mem_closure_iff_frequently, nhds_eq_comap_uniformity, frequently_comap, hVb.frequently_iff]
170+
intro n _
171+
obtain ⟨i, hi, hx⟩ := Set.mem_iUnion₂.1 (Set.eq_univ_iff_forall.1 (hUu n) x)
172+
rw [UniformSpace.ball_eq_of_symmetry] at hx
173+
exact ⟨(x, i), hx, i, rfl, Set.mem_iUnion_of_mem n hi⟩
174+
175+
instance (priority := 100) DiscreteTopology.metrizableSpace [DiscreteTopology X] :
176+
MetrizableSpace X where
177+
exists_countably_generated :=
178+
⟨⊥, DiscreteTopology.eq_bot.symm, Filter.isCountablyGenerated_principal SetRel.id⟩
132179

133180
end TopologicalSpace

Mathlib/Topology/Metrizable/ContinuousMap.lean

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,10 @@ variable {X Y : Type*}
2626
[TopologicalSpace Y]
2727

2828
instance [PseudoMetrizableSpace Y] : PseudoMetrizableSpace C(X, Y) :=
29-
let _ := pseudoMetrizableSpacePseudoMetric Y
29+
let := pseudoMetrizableSpaceUniformity Y
30+
have := pseudoMetrizableSpaceUniformity_countably_generated Y
3031
inferInstance
3132

32-
instance [MetrizableSpace Y] : MetrizableSpace C(X, Y) :=
33-
let _ := metrizableSpaceMetric Y
34-
UniformSpace.metrizableSpace
33+
instance [MetrizableSpace Y] : MetrizableSpace C(X, Y) where
3534

3635
end ContinuousMap

Mathlib/Topology/Metrizable/Real.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Johannes Hölzl, Mario Carneiro
55
-/
66
module
77

8+
public import Mathlib.Topology.MetricSpace.Basic
89
public import Mathlib.Topology.Metrizable.Basic
910
public import Mathlib.Topology.Order.MonotoneContinuity
1011
public import Mathlib.Topology.Order.Real

Mathlib/Topology/Metrizable/Uniformity.lean

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ module
77

88
public import Mathlib.Data.Nat.Lattice
99
public import Mathlib.Data.NNReal.Basic
10+
public import Mathlib.Topology.MetricSpace.Basic
1011
public import Mathlib.Topology.Metrizable.Basic
1112

1213
/-!
@@ -243,28 +244,44 @@ protected theorem UniformSpace.metrizable_uniformity (X : Type*) [UniformSpace X
243244
mul_one_div, div_le_iff₀ zero_lt_two, div_mul_cancel₀ _ two_ne_zero, hle_d]
244245

245246
/-- A `PseudoMetricSpace` instance compatible with a given `UniformSpace` structure. -/
246-
protected noncomputable def UniformSpace.pseudoMetricSpace (X : Type*) [UniformSpace X]
247+
-- see note [reducible non-instances]
248+
protected noncomputable abbrev UniformSpace.pseudoMetricSpace (X : Type*) [UniformSpace X]
247249
[IsCountablyGenerated (𝓤 X)] : PseudoMetricSpace X :=
248250
(UniformSpace.metrizable_uniformity X).choose.replaceUniformity <|
249251
congr_arg _ (UniformSpace.metrizable_uniformity X).choose_spec.symm
250252

251253
/-- A `MetricSpace` instance compatible with a given `UniformSpace` structure. -/
252-
protected noncomputable def UniformSpace.metricSpace (X : Type*) [UniformSpace X]
254+
-- see note [reducible non-instances]
255+
protected noncomputable abbrev UniformSpace.metricSpace (X : Type*) [UniformSpace X]
253256
[IsCountablyGenerated (𝓤 X)] [T0Space X] : MetricSpace X :=
254257
@MetricSpace.ofT0PseudoMetricSpace X (UniformSpace.pseudoMetricSpace X) _
255258

256-
/-- A uniform space with countably generated `𝓤 X` is pseudo metrizable. -/
257-
instance (priority := 100) UniformSpace.pseudoMetrizableSpace [UniformSpace X]
258-
[IsCountablyGenerated (𝓤 X)] : TopologicalSpace.PseudoMetrizableSpace X := by
259-
letI := UniformSpace.pseudoMetricSpace X
260-
infer_instance
261-
262259
/-- A T₀ uniform space with countably generated `𝓤 X` is metrizable. This is not an instance to
263260
avoid loops. -/
264261
theorem UniformSpace.metrizableSpace [UniformSpace X] [IsCountablyGenerated (𝓤 X)] [T0Space X] :
265-
TopologicalSpace.MetrizableSpace X := by
266-
letI := UniformSpace.metricSpace X
267-
infer_instance
262+
TopologicalSpace.MetrizableSpace X := inferInstance
263+
264+
/-- Construct on a pseudometrizable space a pseudometric compatible with the topology. -/
265+
-- see note [reducible non-instances]
266+
noncomputable abbrev TopologicalSpace.pseudoMetrizableSpacePseudoMetric (X : Type*)
267+
[TopologicalSpace X] [TopologicalSpace.PseudoMetrizableSpace X] : PseudoMetricSpace X :=
268+
letI := TopologicalSpace.pseudoMetrizableSpaceUniformity X
269+
haveI := TopologicalSpace.pseudoMetrizableSpaceUniformity_countably_generated X
270+
UniformSpace.pseudoMetricSpace X
271+
272+
example {X : Type*} [t : TopologicalSpace X] [t.PseudoMetrizableSpace] :
273+
t.pseudoMetrizableSpacePseudoMetric.toUniformSpace = t.pseudoMetrizableSpaceUniformity := by
274+
with_reducible_and_instances rfl
275+
276+
/-- Construct on a metrizable space a metric compatible with the topology. -/
277+
noncomputable abbrev TopologicalSpace.metrizableSpaceMetric (X : Type*) [TopologicalSpace X]
278+
[TopologicalSpace.MetrizableSpace X] : MetricSpace X :=
279+
letI := pseudoMetrizableSpacePseudoMetric X
280+
.ofT0PseudoMetricSpace X
281+
282+
example {X : Type*} [t : TopologicalSpace X] [t.MetrizableSpace] :
283+
t.metrizableSpaceMetric.toPseudoMetricSpace = t.pseudoMetrizableSpacePseudoMetric := by
284+
with_reducible_and_instances rfl
268285

269286
/-- A totally bounded set is separable in countably generated uniform spaces. This can be obtained
270287
from the more general `EMetric.subset_countable_closure_of_almost_dense_set`. -/
@@ -284,12 +301,6 @@ lemma TotallyBounded.isSeparable [UniformSpace X] [i : IsCountablyGenerated (
284301
variable {α : Type*}
285302
open TopologicalSpace
286303

287-
instance (priority := 100) DiscreteTopology.metrizableSpace
288-
[TopologicalSpace α] [DiscreteTopology α] :
289-
MetrizableSpace α := by
290-
obtain rfl := DiscreteTopology.eq_bot (α := α)
291-
exact @UniformSpace.metrizableSpace α ⊥ (isCountablyGenerated_principal _) _
292-
293304
instance (priority := 100) PseudoEMetricSpace.pseudoMetrizableSpace
294305
[PseudoEMetricSpace α] : PseudoMetrizableSpace α :=
295306
inferInstance

0 commit comments

Comments
 (0)