@@ -6,6 +6,23 @@ Authors: Kenny Lau
6
6
7
7
import ring_theory.adjoin
8
8
9
+ /-!
10
+ # Towers of algebras
11
+
12
+ We set up the basic theory of algebra towers.
13
+ The typeclass `is_algebra_tower R S A` expresses that `A` is an `S`-algebra,
14
+ and both `S` and `A` are `R`-algebras, with the compatibility condition
15
+ `(r • s) • a = r • (s • a)`.
16
+
17
+ In `field_theory/tower.lean` we use this to prove the tower law for finite extensions,
18
+ that if `R` and `S` are both fields, then `[A:R] = [A:S] [S:A]`.
19
+
20
+ In this file we prepare the main lemma:
21
+ if `{bi | i ∈ I}` is an `R`-basis of `S` and `{cj | j ∈ J}` is a `S`-basis
22
+ of `A`, then `{bi cj | i ∈ I, j ∈ J}` is an `R`-basis of `A`. This statement does not require the
23
+ base rings to be a field, so we also generalize the lemma to rings in this file.
24
+ -/
25
+
9
26
universes u v w u₁
10
27
11
28
variables (R : Type u) (S : Type v) (A : Type w) (B : Type u₁)
@@ -21,19 +38,30 @@ section semiring
21
38
variables [comm_semiring R] [comm_semiring S] [semiring A] [semiring B]
22
39
variables [algebra R S] [algebra S A] [algebra R A] [algebra S B] [algebra R B]
23
40
24
- theorem algebra_map_eq [is_algebra_tower R S A] :
41
+ variables {R S A}
42
+ theorem of_algebra_map_eq (h : ∀ x, algebra_map R A x = algebra_map S A (algebra_map R S x)) :
43
+ is_algebra_tower R S A :=
44
+ ⟨λ x y z, by simp_rw [algebra.smul_def, ring_hom.map_mul, mul_assoc, h]⟩
45
+
46
+ variables [is_algebra_tower R S A] [is_algebra_tower R S B]
47
+
48
+ variables (R S A)
49
+ theorem algebra_map_eq :
25
50
algebra_map R A = (algebra_map S A).comp (algebra_map R S) :=
26
51
ring_hom.ext $ λ x, by simp_rw [ring_hom.comp_apply, algebra.algebra_map_eq_smul_one,
27
52
smul_assoc, one_smul]
28
53
29
- theorem algebra_map_apply [is_algebra_tower R S A] (x : R) :
30
- algebra_map R A x = algebra_map S A (algebra_map R S x) :=
54
+ theorem algebra_map_apply (x : R) : algebra_map R A x = algebra_map S A (algebra_map R S x) :=
31
55
by rw [algebra_map_eq R S A, ring_hom.comp_apply]
32
56
57
+ variables {R} (S) {A}
58
+ theorem algebra_map_smul (r : R) (x : A) : algebra_map R S r • x = r • x :=
59
+ by rw [algebra.algebra_map_eq_smul_one, smul_assoc, one_smul]
60
+
33
61
variables {R S A}
34
- theorem of_algebra_map_eq (h : ∀ x, algebra_map R A x = algebra_map S A (algebra_map R S x)) :
35
- is_algebra_tower R S A :=
36
- ⟨λ x y z, by simp_rw [algebra.smul_def, ring_hom .map_mul, mul_assoc, h]⟩
62
+ theorem smul_left_comm (r : R) (s : S) (x : A) : r • s • x = s • r • x :=
63
+ by simp_rw [algebra.smul_def, ← mul_assoc, algebra_map_apply R S A,
64
+ ← (algebra_map S A) .map_mul, mul_comm s]
37
65
38
66
@[ext] lemma algebra.ext {S : Type u} {A : Type v} [comm_semiring S] [semiring A]
39
67
(h1 h2 : algebra S A) (h : ∀ {r : S} {x : A}, (by clear h2; exact r • x) = r • x) : h1 = h2 :=
43
71
ext r, erw [← mul_one (g1 r), ← h12, ← mul_one (g2 r), ← h22, h], refl }
44
72
end
45
73
46
- variables [is_algebra_tower R S A] [is_algebra_tower R S B]
47
-
48
74
variables (R S A)
49
75
theorem comap_eq : algebra.comap.algebra R S A = ‹_› :=
50
76
algebra.ext _ _ $ λ x (z : A),
@@ -167,3 +193,109 @@ le_antisymm (adjoin_le $ set.image_subset_iff.2 $ λ y hy, ⟨y, subset_adjoin h
167
193
(subalgebra.map_le.2 $ adjoin_le $ λ y hy, subset_adjoin ⟨y, hy, rfl⟩)
168
194
169
195
end algebra
196
+
197
+ namespace submodule
198
+
199
+ open is_algebra_tower
200
+
201
+ variables [comm_semiring R] [comm_semiring S] [semiring A]
202
+ variables [algebra R S] [algebra S A] [algebra R A] [is_algebra_tower R S A]
203
+
204
+ variables (R) {S A}
205
+ /-- Restricting the scalars of submodules in an algebra tower. -/
206
+ def restrict_scalars' (U : submodule S A) : submodule R A :=
207
+ { smul_mem' := λ r x hx, algebra_map_smul S r x ▸ U.smul_mem _ hx, .. U }
208
+
209
+ variables (R S A)
210
+ theorem restrict_scalars'_top : restrict_scalars' R (⊤ : submodule S A) = ⊤ := rfl
211
+
212
+ variables {R S A}
213
+ theorem restrict_scalars'_injective (U₁ U₂ : submodule S A)
214
+ (h : restrict_scalars' R U₁ = restrict_scalars' R U₂) : U₁ = U₂ :=
215
+ ext $ by convert set.ext_iff.1 (ext'_iff.1 h); refl
216
+
217
+ theorem restrict_scalars'_inj {U₁ U₂ : submodule S A} :
218
+ restrict_scalars' R U₁ = restrict_scalars' R U₂ ↔ U₁ = U₂ :=
219
+ ⟨restrict_scalars'_injective U₁ U₂, congr_arg _⟩
220
+
221
+ end submodule
222
+
223
+ section semiring
224
+
225
+ variables {R S A}
226
+ variables [comm_semiring R] [comm_semiring S] [semiring A]
227
+ variables [algebra R S] [algebra S A] [algebra R A] [is_algebra_tower R S A]
228
+
229
+ namespace submodule
230
+
231
+ open is_algebra_tower
232
+
233
+ theorem smul_mem_span_smul_of_mem {s : set S} {t : set A} {k : S} (hks : k ∈ span R s)
234
+ {x : A} (hx : x ∈ t) : k • x ∈ span R (s • t) :=
235
+ span_induction hks (λ c hc, subset_span $ set.mem_smul.2 ⟨c, x, hc, hx, rfl⟩)
236
+ (by { rw zero_smul, exact zero_mem _ })
237
+ (λ c₁ c₂ ih₁ ih₂, by { rw add_smul, exact add_mem _ ih₁ ih₂ })
238
+ (λ b c hc, by { rw is_algebra_tower.smul_assoc, exact smul_mem _ _ hc })
239
+
240
+ theorem smul_mem_span_smul {s : set S} (hs : span R s = ⊤) {t : set A} {k : S}
241
+ {x : A} (hx : x ∈ span R t) :
242
+ k • x ∈ span R (s • t) :=
243
+ span_induction hx (λ x hx, smul_mem_span_smul_of_mem (hs.symm ▸ mem_top) hx)
244
+ (by { rw smul_zero, exact zero_mem _ })
245
+ (λ x y ihx ihy, by { rw smul_add, exact add_mem _ ihx ihy })
246
+ (λ c x hx, smul_left_comm c k x ▸ smul_mem _ _ hx)
247
+
248
+ theorem smul_mem_span_smul' {s : set S} (hs : span R s = ⊤) {t : set A} {k : S}
249
+ {x : A} (hx : x ∈ span R (s • t)) :
250
+ k • x ∈ span R (s • t) :=
251
+ span_induction hx (λ x hx, let ⟨p, q, hp, hq, hpq⟩ := set.mem_smul.1 hx in
252
+ by { rw [← hpq, smul_smul], exact smul_mem_span_smul_of_mem (hs.symm ▸ mem_top) hq })
253
+ (by { rw smul_zero, exact zero_mem _ })
254
+ (λ x y ihx ihy, by { rw smul_add, exact add_mem _ ihx ihy })
255
+ (λ c x hx, smul_left_comm c k x ▸ smul_mem _ _ hx)
256
+
257
+ theorem span_smul {s : set S} (hs : span R s = ⊤) (t : set A) :
258
+ span R (s • t) = (span S t).restrict_scalars' R :=
259
+ le_antisymm (span_le.2 $ λ x hx, let ⟨p, q, hps, hqt, hpqx⟩ := set.mem_smul.1 hx in
260
+ hpqx ▸ (span S t).smul_mem p (subset_span hqt)) $
261
+ λ p hp, span_induction hp (λ x hx, one_smul S x ▸ smul_mem_span_smul hs (subset_span hx))
262
+ (zero_mem _)
263
+ (λ _ _, add_mem _)
264
+ (λ k x hx, smul_mem_span_smul' hs hx)
265
+
266
+ end submodule
267
+
268
+ end semiring
269
+
270
+
271
+ section ring
272
+
273
+ open_locale big_operators classical
274
+ universes v₁ w₁
275
+
276
+ variables {R S A}
277
+ variables [comm_ring R] [comm_ring S] [ring A]
278
+ variables [algebra R S] [algebra S A] [algebra R A] [is_algebra_tower R S A]
279
+
280
+ theorem linear_independent_smul {ι : Type v₁} {b : ι → S} {κ : Type w₁} {c : κ → A}
281
+ (hb : linear_independent R b) (hc : linear_independent S c) :
282
+ linear_independent R (λ p : ι × κ, b p.1 • c p.2 ) :=
283
+ begin
284
+ rw linear_independent_iff' at hb hc, rw linear_independent_iff'', rintros s g hg hsg ⟨i, k⟩,
285
+ by_cases hik : (i, k) ∈ s,
286
+ { have h1 : ∑ i in (s.image prod.fst).product (s.image prod.snd), g i • b i.1 • c i.2 = 0 ,
287
+ { rw ← hsg, exact (finset.sum_subset finset.subset_product $ λ p _ hp,
288
+ show g p • b p.1 • c p.2 = 0 , by rw [hg p hp, zero_smul]).symm },
289
+ rw [finset.sum_product, finset.sum_comm] at h1,
290
+ simp_rw [← is_algebra_tower.smul_assoc, ← finset.sum_smul] at h1,
291
+ exact hb _ _ (hc _ _ h1 k (finset.mem_image_of_mem _ hik)) i (finset.mem_image_of_mem _ hik) },
292
+ exact hg _ hik
293
+ end
294
+
295
+ theorem is_basis.smul {ι : Type v₁} {b : ι → S} {κ : Type w₁} {c : κ → A}
296
+ (hb : is_basis R b) (hc : is_basis S c) : is_basis R (λ p : ι × κ, b p.1 • c p.2 ) :=
297
+ ⟨linear_independent_smul hb.1 hc.1 ,
298
+ by rw [← set.range_smul_range, submodule.span_smul hb.2 , ← submodule.restrict_scalars'_top R S A,
299
+ submodule.restrict_scalars'_inj, hc.2 ]⟩
300
+
301
+ end ring
0 commit comments