Skip to content

Commit 3ab0bb5

Browse files
committed
tidy up the action topology file
1 parent aa6352e commit 3ab0bb5

File tree

1 file changed

+90
-67
lines changed

1 file changed

+90
-67
lines changed
+90-67
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Mathlib.RingTheory.TensorProduct.Basic -- we need tensor products of rings at some point
22
import Mathlib.Topology.Algebra.Module.Basic -- and we need topological rings and modules
3-
import Mathlib.Tactic
3+
import Mathlib
44

55
/-
66
@@ -36,100 +36,123 @@ functions from `M` (now considered only as an index set, so with no topology) to
3636
-/
3737

3838
section noncommutative
39-
-- Let A be a ring, with a compatible topology.
40-
variable (A : Type*) [Ring A] [TopologicalSpace A] [TopologicalRing A]
4139

40+
class IsActionTopology (R M : Type*) [SMul R M]
41+
[τR : TopologicalSpace R] [τM : TopologicalSpace M] : Prop where
42+
isActionTopology' : τM = ⨆ m, .coinduced (· • m) τR
4243

43-
/-- The "right topology" on a module `M` over a topological ring `A`. It's defined as
44-
the finest topology on `M` which makes every `A`-linear map `A → M` continuous. It's called
45-
the "right topology" because `M` goes on the right. -/
46-
abbrev Module.rtopology (M : Type*) [AddCommGroup M] [Module A M]: TopologicalSpace M :=
47-
-- Topology defined as LUB of pushforward.
48-
⨆ (f : A →ₗ[A] M), TopologicalSpace.coinduced f inferInstance
44+
-- just to make R and M explicit
45+
def isActionTopology (R M : Type*) [SMul R M]
46+
[TopologicalSpace R] [TopologicalSpace M] [IsActionTopology R M ]:=
47+
IsActionTopology.isActionTopology' (R := R) (M := M)
48+
49+
def ActionTopology (R M : Type*) [SMul R M] [TopologicalSpace R] :
50+
TopologicalSpace M := ⨆ m, .coinduced (· • m) (inferInstance : TopologicalSpace R)
51+
52+
namespace ActionTopology
53+
namespace type_stuff
54+
55+
variable {R : Type} [τR : TopologicalSpace R]
56+
57+
-- let `M` and `N` have an action of `R`
58+
variable {M : Type*} [SMul R M] [τM : TopologicalSpace M] [IsActionTopology R M]
59+
variable {N : Type*} [SMul R N] [τN : TopologicalSpace N] [IsActionTopology R N]
60+
61+
example (L) [CompleteLattice L] (f : M → N) (g : N → L) : ⨆ m, g (f m) ≤ ⨆ n, g n := by
62+
exact iSup_comp_le g f
63+
64+
theorem map_smul_pointfree (f : M →[R] N) (r : R) : (fun m ↦ f (r • m)) = fun m ↦ r • f m :=
65+
by ext; apply map_smul
4966

50-
-- let `M` and `N` be `A`-modules
51-
variable (M : Type*) [AddCommGroup M] [Module A M]
52-
variable {N : Type*} [AddCommGroup N] [Module A N]
5367

5468
/-- Every `A`-linear map between two `A`-modules with the canonical topology is continuous. -/
55-
lemma Module.continuous_linear (e : M →ₗ[A] N) :
56-
@Continuous M N (Module.rtopology A M) (Module.rtopology A N) e := by
57-
sorry -- maybe some appropriate analogue of Hannah/Lugwig's proof will work?
69+
lemma continuous_of_mulActionHom (e : M →[R] N) : Continuous e := by
70+
-- Let's turn this question into an inequality question about coinduced topologies
71+
rw [continuous_iff_coinduced_le]
72+
-- Now let's use the fact that τM and τN are action topologies (hence also coinduced)
73+
rw [isActionTopology R M, isActionTopology R N]
74+
-- There's an already-proven lemma in mathlib that says that coinducing an `iSup` is the
75+
-- same thing as taking the `iSup`s of the coinduced topologies
76+
-- composite of the coinduced topologies is just topology coinduced by the composite
77+
rw [coinduced_iSup]
78+
simp_rw [coinduced_compose]
79+
-- restate the current state of the question with better variables
80+
change ⨆ m, TopologicalSpace.coinduced (fun r ↦ e (r • m)) τR ≤
81+
⨆ n, TopologicalSpace.coinduced (fun x ↦ x • n) τR
82+
-- use the fact that `e (r • m) = r • (e m)`
83+
simp_rw [map_smul]
84+
-- and now the goal follows from the fact that the sup over a small set is ≤ the sup
85+
-- over a big set
86+
apply iSup_comp_le (_ : N → TopologicalSpace N)
5887

5988
-- A formal corollary should be that
60-
def Module.homeomorphism_equiv (e : M ≃ₗ[A] N) :
61-
-- lean needs to be told the topologies explicitly in the statement
62-
let τM := Module.rtopology A M
63-
let τN := Module.rtopology A N
64-
M ≃ₜ N :=
65-
-- And also at the point where lean puts the structure together, unfortunately
66-
let τM := Module.rtopology A M
67-
let τN := Module.rtopology A N
68-
-- all the sorries should be formal.
69-
{ toFun := e
70-
invFun := e.symm
71-
left_inv := sorry
72-
right_inv := sorry
89+
def homeomorph_of_mulActionEquiv (φ : M →[R] N) (ψ : N →[R] M) (h1 : ∀ m, ψ (φ m) = m)
90+
(h2 : ∀ n, φ (ψ n) = n) : M ≃ₜ N :=
91+
{ toFun := φ
92+
invFun := ψ
93+
left_inv := h1
94+
right_inv := h2
7395
continuous_toFun := sorry
7496
continuous_invFun := sorry
7597
}
7698

99+
-- this is definitely true
100+
lemma unit : (inferInstance : TopologicalSpace Unit) = ActionTopology R Unit := by
101+
sorry
77102

78-
-- claim: topology on the 1-point set is the canonical one
79-
example : (inferInstance : TopologicalSpace Unit) = Module.rtopology A Unit := by
103+
-- is this true?
104+
lemma prod : (inferInstance : TopologicalSpace (M × N)) = ActionTopology R (M × N) := by
80105
sorry
81106

82-
-- Anything from this point on *might* need commutative.
83-
-- Just move it to the commutative section and prove it there.
107+
-- is this true? If not, is it true if ι is finite?
108+
lemma pi {ι : Type*} {M : ι → Type*} [∀ i, SMul R (M i)] [τM : ∀ i, TopologicalSpace (M i)]
109+
[∀ i, IsActionTopology R (M i)] :
110+
(inferInstance : TopologicalSpace (∀ i, M i)) = ActionTopology R (∀ i, M i) := by
111+
sorry
84112

85-
-- Claim: topology on A doesn't change
86-
example : (inferInstance : TopologicalSpace A) = Module.rtopology A A := by
113+
-- is this true? If not, is it true if ι is finite?
114+
lemma sigma {ι : Type*} {M : ι → Type*} [∀ i, SMul R (M i)] [τM : ∀ i, TopologicalSpace (M i)]
115+
[∀ i, IsActionTopology R (M i)] :
116+
(inferInstance : TopologicalSpace (Σ i, M i)) = ActionTopology R (Σ i, M i) := by
87117
sorry
88118

89-
example :
90-
let _τM : TopologicalSpace M := Module.rtopology A M
91-
let _τN : TopologicalSpace N := Module.rtopology A N
92-
(inferInstance : TopologicalSpace (M × N)) = Module.rtopology A (M × N) := by sorry
119+
end type_stuff
120+
121+
section R_is_M_stuff
93122

94-
example :
95-
let _τM : TopologicalSpace M := Module.rtopology A M
96-
let _τN : TopologicalSpace N := Module.rtopology A N
97-
(inferInstance : TopologicalSpace (M × N)) = Module.rtopology A (M × N) := by sorry
123+
variable {R : Type} [τR : TopologicalSpace R] [Monoid R]
98124

99-
example (ι : Type*) :
100-
let _τM : TopologicalSpace M := Module.rtopology A M
101-
(inferInstance : TopologicalSpace (ι → M)) = Module.rtopology A (ι → M) := by sorry
125+
-- is this true? Do we need that R is commutative? Does it work if R is a only semigroup?
126+
example : (inferInstance : TopologicalSpace R) = ActionTopology R R := by
127+
sorry
102128

103-
end noncommutative
129+
end R_is_M_stuff
104130

105-
section commutative
131+
section what_i_want
106132

107133
-- Let A be a commutative ring, with a compatible topology.
108134
variable (A : Type*) [CommRing A] [TopologicalSpace A] [TopologicalRing A]
109135
-- let `M` and `N` be `A`-modules
110-
variable (M : Type*) [AddCommGroup M] [Module A M]
111-
variable {N : Type*} [AddCommGroup N] [Module A N]
136+
variable (M : Type*) [AddCommGroup M] [Module A M] [TopologicalSpace M] [TopologicalAddGroup M] [IsActionTopology A M]
137+
variable {N : Type*} [AddCommGroup N] [Module A N] [TopologicalSpace N] [TopologicalAddGroup N] [IsActionTopology A N]
138+
-- Remark: A needs to be commutative so that I get an A-action on M ⊗ N.
112139

140+
-- What generality is this true in? I only need it when M and N are finite and free
113141
open scoped TensorProduct
114-
lemma Module.continuous_bilinear :
115-
let _τM : TopologicalSpace M := Module.rtopology A _
116-
let _τN : TopologicalSpace N := Module.rtopology A _
117-
let _τMN : TopologicalSpace (M ⊗[A] N) := Module.rtopology A _
142+
lemma continuous_of_bilinear :
143+
letI : TopologicalSpace (M ⊗[A] N) := ActionTopology A (M ⊗[A] N)
118144
Continuous (fun (mn : M × N) ↦ mn.1 ⊗ₜ mn.2 : M × N → M ⊗[A] N) := by sorry
119145

120146
-- Now say we have a (not necessarily commutative) `A`-algebra `D` which is free of finite type.
121-
122147
-- are all these assumptions needed?
123-
variable (D : Type*) [Ring D] [Algebra A D] [Module.Finite A D] [Module.Free A D]
124-
125-
instance Module.topologicalRing : @TopologicalRing D (Module.rtopology A D) _ :=
126-
let _ : TopologicalSpace D := Module.rtopology A D
127-
{
128-
continuous_add := by
129-
sorry
130-
continuous_mul := by
131-
sorry
132-
continuous_neg := by
133-
sorry }
134-
135-
end commutative
148+
variable (D : Type*) [Ring D] [Algebra A D] [Module.Finite A D] [Module.Free A D] [TopologicalSpace D] [IsActionTopology A D]
149+
150+
theorem needed_for_FLT : TopologicalRing D where
151+
continuous_add := sorry
152+
continuous_mul := sorry
153+
continuous_neg := sorry
154+
155+
end what_i_want
156+
157+
-- possible hints at https://github.com/ImperialCollegeLondon/FLT/blob/main/FLT/HIMExperiments/module_topology.lean
158+
-- except there the topology is *different* so the work does not apply

0 commit comments

Comments
 (0)