Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 3b09a26

Browse files
committed
feat(ring_theory/artinian): localization maps of artinian rings are surjective (#15736)
The proof is by Junyan, I just tidied it up a little, and also the `ring_theory/artinian` file a little bit, in order to fit the results more smoothly. Co-authored-by: Junyan Xu <junyanxumath@gmail.com> Co-authored-by: Eric Rodriguez <37984851+ericrbg@users.noreply.github.com>
1 parent 0026ed9 commit 3b09a26

File tree

2 files changed

+103
-68
lines changed

2 files changed

+103
-68
lines changed

src/ring_theory/artinian.lean

Lines changed: 101 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,8 @@ Copyright (c) 2021 Chris Hughes. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Chris Hughes
55
-/
6-
import linear_algebra.basic
7-
import linear_algebra.prod
8-
import linear_algebra.pi
9-
import data.set_like.fintype
10-
import linear_algebra.linear_independent
11-
import tactic.linarith
12-
import algebra.algebra.basic
13-
import ring_theory.noetherian
14-
import ring_theory.jacobson_ideal
15-
import ring_theory.nilpotent
166
import ring_theory.nakayama
7+
import data.set_like.fintype
178

189
/-!
1910
# Artinian rings and modules
@@ -55,7 +46,8 @@ class is_artinian (R M) [semiring R] [add_comm_monoid M] [module R M] : Prop :=
5546
(well_founded_submodule_lt [] : well_founded ((<) : submodule R M → submodule R M → Prop))
5647

5748
section
58-
variables {R : Type*} {M : Type*} {P : Type*} {N : Type*}
49+
variables {R M P N : Type*}
50+
5951
variables [ring R] [add_comm_group M] [add_comm_group P] [add_comm_group N]
6052
variables [module R M] [module R P] [module R N]
6153
open is_artinian
@@ -117,8 +109,9 @@ is_artinian_of_range_eq_ker
117109
linear_map.snd_surjective
118110
(linear_map.range_inl R M P)
119111

120-
@[instance, priority 100]
121-
lemma is_artinian_of_fintype [fintype M] : is_artinian R M :=
112+
@[priority 100]
113+
instance is_artinian_of_finite [finite M] : is_artinian R M :=
114+
let ⟨_⟩ := nonempty_fintype M in by exactI
122115
⟨fintype.well_founded_of_trans_of_irrefl _⟩
123116

124117
local attribute [elab_as_eliminator] fintype.induction_empty_option
@@ -151,7 +144,8 @@ end
151144

152145
open is_artinian submodule function
153146

154-
section
147+
section ring
148+
155149
variables {R M : Type*} [ring R] [add_comm_group M] [module R M]
156150

157151
theorem is_artinian_iff_well_founded :
@@ -201,24 +195,26 @@ theorem monotone_stabilizes_iff_artinian :
201195
(∀ (f : ℕ →o (submodule R M)ᵒᵈ), ∃ n, ∀ m, n ≤ m → f n = f m) ↔ is_artinian R M :=
202196
by { rw is_artinian_iff_well_founded, exact well_founded.monotone_chain_condition.symm }
203197

204-
theorem is_artinian.monotone_stabilizes [is_artinian R M] (f : ℕ →o (submodule R M)ᵒᵈ) :
205-
∃ n, ∀ m, n ≤ m → f n = f m :=
198+
namespace is_artinian
199+
200+
variables [is_artinian R M]
201+
202+
theorem monotone_stabilizes (f : ℕ →o (submodule R M)ᵒᵈ) : ∃ n, ∀ m, n ≤ m → f n = f m :=
206203
monotone_stabilizes_iff_artinian.mpr ‹_› f
207204

208205
/-- If `∀ I > J, P I` implies `P J`, then `P` holds for all submodules. -/
209-
lemma is_artinian.induction [is_artinian R M] {P : submodule R M → Prop}
210-
(hgt : ∀ I, (∀ J < I, P J) → P I) (I : submodule R M) : P I :=
211-
well_founded.recursion (well_founded_submodule_lt R M) I hgt
206+
lemma induction {P : submodule R M → Prop} (hgt : ∀ I, (∀ J < I, P J) → P I) (I : submodule R M) :
207+
P I :=
208+
(well_founded_submodule_lt R M).recursion I hgt
212209

213210
/--
214211
For any endomorphism of a Artinian module, there is some nontrivial iterate
215212
with disjoint kernel and range.
216213
-/
217-
theorem is_artinian.exists_endomorphism_iterate_ker_sup_range_eq_top
218-
[I : is_artinian R M] (f : M →ₗ[R] M) : ∃ n : ℕ, n ≠ 0 ∧ (f ^ n).ker ⊔ (f ^ n).range = ⊤ :=
214+
theorem exists_endomorphism_iterate_ker_sup_range_eq_top (f : M →ₗ[R] M) :
215+
∃ n : ℕ, n ≠ 0 ∧ (f ^ n).ker ⊔ (f ^ n).range = ⊤ :=
219216
begin
220-
obtain ⟨n, w⟩ := monotone_stabilizes_iff_artinian.mpr I
221-
(f.iterate_range.comp ⟨λ n, n+1, λ n m w, by linarith⟩),
217+
obtain ⟨n, w⟩ := monotone_stabilizes (f.iterate_range.comp ⟨λ n, n+1, λ n m w, by linarith⟩),
222218
specialize w ((n + 1) + n) (by linarith),
223219
dsimp at w,
224220
refine ⟨n + 1, nat.succ_ne_zero _, _⟩,
@@ -236,28 +232,25 @@ begin
236232
end
237233

238234
/-- Any injective endomorphism of an Artinian module is surjective. -/
239-
theorem is_artinian.surjective_of_injective_endomorphism [is_artinian R M]
240-
(f : M →ₗ[R] M) (s : injective f) : surjective f :=
235+
theorem surjective_of_injective_endomorphism (f : M →ₗ[R] M) (s : injective f) : surjective f :=
241236
begin
242-
obtain ⟨n, ne, w⟩ := is_artinian.exists_endomorphism_iterate_ker_sup_range_eq_top f,
237+
obtain ⟨n, ne, w⟩ := exists_endomorphism_iterate_ker_sup_range_eq_top f,
243238
rw [linear_map.ker_eq_bot.mpr (linear_map.iterate_injective s n), bot_sup_eq,
244239
linear_map.range_eq_top] at w,
245240
exact linear_map.surjective_of_iterate_surjective ne w,
246241
end
247242

248243
/-- Any injective endomorphism of an Artinian module is bijective. -/
249-
theorem is_artinian.bijective_of_injective_endomorphism [is_artinian R M]
250-
(f : M →ₗ[R] M) (s : injective f) : bijective f :=
251-
⟨s, is_artinian.surjective_of_injective_endomorphism f s⟩
244+
theorem bijective_of_injective_endomorphism (f : M →ₗ[R] M) (s : injective f) : bijective f :=
245+
⟨s, surjective_of_injective_endomorphism f s⟩
252246

253247
/--
254248
A sequence `f` of submodules of a artinian module,
255249
with the supremum `f (n+1)` and the infinum of `f 0`, ..., `f n` being ⊤,
256250
is eventually ⊤.
257251
-/
258-
lemma is_artinian.disjoint_partial_infs_eventually_top [I : is_artinian R M]
259-
(f : ℕ → submodule R M) (h : ∀ n, disjoint
260-
(partial_sups (order_dual.to_dual ∘ f) n) (order_dual.to_dual (f (n+1)))) :
252+
lemma disjoint_partial_infs_eventually_top (f : ℕ → submodule R M)
253+
(h : ∀ n, disjoint (partial_sups (order_dual.to_dual ∘ f) n) (order_dual.to_dual (f (n+1)))) :
261254
∃ n : ℕ, ∀ m, n ≤ m → f m = ⊤ :=
262255
begin
263256
-- A little off-by-one cleanup first:
@@ -269,18 +262,48 @@ begin
269262
{ apply w,
270263
exact nat.succ_le_succ_iff.mp p }, },
271264

272-
obtain ⟨n, w⟩ := monotone_stabilizes_iff_artinian.mpr I (partial_sups (order_dual.to_dual ∘ f)),
273-
exact ⟨n, λ m p, (h m).eq_bot_of_ge $ sup_eq_left.1 $ (w (m + 1) $ le_add_right p).symm.trans $
274-
w m p⟩
265+
obtain ⟨n, w⟩ := monotone_stabilizes (partial_sups (order_dual.to_dual ∘ f)),
266+
refine ⟨n, λ m p, _⟩,
267+
exact (h m).eq_bot_of_ge (sup_eq_left.1 $ (w (m + 1) $ le_add_right p).symm.trans $ w m p)
275268
end
276269

277-
universe w
278-
variables {N : Type w} [add_comm_group N] [module R N]
270+
end is_artinian
271+
272+
end ring
273+
274+
section comm_ring
275+
276+
variables {R : Type*} (M : Type*) [comm_ring R] [add_comm_group M] [module R M] [is_artinian R M]
277+
278+
namespace is_artinian
279+
280+
lemma range_smul_pow_stabilizes (r : R) : ∃ n : ℕ, ∀ m, n ≤ m →
281+
(r^n • linear_map.id : M →ₗ[R] M).range = (r^m • linear_map.id).range :=
282+
monotone_stabilizes
283+
⟨λ n, (r^n • linear_map.id : M →ₗ[R] M).range,
284+
λ n m h x ⟨y, hy⟩, ⟨r ^ (m - n) • y,
285+
by { dsimp at ⊢ hy, rw [←smul_assoc, smul_eq_mul, ←pow_add, ←hy, add_tsub_cancel_of_le h] }⟩⟩
286+
287+
variables {M}
288+
289+
lemma exists_pow_succ_smul_dvd (r : R) (x : M) :
290+
∃ (n : ℕ) (y : M), r ^ n.succ • y = r ^ n • x :=
291+
begin
292+
obtain ⟨n, hn⟩ := is_artinian.range_smul_pow_stabilizes M r,
293+
simp_rw [set_like.ext_iff] at hn,
294+
exact ⟨n, by simpa using hn n.succ n.le_succ (r ^ n • x)⟩,
295+
end
296+
297+
end is_artinian
298+
299+
end comm_ring
279300

280301
-- TODO: Prove this for artinian modules
281302
-- /--
282303
-- If `M ⊕ N` embeds into `M`, for `M` noetherian over `R`, then `N` is trivial.
283304
-- -/
305+
-- universe w
306+
-- variables {N : Type w} [add_comm_group N] [module R N]
284307
-- noncomputable def is_noetherian.equiv_punit_of_prod_injective [is_noetherian R M]
285308
-- (f : M × N →ₗ[R] M) (i : injective f) : N ≃ₗ[R] punit.{w+1} :=
286309
-- begin
@@ -294,14 +317,16 @@ variables {N : Type w} [add_comm_group N] [module R N]
294317
-- exact submodule.bot_equiv_punit,
295318
-- end
296319

297-
end
298-
299320
/-- A ring is Artinian if it is Artinian as a module over itself.
300321
301322
Strictly speaking, this should be called `is_left_artinian_ring` but we omit the `left_` for
302323
convenience in the commutative case. For a right Artinian ring, use `is_artinian Rᵐᵒᵖ R`. -/
303324
class is_artinian_ring (R) [ring R] extends is_artinian R R : Prop
304325

326+
-- TODO: Can we define `is_artinian_ring` in a different way so this isn't needed?
327+
@[priority 100]
328+
instance is_artinian_ring_of_finite (R) [ring R] [finite R] : is_artinian_ring R := ⟨⟩
329+
305330
theorem is_artinian_ring_iff {R} [ring R] : is_artinian_ring R ↔ is_artinian R R :=
306331
⟨λ h, h.1, @is_artinian_ring.mk _ _⟩
307332

@@ -369,22 +394,16 @@ theorem is_artinian_span_of_finite (R) {M} [ring R] [add_comm_group M] [module R
369394
[is_artinian_ring R] {A : set M} (hA : A.finite) : is_artinian R (submodule.span R A) :=
370395
is_artinian_of_fg_of_artinian _ (submodule.fg_def.mpr ⟨A, hA, rfl⟩)
371396

372-
theorem is_artinian_ring_of_surjective (R) [ring R] (S) [ring S]
373-
(f : R →+* S) (hf : function.surjective f)
374-
[H : is_artinian_ring R] : is_artinian_ring S :=
397+
theorem function.surjective.is_artinian_ring {R} [ring R] {S} [ring S] {F} [ring_hom_class F R S]
398+
{f : F} (hf : function.surjective f) [H : is_artinian_ring R] : is_artinian_ring S :=
375399
begin
376400
rw [is_artinian_ring_iff, is_artinian_iff_well_founded] at H ⊢,
377-
exact order_embedding.well_founded (ideal.order_embedding_of_surjective f hf) H,
401+
exact (ideal.order_embedding_of_surjective f hf).well_founded H,
378402
end
379403

380-
instance is_artinian_ring_range {R} [ring R] {S} [ring S] (f : R →+* S)
381-
[is_artinian_ring R] : is_artinian_ring f.range :=
382-
is_artinian_ring_of_surjective R f.range f.range_restrict
383-
f.range_restrict_surjective
384-
385-
theorem is_artinian_ring_of_ring_equiv (R) [ring R] {S} [ring S]
386-
(f : R ≃+* S) [is_artinian_ring R] : is_artinian_ring S :=
387-
is_artinian_ring_of_surjective R S f.to_ring_hom f.to_equiv.surjective
404+
instance is_artinian_ring_range {R} [ring R] {S} [ring S] (f : R →+* S) [is_artinian_ring R] :
405+
is_artinian_ring f.range :=
406+
f.range_restrict_surjective.is_artinian_ring
388407

389408
namespace is_artinian_ring
390409

@@ -428,4 +447,35 @@ begin
428447
rwa [← hn (n + 1) (nat.le_succ _)]
429448
end
430449

450+
section localization
451+
452+
variables (S : submonoid R) (L : Type*) [comm_ring L] [algebra R L] [is_localization S L]
453+
454+
include S
455+
456+
/-- Localizing an artinian ring can only reduce the amount of elements. -/
457+
theorem localization_surjective : function.surjective (algebra_map R L) :=
458+
begin
459+
intro r',
460+
obtain ⟨r₁, s, rfl⟩ := is_localization.mk'_surjective S r',
461+
obtain ⟨r₂, h⟩ : ∃ r : R, is_localization.mk' L 1 s = algebra_map R L r,
462+
swap, { exact ⟨r₁ * r₂, by rw [is_localization.mk'_eq_mul_mk'_one, map_mul, h]⟩ },
463+
obtain ⟨n, r, hr⟩ := is_artinian.exists_pow_succ_smul_dvd (s : R) (1 : R),
464+
use r,
465+
rw [smul_eq_mul, smul_eq_mul, pow_succ', mul_assoc] at hr,
466+
apply_fun algebra_map R L at hr,
467+
simp only [map_mul, ←submonoid.coe_pow] at hr,
468+
rw [←is_localization.mk'_one L, is_localization.mk'_eq_iff_eq, one_mul, submonoid.coe_one,
469+
←(is_localization.map_units L (s ^ n)).mul_left_cancel hr, map_mul, mul_comm],
470+
end
471+
472+
lemma localization_artinian : is_artinian_ring L :=
473+
(localization_surjective S L).is_artinian_ring
474+
475+
/-- `is_artinian_ring.localization_artinian` can't be made an instance, as it would make `S` + `R`
476+
into metavariables. However, this is safe. -/
477+
instance : is_artinian_ring (localization S) := localization_artinian S _
478+
479+
end localization
480+
431481
end is_artinian_ring

src/ring_theory/localization/cardinality.lean

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ Copyright (c) 2022 Eric Rodriguez. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Eric Rodriguez
55
-/
6-
import ring_theory.integral_domain
7-
import ring_theory.localization.basic
86
import set_theory.cardinal.ordinal
7+
import ring_theory.artinian
98

109
/-!
1110
# Cardinality of localizations
@@ -23,7 +22,6 @@ submonoid, then your localization is trivial (see `is_localization.unique_of_zer
2322
2423
-/
2524

26-
2725
open_locale cardinal non_zero_divisors
2826

2927
universes u v
@@ -34,25 +32,12 @@ variables {R : Type u} [comm_ring R] (S : submonoid R) {L : Type u} [comm_ring L
3432
[algebra R L] [is_localization S L]
3533
include S
3634

37-
/-- Localizing a finite ring can only reduce the amount of elements. -/
38-
lemma algebra_map_surjective_of_fintype [fintype R] : function.surjective (algebra_map R L) :=
39-
begin
40-
classical,
41-
haveI : fintype L := is_localization.fintype' S L,
42-
intro x,
43-
obtain ⟨⟨r, s⟩, h : x * (algebra_map R L) ↑s = (algebra_map R L) r⟩ := is_localization.surj S x,
44-
obtain ⟨n, hn, hp⟩ :=
45-
(is_of_fin_order_iff_pow_eq_one _).1 (exists_pow_eq_one (is_localization.map_units L s).unit),
46-
rw [units.ext_iff, units.coe_pow, is_unit.unit_spec, ←nat.succ_pred_eq_of_pos hn, pow_succ] at hp,
47-
exact ⟨r * s ^ (n - 1), by erw [map_mul, map_pow, ←h, mul_assoc, hp, mul_one]⟩
48-
end
49-
5035
/-- A localization always has cardinality less than or equal to the base ring. -/
5136
lemma card_le : #L ≤ #R :=
5237
begin
5338
classical,
5439
casesI fintype_or_infinite R,
55-
{ exact cardinal.mk_le_of_surjective (algebra_map_surjective_of_fintype S) },
40+
{ exact cardinal.mk_le_of_surjective (is_artinian_ring.localization_surjective S _) },
5641
erw [←cardinal.mul_eq_self $ cardinal.aleph_0_le_mk R],
5742
set f : R × R → L := λ aa, is_localization.mk' _ aa.1 (if h : aa.2 ∈ S then ⟨aa.2, h⟩ else 1),
5843
refine @cardinal.mk_le_of_surjective _ _ f (λ a, _),

0 commit comments

Comments
 (0)