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

Commit e24808b

Browse files
committed
feat(ring_theory/filtration): Artin-Rees lemma and Krull's intersection theorems (#16000)
Co-authored-by: Andrew Yang <36414270+erdOne@users.noreply.github.com>
1 parent 96782a2 commit e24808b

File tree

2 files changed

+268
-1
lines changed

2 files changed

+268
-1
lines changed

src/ring_theory/filtration.lean

Lines changed: 251 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,34 @@ Authors: Andrew Yang
77
import ring_theory.noetherian
88
import ring_theory.rees_algebra
99
import ring_theory.finiteness
10+
import data.polynomial.module
11+
import order.hom.complete_lattice
1012

1113
/-!
1214
1315
# `I`-filtrations of modules
1416
1517
This file contains the definitions and basic results around (stable) `I`-filtrations of modules.
1618
19+
## Main results
20+
21+
- `ideal.filtration`: An `I`-filtration on the module `M` is a sequence of decreasing submodules
22+
`N i` such that `I • N ≤ I (i + 1)`. Note that we do not require the filtration to start from `⊤`.
23+
- `ideal.filtration.stable`: An `I`-filtration is stable if `I • (N i) = N (i + 1)` for large
24+
enough `i`.
25+
- `ideal.filtration.submodule`: The associated module `⨁ Nᵢ` of a filtration, implemented as a
26+
submodule of `M[X]`.
27+
- `ideal.filtration.submodule_fg_iff_stable`: If `F.N i` are all finitely generated, then
28+
`F.stable` iff `F.submodule.fg`.
29+
- `ideal.filtration.stable.of_le`: In a finite module over a noetherian ring,
30+
if `F' ≤ F`, then `F.stable → F'.stable`.
31+
- `ideal.exists_pow_inf_eq_pow_smul`: **Artin-Rees lemma**.
32+
given `N ≤ M`, there exists a `k` such that `IⁿM ⊓ N = Iⁿ⁻ᵏ(IᵏM ⊓ N)` for all `n ≥ k`.
33+
- `ideal.infi_pow_eq_bot_of_local_ring`:
34+
**Krull's intersection theorem** (`⨅ i, I ^ i = ⊥`) for noetherian local rings.
35+
- `ideal.infi_pow_eq_bot_of_is_domain`:
36+
**Krull's intersection theorem** (`⨅ i, I ^ i = ⊥`) for noetherian domains.
37+
1738
-/
1839

1940

@@ -25,7 +46,7 @@ open polynomial
2546
open_locale polynomial big_operators
2647

2748
/-- An `I`-filtration on the module `M` is a sequence of decreasing submodules `N i` such that
28-
`I • N ≤ I (i + 1)`. Note that we do not require the filtration to start from `⊤`. -/
49+
`I • (N i) ≤ N (i + 1)`. Note that we do not require the filtration to start from `⊤`. -/
2950
@[ext]
3051
structure ideal.filtration (M : Type u) [add_comm_group M] [module R M] :=
3152
(N : ℕ → submodule R M)
@@ -196,4 +217,233 @@ begin
196217
refine ⟨(F.antitone _).trans (h₁ n), (F'.antitone _).trans (h₂ n)⟩; simp
197218
end
198219

220+
open polynomial_module
221+
222+
variables (F F')
223+
224+
/-- The `R[IX]`-submodule of `M[X]` associated with an `I`-filtration. -/
225+
protected
226+
def submodule : submodule (rees_algebra I) (polynomial_module R M) :=
227+
{ carrier := { f | ∀ i, f i ∈ F.N i },
228+
add_mem' := λ f g hf hg i, submodule.add_mem _ (hf i) (hg i),
229+
zero_mem' := λ i, submodule.zero_mem _,
230+
smul_mem' := λ r f hf i, begin
231+
rw [subalgebra.smul_def, polynomial_module.smul_apply],
232+
apply submodule.sum_mem,
233+
rintro ⟨j, k⟩ e,
234+
rw finset.nat.mem_antidiagonal at e,
235+
subst e,
236+
exact F.pow_smul_le j k (submodule.smul_mem_smul (r.2 j) (hf k))
237+
end }
238+
239+
@[simp]
240+
lemma mem_submodule (f : polynomial_module R M) : f ∈ F.submodule ↔ ∀ i, f i ∈ F.N i := iff.rfl
241+
242+
lemma inf_submodule : (F ⊓ F').submodule = F.submodule ⊓ F'.submodule :=
243+
by { ext, exact forall_and_distrib }
244+
245+
variables (I M)
246+
247+
/-- `ideal.filtration.submodule` as an `inf_hom` -/
248+
def submodule_inf_hom :
249+
inf_hom (I.filtration M) (submodule (rees_algebra I) (polynomial_module R M)) :=
250+
{ to_fun := ideal.filtration.submodule, map_inf' := inf_submodule }
251+
252+
variables {I M}
253+
254+
lemma submodule_closure_single :
255+
add_submonoid.closure (⋃ i, single R i '' (F.N i : set M)) = F.submodule.to_add_submonoid :=
256+
begin
257+
apply le_antisymm,
258+
{ rw [add_submonoid.closure_le, set.Union_subset_iff],
259+
rintro i _ ⟨m, hm, rfl⟩ j,
260+
rw single_apply,
261+
split_ifs,
262+
{ rwa ← h },
263+
{ exact (F.N j).zero_mem } },
264+
{ intros f hf,
265+
rw [← f.sum_single],
266+
apply add_submonoid.sum_mem _ _,
267+
rintros c -,
268+
exact add_submonoid.subset_closure (set.subset_Union _ c $ set.mem_image_of_mem _ (hf c)) }
269+
end
270+
271+
lemma submodule_span_single :
272+
submodule.span (rees_algebra I) (⋃ i, single R i '' (F.N i : set M)) = F.submodule :=
273+
begin
274+
rw [← submodule.span_closure, submodule_closure_single],
275+
simp,
276+
end
277+
278+
lemma submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
279+
F.submodule = submodule.span _ (⋃ i ≤ n₀, single R i '' (F.N i : set M)) ↔
280+
∀ n ≥ n₀, I • F.N n = F.N (n + 1) :=
281+
begin
282+
rw [← submodule_span_single, ← has_le.le.le_iff_eq, submodule.span_le,
283+
set.Union_subset_iff],
284+
swap, { exact submodule.span_mono (set.Union₂_subset_Union _ _) },
285+
split,
286+
{ intros H n hn,
287+
refine (F.smul_le n).antisymm _,
288+
intros x hx,
289+
obtain ⟨l, hl⟩ := (finsupp.mem_span_iff_total _ _ _).mp (H _ ⟨x, hx, rfl⟩),
290+
replace hl := congr_arg (λ f : ℕ →₀ M, f (n + 1)) hl,
291+
dsimp only at hl,
292+
erw finsupp.single_eq_same at hl,
293+
rw [← hl, finsupp.total_apply, finsupp.sum_apply],
294+
apply submodule.sum_mem _ _,
295+
rintros ⟨_, _, ⟨n', rfl⟩, _, ⟨hn', rfl⟩, m, hm, rfl⟩ -,
296+
dsimp only [subtype.coe_mk],
297+
rw [subalgebra.smul_def, smul_single_apply, if_pos (show n' ≤ n + 1, by linarith)],
298+
have e : n' ≤ n := by linarith,
299+
have := F.pow_smul_le_pow_smul (n - n') n' 1,
300+
rw [tsub_add_cancel_of_le e, pow_one, add_comm _ 1, ← add_tsub_assoc_of_le e, add_comm] at this,
301+
exact this (submodule.smul_mem_smul ((l _).2 $ n + 1 - n') hm) },
302+
{ let F' := submodule.span (rees_algebra I) (⋃ i ≤ n₀, single R i '' (F.N i : set M)),
303+
intros hF i,
304+
have : ∀ i ≤ n₀, single R i '' (F.N i : set M) ⊆ F' :=
305+
λ i hi, set.subset.trans (set.subset_Union₂ i hi) submodule.subset_span,
306+
induction i with j hj,
307+
{ exact this _ (zero_le _) },
308+
by_cases hj' : j.succ ≤ n₀,
309+
{ exact this _ hj' },
310+
simp only [not_le, nat.lt_succ_iff] at hj',
311+
rw [nat.succ_eq_add_one, ← hF _ hj'],
312+
rintro _ ⟨m, hm, rfl⟩,
313+
apply submodule.smul_induction_on hm,
314+
{ intros r hr m' hm',
315+
rw [add_comm, ← monomial_smul_single],
316+
exact F'.smul_mem ⟨_, rees_algebra.monomial_mem.mpr (by rwa pow_one)⟩
317+
(hj $ set.mem_image_of_mem _ hm') },
318+
{ intros x y hx hy, rw map_add, exact F'.add_mem hx hy } }
319+
end
320+
321+
/-- If the components of a filtration are finitely generated, then the filtration is stable iff
322+
its associated submodule of is finitely generated. -/
323+
lemma submodule_fg_iff_stable (hF' : ∀ i, (F.N i).fg) :
324+
F.submodule.fg ↔ F.stable :=
325+
begin
326+
classical,
327+
delta ideal.filtration.stable,
328+
simp_rw ← F.submodule_eq_span_le_iff_stable_ge,
329+
split,
330+
{ rintro H,
331+
apply H.stablizes_of_supr_eq
332+
⟨λ n₀, submodule.span _ (⋃ (i : ℕ) (H : i ≤ n₀), single R i '' ↑(F.N i)), _⟩,
333+
{ dsimp,
334+
rw [← submodule.span_Union, ← submodule_span_single],
335+
congr' 1,
336+
ext,
337+
simp only [set.mem_Union, set.mem_image, set_like.mem_coe, exists_prop],
338+
split,
339+
{ rintro ⟨-, i, -, e⟩, exact ⟨i, e⟩ },
340+
{ rintro ⟨i, e⟩, exact ⟨i, i, le_refl i, e⟩ } },
341+
{ intros n m e,
342+
rw [submodule.span_le, set.Union₂_subset_iff],
343+
intros i hi,
344+
refine (set.subset.trans _ (set.subset_Union₂ i (hi.trans e : _))).trans
345+
submodule.subset_span,
346+
refl } },
347+
{ rintros ⟨n, hn⟩,
348+
rw hn,
349+
simp_rw [submodule.span_Union₂, ← finset.mem_range_succ_iff, supr_subtype'],
350+
apply submodule.fg_supr,
351+
rintro ⟨i, hi⟩,
352+
obtain ⟨s, hs⟩ := hF' i,
353+
have : submodule.span (rees_algebra I) (s.image (lsingle R i) : set (polynomial_module R M))
354+
= submodule.span _ (single R i '' (F.N i : set M)),
355+
{ rw [finset.coe_image, ← submodule.span_span_of_tower R, ← submodule.map_span, hs], refl },
356+
rw [subtype.coe_mk, ← this],
357+
exact ⟨_, rfl⟩ }
358+
end
359+
.
360+
variables {F}
361+
362+
lemma stable.of_le [is_noetherian_ring R] [h : module.finite R M] (hF : F.stable)
363+
{F' : I.filtration M} (hf : F' ≤ F) : F'.stable :=
364+
begin
365+
haveI := is_noetherian_of_fg_of_noetherian' h.1,
366+
rw ← submodule_fg_iff_stable at hF ⊢,
367+
any_goals { intro i, exact is_noetherian.noetherian _ },
368+
have := is_noetherian_of_fg_of_noetherian _ hF,
369+
rw is_noetherian_submodule at this,
370+
exact this _ (order_hom_class.mono (submodule_inf_hom M I) hf),
371+
end
372+
373+
lemma stable.inter_right [is_noetherian_ring R] [h : module.finite R M] (hF : F.stable) :
374+
(F ⊓ F').stable :=
375+
hF.of_le inf_le_left
376+
377+
lemma stable.inter_left [is_noetherian_ring R] [h : module.finite R M] (hF : F.stable) :
378+
(F' ⊓ F).stable :=
379+
hF.of_le inf_le_right
380+
199381
end ideal.filtration
382+
383+
variable (I)
384+
385+
/-- **Artin-Rees lemma** -/
386+
lemma ideal.exists_pow_inf_eq_pow_smul [is_noetherian_ring R] [h : module.finite R M]
387+
(N : submodule R M) : ∃ k : ℕ, ∀ n ≥ k, I ^ n • ⊤ ⊓ N = I ^ (n - k) • (I ^ k • ⊤ ⊓ N) :=
388+
((I.stable_filtration_stable ⊤).inter_right (I.trivial_filtration N)).exists_pow_smul_eq_of_ge
389+
390+
lemma ideal.mem_infi_smul_pow_eq_bot_iff [is_noetherian_ring R] [hM : module.finite R M] (x : M) :
391+
x ∈ (⨅ i : ℕ, I ^ i • ⊤ : submodule R M) ↔ ∃ r : I, (r : R) • x = x :=
392+
begin
393+
let N := (⨅ i : ℕ, I ^ i • ⊤ : submodule R M),
394+
have hN : ∀ k, (I.stable_filtration ⊤ ⊓ I.trivial_filtration N).N k = N,
395+
{ intro k, exact inf_eq_right.mpr ((infi_le _ k).trans $ le_of_eq $ by simp) },
396+
split,
397+
{ haveI := is_noetherian_of_fg_of_noetherian' hM.out,
398+
obtain ⟨r, hr₁, hr₂⟩ := submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul I N
399+
(is_noetherian.noetherian N) _,
400+
{ intro H, exact ⟨⟨r, hr₁⟩, hr₂ _ H⟩ },
401+
obtain ⟨k, hk⟩ := (I.stable_filtration_stable ⊤).inter_right (I.trivial_filtration N),
402+
have := hk k (le_refl _),
403+
rw [hN, hN] at this,
404+
exact le_of_eq this.symm },
405+
{ rintro ⟨r, eq⟩,
406+
rw submodule.mem_infi,
407+
intro i,
408+
induction i with i hi,
409+
{ simp },
410+
{ rw [nat.succ_eq_one_add, pow_add, ← smul_smul, pow_one, ← eq],
411+
exact submodule.smul_mem_smul r.prop hi } }
412+
end
413+
414+
lemma ideal.infi_pow_smul_eq_bot_of_local_ring [is_noetherian_ring R] [local_ring R]
415+
[module.finite R M] (h : I ≠ ⊤) :
416+
(⨅ i : ℕ, I ^ i • ⊤ : submodule R M) = ⊥ :=
417+
begin
418+
rw eq_bot_iff,
419+
intros x hx,
420+
obtain ⟨r, hr⟩ := (I.mem_infi_smul_pow_eq_bot_iff x).mp hx,
421+
have := local_ring.is_unit_one_sub_self_of_mem_nonunits _ (local_ring.le_maximal_ideal h r.prop),
422+
apply this.smul_left_cancel.mp,
423+
swap, { apply_instance },
424+
simp [sub_smul, hr],
425+
end
426+
427+
/-- **Krull's intersection theorem** for noetherian local rings. -/
428+
lemma ideal.infi_pow_eq_bot_of_local_ring [is_noetherian_ring R] [local_ring R] (h : I ≠ ⊤) :
429+
(⨅ i : ℕ, I ^ i) = ⊥ :=
430+
begin
431+
convert I.infi_pow_smul_eq_bot_of_local_ring h,
432+
ext i,
433+
rw [smul_eq_mul, ← ideal.one_eq_top, mul_one],
434+
apply_instance,
435+
end
436+
437+
/-- **Krull's intersection theorem** for noetherian domains. -/
438+
lemma ideal.infi_pow_eq_bot_of_is_domain [is_noetherian_ring R] [is_domain R] (h : I ≠ ⊤) :
439+
(⨅ i : ℕ, I ^ i) = ⊥ :=
440+
begin
441+
rw eq_bot_iff,
442+
intros x hx,
443+
by_contra hx',
444+
have := ideal.mem_infi_smul_pow_eq_bot_iff I x,
445+
simp_rw [smul_eq_mul, ← ideal.one_eq_top, mul_one] at this,
446+
obtain ⟨r, hr⟩ := this.mp hx,
447+
have := mul_right_cancel₀ hx' (hr.trans (one_mul x).symm),
448+
exact I.eq_top_iff_one.not.mp h (this ▸ r.prop),
449+
end

src/ring_theory/noetherian.lean

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,23 @@ begin
314314
exact submodule.span_eq_restrict_scalars R S M X h
315315
end
316316

317+
lemma fg.stablizes_of_supr_eq {M' : submodule R M} (hM' : M'.fg)
318+
(N : ℕ →o submodule R M) (H : supr N = M') : ∃ n, M' = N n :=
319+
begin
320+
obtain ⟨S, hS⟩ := hM',
321+
have : ∀ s : S, ∃ n, (s : M) ∈ N n :=
322+
λ s, (submodule.mem_supr_of_chain N s).mp
323+
(by { rw [H, ← hS], exact submodule.subset_span s.2 }),
324+
choose f hf,
325+
use S.attach.sup f,
326+
apply le_antisymm,
327+
{ conv_lhs { rw ← hS },
328+
rw submodule.span_le,
329+
intros s hs,
330+
exact N.2 (finset.le_sup $ S.mem_attach ⟨s, hs⟩) (hf _) },
331+
{ rw ← H, exact le_supr _ _ }
332+
end
333+
317334
/-- Finitely generated submodules are precisely compact elements in the submodule lattice. -/
318335
theorem fg_iff_compact (s : submodule R M) : s.fg ↔ complete_lattice.is_compact_element s :=
319336
begin

0 commit comments

Comments
 (0)