@@ -47,16 +47,22 @@ end semimodule
47
47
48
48
section semiring
49
49
variables [comm_semiring R] [comm_semiring S] [semiring A] [semiring B]
50
- variables [algebra R S] [algebra S A] [algebra R A] [algebra S B] [algebra R B]
51
- variables {R S A}
50
+ variables [algebra R S] [algebra S A] [algebra S B]
52
51
53
- theorem of_algebra_map_eq (h : ∀ x, algebra_map R A x = algebra_map S A (algebra_map R S x)) :
52
+ variables {R S A}
53
+ theorem of_algebra_map_eq [algebra R A]
54
+ (h : ∀ x, algebra_map R A x = algebra_map S A (algebra_map R S x)) :
54
55
is_scalar_tower R S A :=
55
56
⟨λ x y z, by simp_rw [algebra.smul_def, ring_hom.map_mul, mul_assoc, h]⟩
56
57
58
+ variables (R S A)
59
+
60
+ instance subalgebra (S₀ : subalgebra R S) : is_scalar_tower S₀ S A :=
61
+ of_algebra_map_eq $ λ x, rfl
62
+
63
+ variables [algebra R A] [algebra R B]
57
64
variables [is_scalar_tower R S A] [is_scalar_tower R S B]
58
65
59
- variables (R S A)
60
66
theorem algebra_map_eq :
61
67
algebra_map R A = (algebra_map S A).comp (algebra_map R S) :=
62
68
ring_hom.ext $ λ x, by simp_rw [ring_hom.comp_apply, algebra.algebra_map_eq_smul_one,
@@ -65,6 +71,10 @@ ring_hom.ext $ λ x, by simp_rw [ring_hom.comp_apply, algebra.algebra_map_eq_smu
65
71
theorem algebra_map_apply (x : R) : algebra_map R A x = algebra_map S A (algebra_map R S x) :=
66
72
by rw [algebra_map_eq R S A, ring_hom.comp_apply]
67
73
74
+ instance subalgebra' (S₀ : subalgebra R S) : is_scalar_tower R S₀ A :=
75
+ @is_scalar_tower.of_algebra_map_eq R S₀ A _ _ _ _ _ _ $ λ _,
76
+ (is_scalar_tower.algebra_map_apply R S A _ : _)
77
+
68
78
@[ext] lemma algebra.ext {S : Type u} {A : Type v} [comm_semiring S] [semiring A]
69
79
(h1 h2 : algebra S A) (h : ∀ {r : S} {x : A}, (by haveI := h1; exact r • x) = r • x) : h1 = h2 :=
70
80
begin
@@ -108,10 +118,12 @@ instance comap {R S A : Type*} [comm_semiring R] [comm_semiring S] [semiring A]
108
118
[algebra R S] [algebra S A] : is_scalar_tower R S (algebra.comap R S A) :=
109
119
of_algebra_map_eq $ λ x, rfl
110
120
111
- instance subsemiring (U : subsemiring S) : is_scalar_tower U S A :=
121
+ -- conflicts with is_scalar_tower.subalgebra
122
+ @[priority 999 ] instance subsemiring (U : subsemiring S) : is_scalar_tower U S A :=
112
123
of_algebra_map_eq $ λ x, rfl
113
124
114
- instance subring {S A : Type *} [comm_ring S] [ring A] [algebra S A]
125
+ -- conflicts with is_scalar_tower.subalgebra
126
+ @[priority 999 ] instance subring {S A : Type *} [comm_ring S] [ring A] [algebra S A]
115
127
(U : set S) [is_subring U] : is_scalar_tower U S A :=
116
128
of_algebra_map_eq $ λ x, rfl
117
129
@@ -121,21 +133,19 @@ instance of_ring_hom {R A B : Type*} [comm_semiring R] [comm_semiring A] [comm_s
121
133
@is_scalar_tower R A B _ (f.to_ring_hom.to_algebra.to_has_scalar) _ :=
122
134
by { letI := (f : A →+* B).to_algebra, exact of_algebra_map_eq (λ x, (f.commutes x).symm) }
123
135
124
- end semiring
125
-
126
- section comm_semiring
127
- variables [comm_semiring R] [comm_semiring A] [algebra R A]
128
- variables [comm_semiring B] [algebra A B] [algebra R B] [is_scalar_tower R A B]
136
+ instance polynomial : is_scalar_tower R S (polynomial A) :=
137
+ of_algebra_map_eq $ λ x, congr_arg polynomial.C $ algebra_map_apply R S A x
129
138
130
- instance subalgebra (S : subalgebra R A) : is_scalar_tower R S A :=
131
- of_algebra_map_eq $ λ x, rfl
139
+ variables (R S A)
140
+ theorem aeval_apply (x : A) (p : polynomial R) : polynomial.aeval x p =
141
+ polynomial.aeval x (polynomial.map (algebra_map R S) p) :=
142
+ by rw [polynomial.aeval_def, polynomial.aeval_def, polynomial.eval₂_map, algebra_map_eq R S A]
132
143
133
- instance polynomial : is_scalar_tower R A (polynomial B) :=
134
- of_algebra_map_eq $ λ x, congr_arg polynomial.C $ algebra_map_apply R A B x
144
+ end semiring
135
145
136
- theorem aeval_apply (x : B) (p : polynomial R) : polynomial.aeval x p =
137
- polynomial.aeval x (polynomial.map (algebra_map R A) p) :=
138
- by rw [polynomial.aeval_def, polynomial.aeval_def, polynomial.eval₂_map, algebra_map_eq R A B]
146
+ section comm_semiring
147
+ variables [comm_semiring R] [comm_semiring A] [comm_semiring B]
148
+ variables [algebra R A] [algebra A B] [algebra R B] [is_scalar_tower R A B]
139
149
140
150
lemma algebra_map_aeval (x : A) (p : polynomial R) :
141
151
algebra_map A B (polynomial.aeval x p) = polynomial.aeval (algebra_map A B x) p :=
@@ -246,6 +256,17 @@ by { ext z, exact ⟨λ ⟨⟨x, y, _, h1⟩, h2⟩, ⟨y, h2 ▸ h1⟩, λ ⟨y
246
256
247
257
end is_scalar_tower
248
258
259
+ section
260
+ open_locale classical
261
+ lemma algebra.fg_trans' {R S A : Type *} [comm_ring R] [comm_ring S] [comm_ring A]
262
+ [algebra R S] [algebra S A] [algebra R A] [is_scalar_tower R S A]
263
+ (hRS : (⊤ : subalgebra R S).fg) (hSA : (⊤ : subalgebra S A).fg) :
264
+ (⊤ : subalgebra R A).fg :=
265
+ let ⟨s, hs⟩ := hRS, ⟨t, ht⟩ := hSA in ⟨s.image (algebra_map S A) ∪ t,
266
+ by rw [finset.coe_union, finset.coe_image, algebra.adjoin_union, algebra.adjoin_algebra_map, hs,
267
+ algebra.map_top, is_scalar_tower.range_under_adjoin, ht, subalgebra.res_top]⟩
268
+ end
269
+
249
270
namespace submodule
250
271
251
272
open is_scalar_tower
@@ -379,3 +400,66 @@ theorem is_basis.smul_repr_mk
379
400
by simp [is_basis.smul_repr]
380
401
381
402
end ring
403
+
404
+ section artin_tate
405
+
406
+ variables (C : Type *)
407
+ variables [comm_ring A] [comm_ring B] [comm_ring C]
408
+ variables [algebra A B] [algebra B C] [algebra A C] [is_scalar_tower A B C]
409
+
410
+ open finset submodule
411
+ open_locale classical
412
+
413
+ lemma exists_subalgebra_of_fg (hAC : (⊤ : subalgebra A C).fg) (hBC : (⊤ : submodule B C).fg) :
414
+ ∃ B₀ : subalgebra A B, B₀.fg ∧ (⊤ : submodule B₀ C).fg :=
415
+ begin
416
+ cases hAC with x hx,
417
+ cases hBC with y hy, have := hy,
418
+ simp_rw [eq_top_iff', mem_span_finset] at this , choose f hf,
419
+ let s : finset B := (finset.product (x ∪ (y * y)) y).image (function.uncurry f),
420
+ have hsx : ∀ (xi ∈ x) (yj ∈ y), f xi yj ∈ s := λ xi hxi yj hyj,
421
+ show function.uncurry f (xi, yj) ∈ s,
422
+ from mem_image_of_mem _ $ mem_product.2 ⟨mem_union_left _ hxi, hyj⟩,
423
+ have hsy : ∀ (yi yj yk ∈ y), f (yi * yj) yk ∈ s := λ yi yj yk hyi hyj hyk,
424
+ show function.uncurry f (yi * yj, yk) ∈ s,
425
+ from mem_image_of_mem _ $ mem_product.2 ⟨mem_union_right _ $ finset.mul_mem_mul hyi hyj, hyk⟩,
426
+ have hxy : ∀ xi ∈ x, xi ∈ span (algebra.adjoin A (↑s : set B)) (↑(insert 1 y : finset C) : set C) :=
427
+ λ xi hxi, hf xi ▸ sum_mem _ (λ yj hyj, smul_mem
428
+ (span (algebra.adjoin A (↑s : set B)) (↑(insert 1 y : finset C) : set C))
429
+ ⟨f xi yj, algebra.subset_adjoin $ hsx xi hxi yj hyj⟩
430
+ (subset_span $ mem_insert_of_mem hyj)),
431
+ have hyy : span (algebra.adjoin A (↑s : set B)) (↑(insert 1 y : finset C) : set C) *
432
+ span (algebra.adjoin A (↑s : set B)) (↑(insert 1 y : finset C) : set C) ≤
433
+ span (algebra.adjoin A (↑s : set B)) (↑(insert 1 y : finset C) : set C),
434
+ { rw [span_mul_span, span_le, coe_insert], rintros _ ⟨yi, yj, rfl | hyi, rfl | hyj, rfl⟩,
435
+ { rw mul_one, exact subset_span (set.mem_insert _ _) },
436
+ { rw one_mul, exact subset_span (set.mem_insert_of_mem _ hyj) },
437
+ { rw mul_one, exact subset_span (set.mem_insert_of_mem _ hyi) },
438
+ { rw ← hf (yi * yj), exact (submodule.mem_coe _).2 (sum_mem _ $ λ yk hyk, smul_mem
439
+ (span (algebra.adjoin A (↑s : set B)) (insert 1 ↑y : set C))
440
+ ⟨f (yi * yj) yk, algebra.subset_adjoin $ hsy yi yj yk hyi hyj hyk⟩
441
+ (subset_span $ set.mem_insert_of_mem _ hyk : yk ∈ _)) } },
442
+ refine ⟨algebra.adjoin A (↑s : set B), subalgebra.fg_adjoin_finset _, insert 1 y, _⟩,
443
+ refine restrict_scalars'_injective _ _ (_ : restrict_scalars' A _ = _),
444
+ rw [restrict_scalars'_top, eq_top_iff, ← algebra.coe_top, ← hx, algebra.adjoin_eq_span, span_le],
445
+ refine λ r hr, monoid.in_closure.rec_on hr hxy (subset_span $ mem_insert_self _ _)
446
+ (λ p q _ _ hp hq, hyy $ submodule.mul_mem_mul hp hq)
447
+ end
448
+
449
+ /-- Artin--Tate lemma: if A ⊆ B ⊆ C is a chain of subrings of commutative rings, and
450
+ A is noetherian, and C is algebra-finite over A, and C is module-finite over B,
451
+ then B is algebra-finite over A.
452
+
453
+ References: Atiyah--Macdonald Proposition 7.8; Stacks 00IS; Altman--Kleiman 16.17. -/
454
+ theorem fg_of_fg_of_fg [is_noetherian_ring A]
455
+ (hAC : (⊤ : subalgebra A C).fg) (hBC : (⊤ : submodule B C).fg)
456
+ (hBCi : function.injective (algebra_map B C)) :
457
+ (⊤ : subalgebra A B).fg :=
458
+ let ⟨B₀, hAB₀, hB₀C⟩ := exists_subalgebra_of_fg A B C hAC hBC in
459
+ algebra.fg_trans' (B₀.fg_top.2 hAB₀) $ subalgebra.fg_of_submodule_fg $
460
+ have is_noetherian_ring B₀, from is_noetherian_ring_of_fg hAB₀,
461
+ have is_noetherian B₀ C, by exactI is_noetherian_of_fg_of_noetherian' hB₀C,
462
+ by exactI fg_of_injective (is_scalar_tower.to_alg_hom B₀ B C).to_linear_map
463
+ (linear_map.ker_eq_bot.2 hBCi)
464
+
465
+ end artin_tate
0 commit comments