@@ -9,92 +9,121 @@ import Mathlib.Algebra.Group.Action.Defs
9
9
-- todo : A -> R, M -> A
10
10
# An "action topology" for monoid actions.
11
11
12
- Let `A` denote a topological monoid, and say `A` acts on the type `M`.
13
- There is then a smallest (in the sense of Lean's `≤`) topology on `M`
14
- making the induced action map `A × M → M` continuous.
15
- We call this topology on `M` the "action topology". It is some kind
16
- of "pushforward topology" on `M` coming from the topology on `A` and
17
- the action.
18
-
19
- ## Constructions on modules.
20
-
21
- This action topology (or `A`-action topology, if you want to specify
22
- the underlying monoid)
23
- may or may not have the following cool properties:
24
-
25
- 1) Any `A`-linear map `φ : M →[A] N` is continuous.
26
- 2) The `A`-module topology on `Unit` is the topology already present on `Unit`.
27
- 3) The `A`-module topology on `A` acting on itself via `*`, is `A`s original topology.
28
- 4) The `A`-module topology on a product `M × N` of two modules-with-action-topology is
29
- the product topology.
30
- 5) The `A`-module topology on a power `M^n`, that is, `n → M` with `n : Type`, is the
31
- (now possibly infinite) product topology.
32
- 5.5) sigma types
33
-
34
- 6) Now say `A` is commutative. Then the tensor product of two `A`-modules is an `A`-module,
35
- and so we can ask if the canonical bilinear map from `M × N` (with the module or product topology?
36
- probably they're the same) to `M ⊗[A] N` is continuous.
37
-
38
- 7) Commutativity of `A` also gives spaces of `A`-linear maps the structure of `A`-modules,
39
- so we can ask for example whether the function application map `M × (M →ₗ[A] N) → N` is continuous.
40
-
41
- 8) We could also ask whether the evaluation map, from `M →ₗ[A] N` to the power space `N^M` of bare
42
- functions from `M` (now considered only as an index set, so with no topology) to `N` is continuous.
12
+ If `R` has a topology and acts on the type `A`, then `A` inherits a topology
13
+ called the action topology. It's the `≤`-smallest topology (i.e. the one with
14
+ the most open sets) making the action `R × A → A` continuous. We call this
15
+ topology the action topology.
16
+
17
+ In many cases this topology is the one you expect. For example if `R` is a topological field
18
+ and `A` is a finite-dimensional real vector space over `R` then picking a basis gives `A` a
19
+ product topology, and one can check that this is the action topology. Hence the product
20
+ topology on `A` is independent of choice of basis. **TODO** I haven't actually proved this.
21
+
22
+ ## Overview
23
+
24
+ Let `R` denote a topological space, let `A` be a type (without
25
+ a topology, for now) and say `R` acts on `A`,
26
+ i.e., we're given `• : R × A → A`. In applications `R` might
27
+ be a topological monoid and `A` an abelian group with an action of `R`.
28
+ Or `R` might be a topological ring, for example the reals, and `A` an `R`-module
29
+ or an `R`-algebra.
30
+
31
+ There are now at least two ways of inducing a topology on `A`
32
+ (in the module over a ring situation, at least three ways).
33
+ One could demand that `(· • a)` is continuous for all `a : A`, for example,
34
+ and put the universal topology for this property on `A`.
35
+ In the module case one could demand that all `R`-linear maps `A →ₗ[R] R`
36
+ are continuous. But the definition here is one proposed by Yury
37
+ Kudryashov. He pointed out that if `τᵢ : TopologicalSpace A` all make
38
+ the action maps `R × A → A` continuous, then the `Inf` of the `τᵢ`
39
+ also has this proprty. This means that there is a smallest (in the `≤` sense,
40
+ i.e. the most open sets) topology on `A` such that `• : R × A → A` is
41
+ continous. We call topology the *action topology* . It is some kind
42
+ of "pushforward topology" on `A` coming from the `R`-action, but
43
+ it is not a pushforward in the `f_*` sense of the word because
44
+ there is no fixed `f : R → A`.
45
+
46
+ ## Basic properties
47
+
48
+ We fix a type `R` with a topology, and we let it act on things. We say an *R* -type
49
+ is a type `A` equipped with `SMul R A`.
50
+
51
+ 0) (Unit) `Unit` is an `R`-type with the trivial action, action topology is the given topology on `Unit`
52
+ (because there is only one topology on `Unit`)
53
+
54
+ 1) (Id) If `R` is a topological monoid (so `*` is continuous) then `R` becomes an `R`-type via `*`,
55
+ and the action topology agrees with `R`'s original topology.
56
+
57
+ 2) (Functions) If `A` and `B` are `R`-types with the action topologies, then any `R`-equivariant map
58
+ `φ : A →[R] B` is automatically continuous.
59
+
60
+ 3) (Prod) The action topology on a product `A × B` of `R`-types is the product of the action
61
+ topologies **NOT YET PROVED, MAY NOT BE TRUE**
62
+
63
+ 4) (Pi): The action topology on an indexed product of `R`-types is the product topology
64
+ **NOT YET PROVED, MAY NOT BE TRUE**
65
+
66
+ 5) (Sigma) The action topology on `Σ i, A i` is whatever topology mathlib has on this
67
+ **NOT YET PROVED, MAY NOT BE TRUE**
68
+
69
+ Now say `R` is a commutative topological ring. **NOTHING BELOW HERE IS PROVED YET**
70
+
71
+ 6) Say `A`, `B` are `R`-modules with their
72
+ action topology. Then the tensor product `A ⊗[R] B` is also an `R`-module.
73
+ and so we can ask if the canonical bilinear map from `A × B` (with the action or product topology?
74
+ probably they're the same) to `A ⊗[R] B` is continuous.
75
+
76
+ 7) Commutativity of `R` also gives spaces of `R`-linear maps the structure of `R`-modules,
77
+ so we can ask for example whether the function application map `A × (A →ₗ[R] B) → B` is continuous.
78
+
79
+ 8) We could also ask whether the evaluation map, from `A →ₗ[R] B` to the power space `B^A` of bare
80
+ functions from `A` (now considered only as an index set, so with no topology) to `B` is continuous.
43
81
44
82
-/
45
83
section basics
46
84
47
- abbrev actionTopology (R A : Type *) [SMul R A] [TopologicalSpace R] :
48
- TopologicalSpace A :=
85
+ variable (R A : Type *) [SMul R A] [TopologicalSpace R]
86
+
87
+ abbrev actionTopology : TopologicalSpace A :=
49
88
sInf {t | @ContinuousSMul R A _ _ t}
50
89
51
- -- I think R and A is good notation. R is a module. We could
52
- -- have called it M; the problem with M is htat we could have
53
- -- called A M as well. Here we completely avoid the M ambiguity.
54
- class IsActionTopology (R A : Type *) [SMul R A]
55
- [TopologicalSpace R] [τA : TopologicalSpace A] : Prop where
90
+ class IsActionTopology [τA : TopologicalSpace A] : Prop where
56
91
isActionTopology' : τA = actionTopology R A
57
92
58
- lemma isActionTopology (R A : Type *) [SMul R A]
59
- [TopologicalSpace R] [τA : TopologicalSpace A] [IsActionTopology R A] :
93
+ lemma isActionTopology [τA : TopologicalSpace A] [IsActionTopology R A] :
60
94
τA = actionTopology R A :=
61
95
IsActionTopology.isActionTopology' (R := R) (A := A)
62
96
63
- variable (R A : Type *) [SMul R A] [TopologicalSpace R] in
64
97
lemma ActionTopology.continuousSMul : @ContinuousSMul R A _ _ (actionTopology R A) :=
65
- continuousSMul_sInf <| by aesop
98
+ continuousSMul_sInf <| fun _ _ ↦ by simp_all only [Set.mem_setOf_eq]
66
99
67
- lemma isActionTopology_continuousSMul (R A : Type *) [SMul R A]
100
+ instance isActionTopology_continuousSMul (R A : Type *) [SMul R A]
68
101
[TopologicalSpace R] [τA : TopologicalSpace A] [h : IsActionTopology R A] :
69
102
ContinuousSMul R A where
70
103
continuous_smul := by
71
- obtain ⟨h⟩ := h
72
- let _τA2 := τA
73
- subst h
74
- exact (ActionTopology.continuousSMul R A).1
75
-
104
+ obtain ⟨h⟩ := ActionTopology.continuousSMul R A
105
+ simpa [isActionTopology R A] using h
76
106
77
- variable (R A : Type *) [SMul R A] [TopologicalSpace R]
78
- [TopologicalSpace A] [IsActionTopology R A] in
79
- lemma continuousSMul_of_isActionTopology : ContinuousSMul R A := by
80
- rw [isActionTopology R A]
81
- exact continuousSMul_sInf <| by aesop
107
+ lemma actionTopology_le (R A : Type *) [SMul R A]
108
+ [TopologicalSpace R] [τA : TopologicalSpace A] [ContinuousSMul R A] :
109
+ actionTopology R A ≤ τA := sInf_le ‹ContinuousSMul R A›
82
110
83
111
end basics
84
112
85
- namespace ActionTopology
86
- section scratch
87
-
88
- -- example (L : Type*) [CompleteLattice L] (ι : Type*) (f : ι → L) (t : L) :
89
- -- t = ⨆ i, f i ↔ (∀ i, t ≤ f i) ∧ (∀ j, (∀ i, j ≤ f i) → j ≤ t) := by
90
- -- --rw [ iSup_eq ]
91
- -- sorry
113
+ -- this should be elsewhere
114
+ lemma TopologicalSpace.induced_id (X : Type *) : TopologicalSpace.induced (id : X → X) = id := by
115
+ ext τ S
116
+ constructor
117
+ · rintro ⟨T,hT,rfl⟩
118
+ exact hT
119
+ · rintro hS
120
+ exact ⟨S, hS, rfl⟩
92
121
93
- end scratch
122
+ namespace ActionTopology
94
123
95
124
section one
96
125
97
- lemma id' (R : Type *) [Monoid R] [τ : TopologicalSpace R] [ContinuousMul R] :
126
+ protected lemma id (R : Type *) [Monoid R] [τ : TopologicalSpace R] [ContinuousMul R] :
98
127
IsActionTopology R R := by
99
128
constructor
100
129
unfold actionTopology
@@ -123,16 +152,47 @@ lemma id' (R : Type*) [Monoid R] [τ : TopologicalSpace R] [ContinuousMul R] :
123
152
cases foo with
124
153
| mk continuous_mul => exact continuous_mul
125
154
126
- lemma TopologicalSpace.induced_id (X : Type *) : TopologicalSpace.induced (id : X → X) = id := by
127
- ext τ S
128
- constructor
129
- · rintro ⟨T,hT,rfl⟩
130
- exact hT
131
- · rintro hS
132
- exact ⟨S, hS, rfl⟩
133
-
134
155
end one
135
156
157
+ section function
158
+
159
+ variable {R : Type } [τR : TopologicalSpace R]
160
+ variable {A : Type } [SMul R A] [aA : TopologicalSpace A] [IsActionTopology R A]
161
+ variable {B : Type } [SMul R B] [aB : TopologicalSpace B] [IsActionTopology R B]
162
+
163
+ /-- Every `A`-linear map between two `A`-modules with the canonical topology is continuous. -/
164
+ lemma continuous_of_mulActionHom (φ : A →[R] B) : Continuous φ := by
165
+ -- Let's turn this question into an inequality question about coinduced topologies
166
+ -- Now let's use the fact that τM and τN are action topologies (hence also coinduced)
167
+ rw [isActionTopology R A, isActionTopology R B]
168
+ unfold actionTopology
169
+ rw [continuous_iff_le_induced]
170
+ nth_rw 2 [sInf_eq_iInf]
171
+ rw [induced_iInf] --induced_sInf missing?
172
+ apply le_iInf
173
+ simp only [Set.mem_setOf_eq, induced_iInf, le_iInf_iff]
174
+ intro σN hσ
175
+ apply sInf_le
176
+ refine @ContinuousSMul.mk R A _ τR (TopologicalSpace.induced (⇑φ) σN) ?_
177
+ rw [continuous_iff_le_induced]
178
+ rw [induced_compose]
179
+ rw [← continuous_iff_le_induced]
180
+ rw [show φ ∘ (fun (p : R × A) ↦ p.1 • p.2 ) = fun rm ↦ rm.1 • φ (rm.2 ) by
181
+ ext rm
182
+ cases rm
183
+ simp]
184
+ obtain ⟨hσ'⟩ := hσ
185
+ rw [continuous_iff_le_induced] at *
186
+ have := induced_mono (g := fun (rm : R × A) ↦ (rm.1 , φ (rm.2 ))) hσ'
187
+ rw [induced_compose] at this
188
+ refine le_trans ?_ this
189
+ rw [← continuous_iff_le_induced]
190
+ refine @Continuous.prod_map R B R A τR σN τR (TopologicalSpace.induced (φ : A → B) σN) id φ ?_ ?_
191
+ · fun_prop
192
+ · fun_prop
193
+
194
+ end function
195
+
136
196
section prod
137
197
138
198
variable {R : Type } [τR : TopologicalSpace R]
@@ -293,42 +353,18 @@ lemma prod [MulOneClass.{0} R] : IsActionTopology.{0} R (M × N) := by
293
353
294
354
end prod
295
355
296
- section function
356
+ section Pi
297
357
298
358
variable {R : Type } [τR : TopologicalSpace R]
299
- variable {M : Type } [SMul R M] [aM : TopologicalSpace M] [iM : IsActionTopology R M]
300
- variable {N : Type } [SMul R N] [aN : TopologicalSpace N] [iN : IsActionTopology R N]
301
359
302
- /-- Every `A`-linear map between two `A`-modules with the canonical topology is continuous. -/
303
- lemma continuous_of_mulActionHom (φ : M →[R] N) : Continuous φ := by
304
- -- Let's turn this question into an inequality question about coinduced topologies
305
- -- Now let's use the fact that τM and τN are action topologies (hence also coinduced)
306
- rw [isActionTopology R M, isActionTopology R N]
307
- unfold actionTopology
308
- rw [continuous_iff_le_induced]
309
- nth_rw 2 [sInf_eq_iInf]
310
- rw [induced_iInf] --induced_sInf missing?
311
- apply le_iInf
312
- simp only [Set.mem_setOf_eq, induced_iInf, le_iInf_iff]
313
- intro σN hσ
314
- apply sInf_le
315
- refine @ContinuousSMul.mk R M _ τR (TopologicalSpace.induced (⇑φ) σN) ?_
316
- rw [continuous_iff_le_induced]
317
- rw [induced_compose]
318
- rw [← continuous_iff_le_induced]
319
- rw [show φ ∘ (fun (p : R × M) ↦ p.1 • p.2 ) = fun rm ↦ rm.1 • φ (rm.2 ) by
320
- ext rm
321
- cases rm
322
- simp]
323
- obtain ⟨hσ'⟩ := hσ
324
- rw [continuous_iff_le_induced] at *
325
- have := induced_mono (g := fun (rm : R × M) ↦ (rm.1 , φ (rm.2 ))) hσ'
326
- rw [induced_compose] at this
327
- refine le_trans ?_ this
328
- rw [← continuous_iff_le_induced]
329
- refine @Continuous.prod_map R N R M τR σN τR (TopologicalSpace.induced (φ : M → N) σN) id φ ?_ ?_
330
- · fun_prop
331
- · fun_prop
360
+ variable {ι : Type } {A : ι → Type } [∀ i, SMul R (A i)] [∀ i, TopologicalSpace (A i)]
361
+ [∀ i, IsActionTopology R (A i)]
362
+
363
+ lemma Pi : IsActionTopology R (∀ i, A i) := by
364
+ sorry
365
+
366
+ end Pi
367
+
332
368
333
369
#check coinduced_iSup
334
370
#check induced_iInf
0 commit comments