11/-
22Copyright (c) 2024 Ben Eltschig. All rights reserved.
33Released under Apache 2.0 license as described in the file LICENSE.
4- Authors: Ben Eltschig
4+ Authors: Ben Eltschig, Joël Riou
55-/
66module
77
8+ public import Mathlib.Topology.Convenient.GeneratedBy
89public import Mathlib.Analysis.LocallyConvex.WithSeminorms
910
1011/-!
@@ -17,7 +18,11 @@ locally path-connected, sequential and in particular compactly generated.
1718
1819See https://ncatlab.org/nlab/show/Delta-generated+topological+space.
1920
20- Adapted from `Mathlib/Topology/Compactness/CompactlyGeneratedSpace.lean`.
21+ The notions defined in this file (see also the file
22+ `Mathlib/Topology/Category/DeltaGenerated.lean` for the category `DeltaGenerated`)
23+ are a particular case of the notion of `X`-generated topological spaces where
24+ `X` is a family of topological spaces (see the file
25+ `Mathlib/Topology/Convenient/GeneratedBy.lean`.)
2126
2227## TODO
2328* All locally path-connected first-countable spaces are delta-generated - in particular, all normed
@@ -28,158 +33,95 @@ Adapted from `Mathlib/Topology/Compactness/CompactlyGeneratedSpace.lean`.
2833
2934@[expose] public section
3035
31- variable {X Y : Type *} [tX : TopologicalSpace X] [tY : TopologicalSpace Y]
32-
3336open TopologicalSpace Topology
3437
38+ /-- A topological space is Delta-generated if its topology is generated
39+ by the continuous maps from topological spaces of the form `Fin n → ℝ`. -/
40+ abbrev DeltaGeneratedSpace (Y : Type *) [TopologicalSpace Y] : Prop :=
41+ IsGeneratedBy (fun n ↦ Fin n → ℝ) Y
42+
43+ namespace DeltaGeneratedSpace
44+
45+ variable {X Y : Type *} [TopologicalSpace X] [TopologicalSpace Y]
46+
47+ /-- Type synonym to be equipped with the delta-generated topology. -/
48+ abbrev of : Type _ := WithGeneratedByTopology (fun n ↦ Fin n → ℝ) Y
49+
50+ /-- Delta-generated spaces are locally path-connected. -/
51+ instance [DeltaGeneratedSpace X] :
52+ LocPathConnectedSpace X := by
53+ rw [← IsGeneratedBy.generatedBy_eq (X := fun n ↦ Fin n → ℝ) (Y := X),
54+ generatedBy_eq_coinduced]
55+ exact LocPathConnectedSpace.coinduced _
56+
57+ /-- Delta-generated spaces are sequential. -/
58+ instance [DeltaGeneratedSpace X] : SequentialSpace X := by
59+ rw [← IsGeneratedBy.generatedBy_eq (X := fun n ↦ Fin n → ℝ) (Y := X)]
60+ exact SequentialSpace.iSup (fun n ↦ SequentialSpace.iSup
61+ (fun f ↦ SequentialSpace.coinduced _))
62+
63+ end DeltaGeneratedSpace
64+
3565/-- The topology coinduced by all maps from ℝⁿ into a space. -/
36- @[implicit_reducible]
66+ @ [implicit_reducible, deprecated "Use TopologicalSpace.generatedBy" (since := "2026-04-23" ) ]
3767def TopologicalSpace.deltaGenerated (X : Type *) [TopologicalSpace X] : TopologicalSpace X :=
3868 ⨆ f : (n : ℕ) × C(((Fin n) → ℝ), X), coinduced f.2 inferInstance
3969
40- /-- The delta-generated topology is also coinduced by a single map out of a sigma type. -/
41- lemma deltaGenerated_eq_coinduced : deltaGenerated X = coinduced
42- (fun x : (f : (n : ℕ) × C(Fin n → ℝ, X)) × (Fin f.1 → ℝ) ↦ x.1 .2 x.2 ) inferInstance := by
43- rw [deltaGenerated, instTopologicalSpaceSigma, coinduced_iSup]; rfl
44-
45- /-- The delta-generated topology is at least as fine as the original one. -/
46- lemma deltaGenerated_le : deltaGenerated X ≤ tX :=
47- iSup_le_iff.mpr fun f ↦ f.2 .continuous.coinduced_le
48-
49- /-- A set is open in `deltaGenerated X` iff all its preimages under continuous functions ℝⁿ → X are
50- open. -/
51- lemma isOpen_deltaGenerated_iff {u : Set X} :
52- IsOpen[deltaGenerated X] u ↔ ∀ n (p : C(Fin n → ℝ, X)), IsOpen (p ⁻¹' u) := by
53- simp_rw +instances [deltaGenerated, isOpen_iSup_iff, isOpen_coinduced, Sigma.forall]
54-
55- /-- A map from ℝⁿ to X is continuous iff it is continuous regarding the
56- delta-generated topology on X. Outside of this file, use the more general
57- `continuous_to_deltaGenerated` instead. -/
58- private lemma continuous_euclidean_to_deltaGenerated {n : ℕ} {f : (Fin n → ℝ) → X} :
59- Continuous[_, deltaGenerated X] f ↔ Continuous f := by
60- simp_rw [continuous_iff_coinduced_le]
61- refine ⟨fun h ↦ h.trans deltaGenerated_le, fun h ↦ ?_⟩
62- simp_rw [deltaGenerated]
63- exact le_iSup_of_le (i := ⟨n, f, continuous_iff_coinduced_le.mpr h⟩) le_rfl
64-
65- /-- `deltaGenerated` is idempotent as a function `TopologicalSpace X → TopologicalSpace X`. -/
66- lemma deltaGenerated_deltaGenerated_eq :
67- @deltaGenerated X (deltaGenerated X) = deltaGenerated X := by
68- ext u; simp_rw [isOpen_deltaGenerated_iff]; refine forall_congr' fun n ↦ ?_
69- -- somewhat awkward because `ContinuousMap` doesn't play well with multiple topologies.
70- refine ⟨fun h p ↦ h <| @ContinuousMap.mk _ _ _ (_) p ?_, fun h p ↦ h ⟨p, ?_⟩⟩
71- · exact continuous_euclidean_to_deltaGenerated.mpr p.2
72- · exact continuous_euclidean_to_deltaGenerated.mp <| @ContinuousMap.continuous_toFun _ _ _ (_) p
73-
74- /-- A space is delta-generated if its topology is equal to the delta-generated topology, i.e.
75- coinduced by all continuous maps ℝⁿ → X. Since the delta-generated topology is always finer
76- than the original one, it suffices to show that it is also coarser. -/
77- class DeltaGeneratedSpace (X : Type *) [t : TopologicalSpace X] : Prop where
78- le_deltaGenerated : t ≤ deltaGenerated X
79-
80- lemma eq_deltaGenerated [DeltaGeneratedSpace X] : tX = deltaGenerated X :=
81- eq_of_le_of_ge DeltaGeneratedSpace.le_deltaGenerated deltaGenerated_le
82-
83- /-- A subset of a delta-generated space is open iff its preimage is open for every
84- continuous map from ℝⁿ to X. -/
85- lemma DeltaGeneratedSpace.isOpen_iff [DeltaGeneratedSpace X] {u : Set X} :
86- IsOpen u ↔ ∀ (n : ℕ) (p : ContinuousMap ((Fin n) → ℝ) X), IsOpen (p ⁻¹' u) := by
87- nth_rewrite 1 [eq_deltaGenerated (X := X)]; exact isOpen_deltaGenerated_iff
88-
89- /-- A map out of a delta-generated space is continuous iff it preserves continuity of maps
90- from ℝⁿ into X. -/
91- lemma DeltaGeneratedSpace.continuous_iff [DeltaGeneratedSpace X] {f : X → Y} :
92- Continuous f ↔ ∀ (n : ℕ) (p : C(((Fin n) → ℝ), X)), Continuous (f ∘ p) := by
93- simp_rw [continuous_iff_coinduced_le]
94- nth_rewrite 1 [eq_deltaGenerated (X := X), deltaGenerated]
95- simp [coinduced_compose, Sigma.forall]
96-
97- /-- A map out of a delta-generated space is continuous iff it is continuous with respect
98- to the delta-generated topology on the codomain. -/
99- lemma continuous_to_deltaGenerated [DeltaGeneratedSpace X] {f : X → Y} :
100- Continuous[_, deltaGenerated Y] f ↔ Continuous f := by
101- simp_rw [DeltaGeneratedSpace.continuous_iff, continuous_euclidean_to_deltaGenerated]
102-
103- /-- The delta-generated topology on `X` does in fact turn `X` into a delta-generated space. -/
104- lemma deltaGeneratedSpace_deltaGenerated {X : Type *} {t : TopologicalSpace X} :
105- @DeltaGeneratedSpace X (@deltaGenerated X t) := by
106- let _ := @deltaGenerated X t; constructor; rw [@deltaGenerated_deltaGenerated_eq X t]
107-
108- lemma deltaGenerated_mono {X : Type *} {t₁ t₂ : TopologicalSpace X} (h : t₁ ≤ t₂) :
109- @deltaGenerated X t₁ ≤ @deltaGenerated X t₂ := by
110- rw [← continuous_id_iff_le, @continuous_to_deltaGenerated _ _
111- (@deltaGenerated X t₁) t₂ deltaGeneratedSpace_deltaGenerated id]
112- exact continuous_id_iff_le.2 <| (@deltaGenerated_le X t₁).trans h
70+ @ [deprecated (since := "2026-04-23" )]
71+ alias deltaGenerated_eq_coinduced := generatedBy_eq_coinduced
11372
114- namespace DeltaGeneratedSpace
73+ @ [ deprecated (since := "2026-04-23" )] alias deltaGenerated_le := generatedBy_le
11574
116- /-- Type synonym to be equipped with the delta-generated topology. -/
117- def of (X : Type *) := X
75+ @ [ deprecated (since := "2026-04-23" )]
76+ alias isOpen_deltaGenerated_iff := WithGeneratedByTopology.isOpen_iff
11877
119- instance : TopologicalSpace (of X) := deltaGenerated X
78+ @ [deprecated (since := "2026-04-23" )]
79+ alias deltaGenerated_deltaGenerated_eq := generatedBy_generatedBy
12080
121- instance : DeltaGeneratedSpace (of X) :=
122- deltaGeneratedSpace_deltaGenerated
81+ @ [ deprecated (since := "2026-04-23" )]
82+ alias eq_deltaGenerated := IsGeneratedBy.generatedBy_eq
12383
124- /-- The natural map from `DeltaGeneratedSpace.of X` to `X`. -/
125- def counit : (of X) → X := id
84+ @ [ deprecated (since := "2026-04-23" )]
85+ alias DeltaGeneratedSpace.isOpen_iff := IsGeneratedBy.isOpen_iff
12686
127- lemma continuous_counit : Continuous (counit : _ → X) := by
128- rw [continuous_iff_coinduced_le]; exact deltaGenerated_le
87+ @ [ deprecated (since := "2026-04-23" )]
88+ alias DeltaGeneratedSpace.continuous_iff := IsGeneratedBy.continuous_iff
12989
130- /-- Delta-generated spaces are locally path-connected. -/
131- instance [DeltaGeneratedSpace X] : LocPathConnectedSpace X := by
132- rw [eq_deltaGenerated (X := X), deltaGenerated_eq_coinduced]
133- exact LocPathConnectedSpace.coinduced _
90+ @ [deprecated (since := "2026-04-23" )]
91+ alias continuous_to_deltaGenerated := WithGeneratedByTopology.continuous_equiv
13492
135- /-- Delta-generated spaces are sequential. -/
136- instance [DeltaGeneratedSpace X] : SequentialSpace X := by
137- rw [eq_deltaGenerated (X := X)]
138- exact SequentialSpace.iSup fun p ↦ SequentialSpace.coinduced p.2
93+ @ [deprecated (since := "2026-04-23" )]
94+ alias deltaGeneratedSpace_deltaGenerated := IsGeneratedBy.instWithGeneratedByTopology
13995
140- end DeltaGeneratedSpace
96+ @ [deprecated (since := "2026-04-23" )]
97+ alias deltaGenerated_mono := generatedBy_mono
98+
99+ @ [deprecated (since := "2026-04-23" )]
100+ alias DeltaGeneratedSpace.counit := WithGeneratedByTopology.equiv
101+
102+ @ [deprecated (since := "2026-04-23" )]
103+ alias DeltaGeneratedSpace.continuous_counit := WithGeneratedByTopology.continuous_equiv
104+
105+ @ [deprecated (since := "2026-04-23" )]
106+ alias DeltaGeneratedSpace.coinduced := IsGeneratedBy.coinduced
107+
108+ @ [deprecated (since := "2026-04-23" )]
109+ alias DeltaGeneratedSpace.iSup := IsGeneratedBy.iSup
110+
111+ @ [deprecated (since := "2026-04-23" )]
112+ alias DeltaGeneratedSpace.sup := IsGeneratedBy.sup
113+
114+ @ [deprecated (since := "2026-04-23" )]
115+ alias Topology.IsQuotientMap.deltaGeneratedSpace := Topology.IsQuotientMap.isGeneratedBy
116+
117+ @ [deprecated (since := "2026-04-23" )]
118+ alias Quot.deltaGeneratedSpace := Quot.isGeneratedBy
119+
120+ @ [deprecated (since := "2026-04-23" )]
121+ alias Quotient.deltaGeneratedSpace := Quotient.isGeneratedBy
122+
123+ @ [deprecated (since := "2026-04-23" )]
124+ alias Sum.deltaGeneratedSpace := Sum.isGeneratedBy
141125
142- omit tY in
143- /-- Any topology coinduced by a delta-generated topology is delta-generated. -/
144- lemma DeltaGeneratedSpace.coinduced [DeltaGeneratedSpace X] (f : X → Y) :
145- @DeltaGeneratedSpace Y (tX.coinduced f) :=
146- let _ := tX.coinduced f
147- ⟨(continuous_to_deltaGenerated.2 continuous_coinduced_rng).coinduced_le⟩
148-
149- /-- Suprema of delta-generated topologies are delta-generated. -/
150- protected lemma DeltaGeneratedSpace.iSup {X : Type *} {ι : Sort *} {t : ι → TopologicalSpace X}
151- (h : ∀ i, @DeltaGeneratedSpace X (t i)) : @DeltaGeneratedSpace X (⨆ i, t i) :=
152- let _ := ⨆ i, t i
153- ⟨iSup_le_iff.2 fun i ↦ (h i).le_deltaGenerated.trans <| deltaGenerated_mono <| le_iSup t i⟩
154-
155- /-- Suprema of delta-generated topologies are delta-generated. -/
156- protected lemma DeltaGeneratedSpace.sup {X : Type *} {t₁ t₂ : TopologicalSpace X}
157- (h₁ : @DeltaGeneratedSpace X t₁) (h₂ : @DeltaGeneratedSpace X t₂) :
158- @DeltaGeneratedSpace X (t₁ ⊔ t₂) := by
159- rw [sup_eq_iSup]
160- exact .iSup <| Bool.forall_bool.2 ⟨h₂, h₁⟩
161-
162- /-- Quotients of delta-generated spaces are delta-generated. -/
163- lemma Topology.IsQuotientMap.deltaGeneratedSpace [DeltaGeneratedSpace X]
164- {f : X → Y} (h : IsQuotientMap f) : DeltaGeneratedSpace Y :=
165- h.isCoinducing.eq_coinduced ▸ DeltaGeneratedSpace.coinduced f
166-
167- /-- Quotients of delta-generated spaces are delta-generated. -/
168- instance Quot.deltaGeneratedSpace [DeltaGeneratedSpace X] {r : X → X → Prop } :
169- DeltaGeneratedSpace (Quot r) :=
170- isQuotientMap_quot_mk.deltaGeneratedSpace
171-
172- /-- Quotients of delta-generated spaces are delta-generated. -/
173- instance Quotient.deltaGeneratedSpace [DeltaGeneratedSpace X] {s : Setoid X} :
174- DeltaGeneratedSpace (Quotient s) :=
175- isQuotientMap_quotient_mk'.deltaGeneratedSpace
176-
177- /-- Disjoint unions of delta-generated spaces are delta-generated. -/
178- instance Sum.deltaGeneratedSpace [DeltaGeneratedSpace X] [DeltaGeneratedSpace Y] :
179- DeltaGeneratedSpace (X ⊕ Y) :=
180- DeltaGeneratedSpace.sup (.coinduced Sum.inl) (.coinduced Sum.inr)
181-
182- /-- Disjoint unions of delta-generated spaces are delta-generated. -/
183- instance Sigma.deltaGeneratedSpace {ι : Type *} {X : ι → Type *} [∀ i, TopologicalSpace (X i)]
184- [∀ i, DeltaGeneratedSpace (X i)] : DeltaGeneratedSpace (Σ i, X i) :=
185- .iSup fun _ ↦ .coinduced _
126+ @ [deprecated (since := "2026-04-23" )]
127+ alias Sigma.deltaGeneratedSpace := Sigma.isGeneratedBy
0 commit comments