Paper XI · Lean source
AlgebraActionModule.lean
Selected results recorded Coverage and evidence
Compiler/replay evidence is reported for a subset or bounded block. No whole-work coverage is implied.
This viewer reads the retained source; it does not run Lean or assign new claim mappings.
PaperXI/AlgebraActionModule.lean250 lines
Original source path
formalization/PaperXI/AlgebraActionModule.leanSkip declarations and read code
1 import Mathlib.Algebra.Algebra.Hom
2 import Mathlib.Algebra.Algebra.Tower
3 import Mathlib.Algebra.Module.RingHom
4 import Mathlib.LinearAlgebra.BilinearMap
5 import Mathlib.RingTheory.SimpleModule.Basic
6 import Mathlib.Analysis.Complex.Basic
7 import Mathlib.Tactic
8
9 /-! An algebra action gives an actual module on a separate copy of its vector space.
10 Submodules and intertwiners are identified with the corresponding complex-linear data. -/
11 set_option autoImplicit false
12 noncomputable section
13 namespace PaperXI.AlgebraActionModule
14
15 variable {B W : Type*} [Ring B] [Algebra ℂ B] [AddCommGroup W] [Module ℂ W]
16
17 /-- A copy of the original space carrying the module structure specified by the action. -/
18 @[nolint unusedArguments]
19 def Space (_ : B →ₐ[ℂ] Module.End ℂ W) := W
20 deriving AddCommGroup, Module ℂ
21
22 variable (φ : B →ₐ[ℂ] Module.End ℂ W)
23
24 /-- The canonical complex linear identification with the original vector space. -/
25 def equiv : Space φ ≃ₗ[ℂ] W := LinearEquiv.refl ℂ W
26
27 instance instModule : Module B (Space φ) := Module.compHom W φ.toRingHom
28
29 @[simp] theorem equiv_smul (b : B) (w : Space φ) :
30 equiv φ (b • w) = φ b (equiv φ w) := rfl
31
32 @[simp] theorem equiv_symm_apply (w : W) : equiv φ ((equiv φ).symm w) = w := rfl
33
34 instance instScalarTower : IsScalarTower ℂ B (Space φ) where
35 smul_assoc c b w := by
36 change φ (c • b) w = c • φ b w
37 rw [map_smul]
38 rfl
39
40 /-- Stability under every actual algebra operator. -/
41 def Stable (S : Submodule ℂ W) : Prop :=
42 ∀ (b : B) (w : W), w ∈ S → φ b w ∈ S
43
44 /-- Restrict an actual module subspace to the compatible complex scalar action. -/
45 def toSubspace (S : Submodule B (Space φ)) : Submodule ℂ W := S.restrictScalars ℂ
46
47 @[simp] theorem mem_toSubspace (S : Submodule B (Space φ)) (w : W) :
48 w ∈ toSubspace φ S ↔ (equiv φ).symm w ∈ S := Iff.rfl
49
50 theorem stable_toSubspace (S : Submodule B (Space φ)) : Stable φ (toSubspace φ S) := by
51 intro b w hw
52 exact S.smul_mem b hw
53
54 /-- Every stable complex subspace is an actual algebra submodule. -/
55 def ofSubspace (S : Submodule ℂ W) (hS : Stable φ S) : Submodule B (Space φ) where
56 carrier := (S : Set W)
57 zero_mem' := S.zero_mem
58 add_mem' := S.add_mem
59 smul_mem' := hS
60
61 @[simp] theorem mem_ofSubspace (S : Submodule ℂ W) (hS : Stable φ S) (w : Space φ) :
62 w ∈ ofSubspace φ S hS ↔ equiv φ w ∈ S := Iff.rfl
63
64 @[simp] theorem toSubspace_ofSubspace (S : Submodule ℂ W) (hS : Stable φ S) :
65 toSubspace φ (ofSubspace φ S hS) = S := by ext w; rfl
66
67 @[simp] theorem ofSubspace_toSubspace (S : Submodule B (Space φ)) :
68 ofSubspace φ (toSubspace φ S) (stable_toSubspace φ S) = S := by ext w; rfl
69
70 /-- The complete ordered collection of module subspaces is exactly the stable complex subspaces. -/
71 def submoduleOrderIso : Submodule B (Space φ) ≃o {S : Submodule ℂ W // Stable φ S} where
72 toFun S := ⟨toSubspace φ S, stable_toSubspace φ S⟩
73 invFun S := ofSubspace φ S.1 S.2
74 left_inv := ofSubspace_toSubspace φ
75 right_inv S := by apply Subtype.ext; exact toSubspace_ofSubspace φ S.1 S.2
76 map_rel_iff' := Iff.rfl
77
78 @[simp] theorem toSubspace_bot : toSubspace φ ⊥ = ⊥ := by ext w; rfl
79 @[simp] theorem toSubspace_top : toSubspace φ ⊤ = ⊤ := by ext w; rfl
80
81 /-- Simplicity is exactly nontriviality and absence of proper stable complex subspaces. -/
82 theorem simple_iff : IsSimpleModule B (Space φ) ↔
83 Nontrivial W ∧ ∀ S : Submodule ℂ W, Stable φ S → S = ⊥ ∨ S = ⊤ := by
84 constructor
85 · intro h
86 let : IsSimpleModule B (Space φ) := h
87 refine ⟨IsSimpleModule.nontrivial B (Space φ), ?_⟩
88 intro S hS
89 have hh := eq_bot_or_eq_top (ofSubspace φ S hS)
90 rcases hh with hh | hh
91 · left
92 have := congrArg (toSubspace φ) hh
93 simpa using this
94 · right
95 have := congrArg (toSubspace φ) hh
96 simpa using this
97 · rintro ⟨hn, hs⟩
98 let : Nontrivial W := hn
99 let : Nontrivial (Space φ) := hn
100 refine { eq_bot_or_eq_top := ?_ }
101 intro S
102 rcases hs (toSubspace φ S) (stable_toSubspace φ S) with h | h
103 · left
104 ext w
105 have hh := congrArg (fun P : Submodule ℂ W => equiv φ w ∈ P) h
106 simpa using hh
107 · right
108 ext w
109 have hh := congrArg (fun P : Submodule ℂ W => equiv φ w ∈ P) h
110 simpa using hh
111
112 section Intertwiners
113
114 variable {V U : Type*} [AddCommGroup V] [Module ℂ V]
115 variable [AddCommGroup U] [Module ℂ U]
116 variable (χ : B →ₐ[ℂ] Module.End ℂ V)
117
118 /-- The original complex-linear map commutes with the two actual algebra actions. -/
119 def Intertwines (f : W →ₗ[ℂ] V) : Prop :=
120 ∀ (b : B) (w : W), f (φ b w) = χ b (f w)
121
122 /-- An action-preserving complex-linear map is an actual module-linear map. -/
123 def toModuleMap (f : W →ₗ[ℂ] V) (hf : Intertwines φ χ f) :
124 Space φ →ₗ[B] Space χ where
125 toFun := f
126 map_add' := f.map_add
127 map_smul' := hf
128
129 /-- Restriction of an actual module map to the original complex vector spaces. -/
130 def toComplexMap (f : Space φ →ₗ[B] Space χ) : W →ₗ[ℂ] V :=
131 f.restrictScalars ℂ
132
133 @[simp] theorem toModuleMap_apply (f : W →ₗ[ℂ] V) (hf : Intertwines φ χ f)
134 (w : Space φ) : equiv χ (toModuleMap φ χ f hf w) = f (equiv φ w) := rfl
135
136 @[simp] theorem toComplexMap_apply (f : Space φ →ₗ[B] Space χ) (w : W) :
137 toComplexMap φ χ f w = equiv χ (f ((equiv φ).symm w)) := rfl
138
139 theorem intertwines_toComplexMap (f : Space φ →ₗ[B] Space χ) :
140 Intertwines φ χ (toComplexMap φ χ f) := f.map_smul
141
142 /-- All complex action intertwiners correspond bijectively to actual module maps. -/
143 def intertwinerEquiv : {f : W →ₗ[ℂ] V // Intertwines φ χ f} ≃
144 (Space φ →ₗ[B] Space χ) where
145 toFun f := toModuleMap φ χ f.1 f.2
146 invFun f := ⟨toComplexMap φ χ f, intertwines_toComplexMap φ χ f⟩
147 left_inv f := by apply Subtype.ext; ext w; rfl
148 right_inv f := by ext w; rfl
149
150 @[simp] theorem toComplexMap_toModuleMap (f : W →ₗ[ℂ] V) (hf : Intertwines φ χ f) :
151 toComplexMap φ χ (toModuleMap φ χ f hf) = f := by ext w; rfl
152
153 @[simp] theorem toModuleMap_toComplexMap (f : Space φ →ₗ[B] Space χ) :
154 toModuleMap φ χ (toComplexMap φ χ f) (intertwines_toComplexMap φ χ f) = f := by
155 ext w
156 rfl
157
158 /-- The correspondence preserves identity maps. -/
159 @[simp] theorem toComplexMap_id :
160 toComplexMap φ φ (LinearMap.id : Space φ →ₗ[B] Space φ) = LinearMap.id := by
161 ext w
162 rfl
163
164 /-- The correspondence preserves composition. -/
165 @[simp] theorem toComplexMap_comp (θ : B →ₐ[ℂ] Module.End ℂ U)
166 (g : Space χ →ₗ[B] Space θ) (f : Space φ →ₗ[B] Space χ) :
167 toComplexMap φ θ (g.comp f) =
168 (toComplexMap χ θ g).comp (toComplexMap φ χ f) := by
169 ext w
170 rfl
171
172 /-- An invertible complex intertwiner gives an actual module equivalence. -/
173 def toModuleEquiv (e : W ≃ₗ[ℂ] V) (he : Intertwines φ χ e.toLinearMap) :
174 Space φ ≃ₗ[B] Space χ where
175 toFun := e
176 invFun := e.symm
177 left_inv := e.left_inv
178 right_inv := e.right_inv
179 map_add' := e.map_add
180 map_smul' := he
181
182 /-- A module equivalence gives an invertible intertwiner on the original spaces. -/
183 def toComplexEquiv (e : Space φ ≃ₗ[B] Space χ) : W ≃ₗ[ℂ] V :=
184 e.restrictScalars ℂ
185
186 @[simp] theorem toModuleEquiv_apply (e : W ≃ₗ[ℂ] V)
187 (he : Intertwines φ χ e.toLinearMap) (w : Space φ) :
188 equiv χ (toModuleEquiv φ χ e he w) = e (equiv φ w) := rfl
189
190 @[simp] theorem toComplexEquiv_apply (e : Space φ ≃ₗ[B] Space χ) (w : W) :
191 toComplexEquiv φ χ e w = equiv χ (e ((equiv φ).symm w)) := rfl
192
193 theorem intertwines_toComplexEquiv (e : Space φ ≃ₗ[B] Space χ) :
194 Intertwines φ χ (toComplexEquiv φ χ e).toLinearMap := e.map_smul
195
196 /-- Invertible intertwiners correspond bijectively to actual module equivalences. -/
197 def equivalenceEquiv : {e : W ≃ₗ[ℂ] V // Intertwines φ χ e.toLinearMap} ≃
198 (Space φ ≃ₗ[B] Space χ) where
199 toFun e := toModuleEquiv φ χ e.1 e.2
200 invFun e := ⟨toComplexEquiv φ χ e, intertwines_toComplexEquiv φ χ e⟩
201 left_inv e := by apply Subtype.ext; ext w; rfl
202 right_inv e := by ext w; rfl
203
204 @[simp] theorem toComplexEquiv_toModuleEquiv (e : W ≃ₗ[ℂ] V)
205 (he : Intertwines φ χ e.toLinearMap) :
206 toComplexEquiv φ χ (toModuleEquiv φ χ e he) = e := by ext w; rfl
207
208 @[simp] theorem toModuleEquiv_toComplexEquiv (e : Space φ ≃ₗ[B] Space χ) :
209 toModuleEquiv φ χ (toComplexEquiv φ χ e) (intertwines_toComplexEquiv φ χ e) = e := by
210 ext w
211 rfl
212
213 @[simp] theorem toComplexEquiv_refl :
214 toComplexEquiv φ φ (LinearEquiv.refl B (Space φ)) = LinearEquiv.refl ℂ W := by
215 ext w
216 rfl
217
218 @[simp] theorem toComplexEquiv_trans (θ : B →ₐ[ℂ] Module.End ℂ U)
219 (e : Space φ ≃ₗ[B] Space χ) (f : Space χ ≃ₗ[B] Space θ) :
220 toComplexEquiv φ θ (e.trans f) =
221 (toComplexEquiv φ χ e).trans (toComplexEquiv χ θ f) := by
222 ext w
223 rfl
224
225 end Intertwiners
226
227 section ExistingModule
228
229 variable [Module B W] [IsScalarTower ℂ B W]
230
231 /-- Starting with an actual compatible module and forming its action recovers that module. -/
232 def ofModuleEquiv : Space (Algebra.lsmul ℂ ℂ W (A := B)) ≃ₗ[B] W where
233 toFun := equiv (Algebra.lsmul ℂ ℂ W (A := B))
234 invFun := (equiv (Algebra.lsmul ℂ ℂ W (A := B))).symm
235 left_inv := (equiv (Algebra.lsmul ℂ ℂ W (A := B))).left_inv
236 right_inv := (equiv (Algebra.lsmul ℂ ℂ W (A := B))).right_inv
237 map_add' := (equiv (Algebra.lsmul ℂ ℂ W (A := B))).map_add
238 map_smul' := fun _ _ => rfl
239
240 @[simp] theorem ofModuleEquiv_apply (w : Space (Algebra.lsmul ℂ ℂ W (A := B))) :
241 ofModuleEquiv (B := B) (W := W) w = equiv (Algebra.lsmul ℂ ℂ W (A := B)) w := rfl
242
243 /-- The canonical module round trip preserves simplicity. -/
244 theorem ofModule_simple_iff :
245 IsSimpleModule B (Space (Algebra.lsmul ℂ ℂ W (A := B))) ↔ IsSimpleModule B W :=
246 (ofModuleEquiv (B := B) (W := W)).isSimpleModule_iff
247
248 end ExistingModule
249
250 end PaperXI.AlgebraActionModule
Original file and source record
This copy matches the recorded source file. Its publication here does not change the work’s review status.
SHA-256: 5ceb841756c4ca3a00e4fe21b5969470175a83df02d2c417316405eced836820
Back to Paper XI: Packets, Arithmetic Realization, and Conditional Comparison