-
Notifications
You must be signed in to change notification settings - Fork 297
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(ring_theory): submodules and quotients of Noetherian modules are…
… Noetherian Co-authored-by: Kevin Buzzard <k.buzzard@imperial.ac.uk> Co-authored-by: Johan Commelin <johan@commelin.net> Co-authored-by: Johannes Hölzl <johannes.hoelzl@gmx.de> Co-authored-by: Mario Carneiro <di.gama@gmail.com>
- Loading branch information
1 parent
dce0e64
commit 4421f46
Showing
11 changed files
with
391 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
import ring_theory.submodule | ||
import linear_algebra.quotient_module -- I propose moving this to ring_theory | ||
import tactic.tidy | ||
import order.order_iso | ||
|
||
open is_submodule | ||
open quotient_module | ||
|
||
definition module.correspondence_equiv (R) [ring R] (M) [module R M] (N : set M) [is_submodule N] : | ||
(has_le.le : submodule R (quotient M N) → submodule R (quotient M N) → Prop) ≃o | ||
(has_le.le : {X : submodule R M // N ⊆ X} → {X : submodule R M // N ⊆ X} → Prop) := { | ||
to_fun := λ Xbar, ⟨submodule.pullback (mk : M → (quotient M N)) | ||
(is_linear_map_quotient_mk N) Xbar,λ n Hn,begin | ||
show ↑n ∈ Xbar.s, | ||
haveI := Xbar.sub, | ||
have : ((0 : M) : quotient M N) ∈ Xbar.s, | ||
exact @is_submodule.zero _ _ _ _ Xbar.s _, | ||
suffices : (n : quotient M N) = (0 : M), | ||
rwa this, | ||
rw quotient_module.eq, | ||
simp [Hn], | ||
end⟩, | ||
inv_fun := λ X, submodule.pushforward mk (is_linear_map_quotient_mk N) X.val, | ||
left_inv := λ P, submodule.eq $ set.image_preimage_eq quotient_module.quotient.exists_rep, | ||
right_inv := λ ⟨P,HP⟩, subtype.eq $ begin | ||
show submodule.pullback mk _ (submodule.pushforward mk _ P) = P, | ||
ext x, | ||
split,swap,apply set.subset_preimage_image, | ||
rintro ⟨y,Hy,Hyx⟩, | ||
change (y : quotient M N) = x at Hyx, | ||
rw quotient_module.eq at Hyx, | ||
suffices : y - (y - x) ∈ P, | ||
simpa, | ||
haveI := P.sub, | ||
exact is_submodule.sub Hy (HP Hyx), | ||
end, | ||
ord := by tidy | ||
} | ||
|
||
namespace quotient_module | ||
|
||
definition le_order_embedding (R) [ring R] (M) [module R M] (N : set M) [is_submodule N] : | ||
(has_le.le : submodule R (quotient M N) → submodule R (quotient M N) → Prop) ≼o | ||
(has_le.le : submodule R M → submodule R M → Prop) := | ||
order_embedding.trans (order_iso.to_order_embedding $ module.correspondence_equiv R M N) (subtype.order_embedding _ _) | ||
|
||
definition lt_order_embedding (R) [ring R] (M) [module R M] (N : set M) [is_submodule N] : | ||
(has_lt.lt : submodule R (quotient M N) → submodule R (quotient M N) → Prop) ≼o | ||
(has_lt.lt : submodule R M → submodule R M → Prop) := | ||
order_embedding.lt_embedding_of_le_embedding $ quotient_module.le_order_embedding R M N | ||
|
||
end quotient_module |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
import ring_theory.ideals data.fintype order.order_iso data.polynomial linear_algebra.subtype_module | ||
import tactic.tidy | ||
import ring_theory.submodule -- KMB moved some stuff from this file to here | ||
import linear_algebra.quotient_module | ||
import ring_theory.correspondence_theorem | ||
|
||
local attribute [instance] classical.dec | ||
open set lattice | ||
|
||
def is_fg {α β} [ring α] [module α β] | ||
(s : set β) [is_submodule s] : Prop := | ||
∃ t : finset β, _root_.span ↑t = s | ||
|
||
namespace submodule | ||
universes u v | ||
variables {α : Type u} {β : Type v} [ring α] [module α β] | ||
|
||
-- KMB moved around 90 lines to ring_theory/submodule.lean | ||
|
||
def fg (s : submodule α β) : Prop := is_fg (s : set β) | ||
|
||
theorem fg_def {s : submodule α β} : | ||
s.fg ↔ ∃ t : set β, finite t ∧ span t = s := | ||
⟨λ ⟨t, h⟩, ⟨_, finset.finite_to_set t, ext h⟩, begin | ||
rintro ⟨t', h, rfl⟩, | ||
rcases finite.exists_finset_coe h with ⟨t, rfl⟩, | ||
exact ⟨t, rfl⟩ | ||
end⟩ | ||
|
||
def univ : submodule α β := | ||
{ s := univ, | ||
sub := is_submodule.univ } | ||
|
||
end submodule | ||
|
||
def is_noetherian (α β) [ring α] [module α β] : Prop := | ||
∀ (s : submodule α β), s.fg | ||
|
||
theorem is_noetherian_iff_well_founded | ||
{α β} [ring α] [module α β] : | ||
is_noetherian α β ↔ well_founded ((>) : submodule α β → submodule α β → Prop) := | ||
⟨λ h, begin | ||
apply order_embedding.well_founded_iff_no_descending_seq.2, | ||
swap, { apply is_strict_order.swap }, | ||
rintro ⟨⟨N, hN⟩⟩, | ||
let M := ⨆ n, N n, | ||
rcases submodule.fg_def.1 (h M) with ⟨t, h₁, h₂⟩, | ||
have hN' : ∀ {a b}, a ≤ b → N a ≤ N b := | ||
λ a b, (le_iff_le_of_strict_mono N (λ _ _, hN.1)).2, | ||
have : t ⊆ ⋃ i, (N i : set β), | ||
{ rw [← submodule.Union_set_of_directed _ N _], | ||
{ show t ⊆ M, rw ← h₂, | ||
apply subset_span }, | ||
{ apply_instance }, | ||
{ exact λ i j, ⟨max i j, | ||
hN' (le_max_left _ _), | ||
hN' (le_max_right _ _)⟩ } }, | ||
simp [subset_def] at this, | ||
have : ∀ x : t, (∃ (i : ℕ), x.1 ∈ N i), {simpa}, | ||
rcases classical.axiom_of_choice this with ⟨f, hf⟩, | ||
dsimp at f hf, | ||
cases h₁ with h₁, | ||
let A := finset.sup (@finset.univ t h₁) f, | ||
have : M ≤ N A, | ||
{ rw ← h₂, apply submodule.span_subset_iff.2, | ||
exact λ x h, hN' (finset.le_sup (@finset.mem_univ t h₁ _)) | ||
(hf ⟨x, h⟩) }, | ||
exact not_le_of_lt (hN.1 (nat.lt_succ_self A)) | ||
(le_trans (le_supr _ _) this) | ||
end, | ||
λ h N, begin | ||
suffices : ∀ M ≤ N, ∃ s, finite s ∧ M ⊔ submodule.span s = N, | ||
{ rcases this ⊥ bot_le with ⟨s, hs, e⟩, | ||
exact submodule.fg_def.2 ⟨s, hs, by simpa using e⟩ }, | ||
refine λ M, h.induction M _, intros M IH MN, | ||
by_cases h : ∀ x, x ∈ N → x ∈ M, | ||
{ cases le_antisymm MN h, exact ⟨∅, by simp⟩ }, | ||
{ simp [not_forall] at h, | ||
rcases h with ⟨x, h, h₂⟩, | ||
have : ¬M ⊔ submodule.span {x} ≤ M, | ||
{ intro hn, apply h₂, | ||
simpa using submodule.span_subset_iff.1 (le_trans le_sup_right hn) }, | ||
rcases IH (M ⊔ submodule.span {x}) | ||
⟨le_sup_left, this⟩ | ||
(sup_le MN (submodule.span_subset_iff.2 (by simpa))) with ⟨s, hs, hs₂⟩, | ||
refine ⟨insert x s, finite_insert _ hs, _⟩, | ||
rw [← hs₂, sup_assoc, ← submodule.span_union], simp } | ||
end⟩ | ||
|
||
def is_noetherian_ring (α) [ring α] : Prop := is_noetherian α α | ||
|
||
theorem is_noetherian_of_submodule_of_noetherian (R M) [ring R] [module R M] (N : set M) [is_submodule N] | ||
(h : is_noetherian R M) : is_noetherian R N := | ||
begin | ||
rw is_noetherian_iff_well_founded at h ⊢, | ||
convert order_embedding.well_founded (order_embedding.rsymm (submodule.lt_order_embedding R M N)) h,end | ||
|
||
theorem is_noetherian_of_quotient_of_noetherian (R) [ring R] (M) [module R M] (N : set M) [is_submodule N] | ||
(h : is_noetherian R M) : is_noetherian R (quotient_module.quotient M N) := | ||
begin | ||
rw is_noetherian_iff_well_founded at h ⊢, | ||
convert order_embedding.well_founded (order_embedding.rsymm (quotient_module.lt_order_embedding R M N)) h,end |
Oops, something went wrong.