Skip to content

Commit ef4c803

Browse files
committed
Merge branch 'main' of github.com:ImperialCollegeLondon/FLT
2 parents 7ac6d34 + ac37444 commit ef4c803

File tree

1 file changed

+139
-103
lines changed

1 file changed

+139
-103
lines changed

FLT/HIMExperiments/ContinuousSMul_topology.lean

+139-103
Original file line numberDiff line numberDiff line change
@@ -9,92 +9,121 @@ import Mathlib.Algebra.Group.Action.Defs
99
-- todo : A -> R, M -> A
1010
# An "action topology" for monoid actions.
1111
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.
4381
4482
-/
4583
section basics
4684

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 :=
4988
sInf {t | @ContinuousSMul R A _ _ t}
5089

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
5691
isActionTopology' : τA = actionTopology R A
5792

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] :
6094
τA = actionTopology R A :=
6195
IsActionTopology.isActionTopology' (R := R) (A := A)
6296

63-
variable (R A : Type*) [SMul R A] [TopologicalSpace R] in
6497
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]
6699

67-
lemma isActionTopology_continuousSMul (R A : Type*) [SMul R A]
100+
instance isActionTopology_continuousSMul (R A : Type*) [SMul R A]
68101
[TopologicalSpace R] [τA : TopologicalSpace A] [h : IsActionTopology R A] :
69102
ContinuousSMul R A where
70103
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
76106

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›
82110

83111
end basics
84112

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⟩
92121

93-
end scratch
122+
namespace ActionTopology
94123

95124
section one
96125

97-
lemma id' (R : Type*) [Monoid R] [τ : TopologicalSpace R] [ContinuousMul R] :
126+
protected lemma id (R : Type*) [Monoid R] [τ : TopologicalSpace R] [ContinuousMul R] :
98127
IsActionTopology R R := by
99128
constructor
100129
unfold actionTopology
@@ -123,16 +152,47 @@ lemma id' (R : Type*) [Monoid R] [τ : TopologicalSpace R] [ContinuousMul R] :
123152
cases foo with
124153
| mk continuous_mul => exact continuous_mul
125154

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-
134155
end one
135156

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+
136196
section prod
137197

138198
variable {R : Type} [τR : TopologicalSpace R]
@@ -293,42 +353,18 @@ lemma prod [MulOneClass.{0} R] : IsActionTopology.{0} R (M × N) := by
293353

294354
end prod
295355

296-
section function
356+
section Pi
297357

298358
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]
301359

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+
332368

333369
#check coinduced_iSup
334370
#check induced_iInf

0 commit comments

Comments
 (0)