Skip to content

Commit 98c6231

Browse files
feat(Topology/UniformSpace/DiscreteUniformity): discrete uniformity (#23067)
1 parent ae69247 commit 98c6231

File tree

4 files changed

+111
-28
lines changed

4 files changed

+111
-28
lines changed

Mathlib.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6051,6 +6051,7 @@ import Mathlib.Topology.UniformSpace.CompleteSeparated
60516051
import Mathlib.Topology.UniformSpace.Completion
60526052
import Mathlib.Topology.UniformSpace.Defs
60536053
import Mathlib.Topology.UniformSpace.Dini
6054+
import Mathlib.Topology.UniformSpace.DiscreteUniformity
60546055
import Mathlib.Topology.UniformSpace.Equicontinuity
60556056
import Mathlib.Topology.UniformSpace.Equiv
60566057
import Mathlib.Topology.UniformSpace.HeineCantor

Mathlib/RingTheory/LaurentSeries.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Mathlib.RingTheory.HahnSeries.Summable
1111
import Mathlib.RingTheory.PowerSeries.Inverse
1212
import Mathlib.RingTheory.PowerSeries.Trunc
1313
import Mathlib.RingTheory.Localization.FractionRing
14-
import Mathlib.Topology.UniformSpace.Cauchy
14+
import Mathlib.Topology.UniformSpace.DiscreteUniformity
1515
import Mathlib.Algebra.Group.Int.TypeTags
1616

1717

@@ -738,12 +738,12 @@ theorem uniformContinuous_coeff {uK : UniformSpace K} (d : ℤ) :
738738
in `K` converges to a principal filter -/
739739
def Cauchy.coeff {ℱ : Filter K⸨X⸩} (hℱ : Cauchy ℱ) : ℤ → K :=
740740
let _ : UniformSpace K := ⊥
741-
fun d ↦ UniformSpace.DiscreteUnif.cauchyConst rfl <| hℱ.map (uniformContinuous_coeff d)
741+
fun d ↦ DiscreteUniformity.cauchyConst <| hℱ.map (uniformContinuous_coeff d)
742742

743743
theorem Cauchy.coeff_tendsto {ℱ : Filter K⸨X⸩} (hℱ : Cauchy ℱ) (D : ℤ) :
744744
Tendsto (fun f : K⸨X⸩ ↦ f.coeff D) ℱ (𝓟 {coeff hℱ D}) :=
745745
let _ : UniformSpace K := ⊥
746-
le_of_eq <| UniformSpace.DiscreteUnif.eq_const_of_cauchy (by rfl)
746+
le_of_eq <| DiscreteUniformity.eq_pure_cauchyConst
747747
(hℱ.map (uniformContinuous_coeff D)) ▸ (principal_singleton _).symm
748748

749749
/- For every Cauchy filter of Laurent series, there is a `N` such that the `n`-th coefficient

Mathlib/Topology/UniformSpace/Cauchy.lean

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -814,29 +814,4 @@ theorem secondCountable_of_separable [SeparableSpace α] : SecondCountableTopolo
814814
refine ⟨_, ⟨y, hys, k, rfl⟩, (hts k).subset hxy, fun z hz => ?_⟩
815815
exact hUV (ball_subset_of_comp_subset (hk hxy) hUU' (hk hz))
816816

817-
section DiscreteUniformity
818-
819-
open Filter
820-
821-
/-- A Cauchy filter in a discrete uniform space is contained in a principal filter. -/
822-
theorem DiscreteUnif.cauchy_le_pure {X : Type*} {uX : UniformSpace X}
823-
(hX : uX = ⊥) {α : Filter X} (hα : Cauchy α) : ∃ x : X, α = pure x := by
824-
rcases hα with ⟨α_ne_bot, α_le⟩
825-
rw [hX, bot_uniformity, le_principal_iff, mem_prod_iff] at α_le
826-
obtain ⟨S, ⟨hS, ⟨T, ⟨hT, H⟩⟩⟩⟩ := α_le
827-
obtain ⟨x, rfl⟩ := eq_singleton_left_of_prod_subset_idRel (α_ne_bot.nonempty_of_mem hS)
828-
(Filter.nonempty_of_mem hT) H
829-
exact ⟨x, α_ne_bot.le_pure_iff.mp <| le_pure_iff.mpr hS⟩
830-
831-
/-- A constant to which a Cauchy filter in a discrete uniform space converges. -/
832-
noncomputable def DiscreteUnif.cauchyConst {X : Type*} {uX : UniformSpace X}
833-
(hX : uX = ⊥) {α : Filter X} (hα : Cauchy α) : X :=
834-
(DiscreteUnif.cauchy_le_pure hX hα).choose
835-
836-
theorem DiscreteUnif.eq_const_of_cauchy {X : Type*} {uX : UniformSpace X} (hX : uX = ⊥)
837-
{α : Filter X} (hα : Cauchy α) : α = pure (DiscreteUnif.cauchyConst hX hα) :=
838-
(DiscreteUnif.cauchy_le_pure hX hα).choose_spec
839-
840-
end DiscreteUniformity
841-
842817
end UniformSpace
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
/-
2+
Copyright (c) 2024 Antoine Chambert-Loir, María Inés de Frutos Fernández. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Authors: Johannes Hölzl, Mario Carneiro, Antoine Chambert-Loir, María Inés de Frutos Fernández
5+
-/
6+
import Mathlib.Topology.UniformSpace.Cauchy
7+
import Mathlib.Topology.Algebra.UniformGroup.Defs
8+
9+
/-! # Discrete uniformity
10+
11+
The discrete uniformity is the smallest possible uniformity, the one for which
12+
the diagonal is an entourage of itself.
13+
14+
It induces the discrete topology.
15+
16+
It is complete.
17+
18+
-/
19+
20+
open Filter UniformSpace
21+
22+
/-- The discrete uniformity -/
23+
@[mk_iff discreteUniformity_iff_eq_bot]
24+
class DiscreteUniformity (X : Type*) [u : UniformSpace X] : Prop where
25+
eq_bot : u = ⊥
26+
27+
namespace DiscreteUniformity
28+
29+
/-- The bot uniformity is the discrete uniformity. -/
30+
instance (X : Type*) : @DiscreteUniformity X ⊥ :=
31+
@DiscreteUniformity.mk X ⊥ rfl
32+
33+
variable (X : Type*) [u : UniformSpace X] [DiscreteUniformity X]
34+
35+
theorem _root_.discreteUniformity_iff_eq_principal_idRel {X : Type*} [UniformSpace X] :
36+
DiscreteUniformity X ↔ uniformity X = principal idRel := by
37+
rw [discreteUniformity_iff_eq_bot, UniformSpace.ext_iff, Filter.ext_iff, bot_uniformity]
38+
39+
theorem eq_principal_idRel : uniformity X = principal idRel :=
40+
discreteUniformity_iff_eq_principal_idRel.mp inferInstance
41+
42+
/-- The discrete uniformity induces the discrete topology. -/
43+
instance : DiscreteTopology X where
44+
eq_bot := by
45+
rw [DiscreteUniformity.eq_bot (X := X), UniformSpace.toTopologicalSpace_bot]
46+
47+
theorem _root_.discreteUniformity_iff_idRel_mem_uniformity {X : Type*} [UniformSpace X] :
48+
DiscreteUniformity X ↔ idRel ∈ uniformity X := by
49+
rw [← uniformSpace_eq_bot, discreteUniformity_iff_eq_bot]
50+
51+
theorem idRel_mem_uniformity : idRel ∈ uniformity X :=
52+
discreteUniformity_iff_idRel_mem_uniformity.mp inferInstance
53+
54+
variable {X} in
55+
/-- A product of spaces with discrete uniformity has a discrete uniformity. -/
56+
instance {Y : Type*} [UniformSpace Y] [DiscreteUniformity Y] :
57+
DiscreteUniformity (X × Y) := by
58+
simp [discreteUniformity_iff_eq_principal_idRel, uniformity_prod_eq_comap_prod,
59+
eq_principal_idRel, idRel, Set.prod_eq, Prod.ext_iff, Set.setOf_and]
60+
61+
variable {x} in
62+
/-- On a space with a discrete uniformity, any function is uniformly continuous. -/
63+
theorem uniformContinuous {Y : Type*} [UniformSpace Y] (f : X → Y) :
64+
UniformContinuous f := by
65+
simp only [uniformContinuous_iff, DiscreteUniformity.eq_bot, bot_le]
66+
67+
/-- The discrete uniformity makes a group a `UniformGroup. -/
68+
@[to_additive "The discrete uniformity makes an additive group a `UniformAddGroup`."]
69+
instance [Group X] : UniformGroup X where
70+
uniformContinuous_div := uniformContinuous (X × X) fun p ↦ p.1 / p.2
71+
72+
variable {X} in
73+
/-- A Cauchy filter in a discrete uniform space is contained in the principal filter
74+
of a point. -/
75+
theorem eq_pure_of_cauchy {α : Filter X} (hα : Cauchy α) : ∃ x : X, α = pure x := by
76+
rcases hα with ⟨α_ne_bot, α_le⟩
77+
simp only [DiscreteUniformity.eq_principal_idRel, le_principal_iff, mem_prod_iff] at α_le
78+
obtain ⟨S, ⟨hS, ⟨T, ⟨hT, H⟩⟩⟩⟩ := α_le
79+
obtain ⟨x, rfl⟩ := eq_singleton_left_of_prod_subset_idRel (α_ne_bot.nonempty_of_mem hS)
80+
(Filter.nonempty_of_mem hT) H
81+
exact ⟨x, α_ne_bot.le_pure_iff.mp <| le_pure_iff.mpr hS⟩
82+
83+
@[deprecated (since := "2025-03-23")]
84+
alias _root_.UniformSpace.DiscreteUnif.cauchy_le_pure := eq_pure_of_cauchy
85+
86+
/-- The discrete uniformity makes a space complete. -/
87+
instance : CompleteSpace X where
88+
complete {f} hf := by
89+
obtain ⟨x, rfl⟩ := eq_pure_of_cauchy hf
90+
exact ⟨x, pure_le_nhds x⟩
91+
92+
variable {X}
93+
94+
/-- A constant to which a Cauchy filter in a discrete uniform space converges. -/
95+
noncomputable def cauchyConst {α : Filter X} (hα : Cauchy α) : X :=
96+
(eq_pure_of_cauchy hα).choose
97+
98+
@[deprecated (since := "2025-03-23")]
99+
alias _root_.UniformSpace.DiscreteUnif.cauchyConst := cauchyConst
100+
101+
theorem eq_pure_cauchyConst {α : Filter X} (hα : Cauchy α) : α = pure (cauchyConst hα) :=
102+
(eq_pure_of_cauchy hα).choose_spec
103+
104+
@[deprecated (since := "2025-03-23")]
105+
alias _root_.UniformSpace.DiscreteUnif.eq_const_of_cauchy := eq_pure_cauchyConst
106+
107+
end DiscreteUniformity

0 commit comments

Comments
 (0)