Skip to content

Commit 25ea657

Browse files
committed
feat(RingTheory/IsPrimary): connection between IsPrimary and radicals of colons (leanprover-community#34140)
This PR adds a couple API lemmas connecting `IsPrimary` and radicals of colons, in preparation for uniqueness of primary decomposition. Co-authored-by: tb65536 <thomas.l.browning@gmail.com>
1 parent 5d050a0 commit 25ea657

5 files changed

Lines changed: 22 additions & 6 deletions

File tree

Mathlib/Algebra/Module/Submodule/Lattice.lean

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ instance : Top (Submodule R M) :=
136136
theorem top_coe : ((⊤ : Submodule R M) : Set M) = Set.univ :=
137137
rfl
138138

139+
@[simp]
140+
theorem coe_eq_univ : (p : Set M) = Set.univ ↔ p = ⊤ := by
141+
rw [iff_comm, ← SetLike.coe_set_eq, top_coe]
142+
139143
@[simp] lemma mem_top {x : M} : x ∈ (⊤ : Submodule R M) := trivial
140144

141145
@[simp]

Mathlib/Algebra/Module/Submodule/Union.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ lemma Submodule.iUnion_ssubset_of_forall_ne_top_of_card_lt (s : Finset ι) (p :
4040
| insert j s hj hj' =>
4141
simp only [ssubset_univ_iff] at hj' ⊢
4242
rcases s.eq_empty_or_nonempty with rfl | hs
43-
· simpa [← SetLike.coe_ne_coe] using h₁ j
43+
· simpa using h₁ j
4444
replace h₂ : s.card + 1 < ENat.card K := by simpa [Finset.card_insert_of_notMem hj] using h₂
4545
specialize hj' (lt_trans ENat.natCast_lt_succ h₂)
4646
contrapose! hj'

Mathlib/RingTheory/Ideal/IsPrimary.lean

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,7 @@ theorem IsPrime.isPrimary {I : Ideal R} (hi : IsPrime I) : I.IsPrimary :=
4646
⟨hi.1, fun {_ _} hxy => (hi.mem_or_mem hxy).imp id fun hyi => le_radical hyi⟩
4747

4848
theorem isPrime_radical {I : Ideal R} (hi : I.IsPrimary) : IsPrime (radical I) :=
49-
⟨mt radical_eq_top.1 hi.1,
50-
fun {x y} ⟨m, hxy⟩ => by
51-
rw [mul_pow] at hxy; rcases (isPrimary_iff.mp hi).2 hxy with h | h
52-
· exact Or.inl ⟨m, h⟩
53-
· exact Or.inr (mem_radical_of_pow_mem h)⟩
49+
I.colon_univ ▸ hi.isPrime_radical_colon
5450

5551
theorem isPrimary_of_isMaximal_radical {I : Ideal R} (hi : IsMaximal (radical I)) :
5652
I.IsPrimary := by

Mathlib/RingTheory/Ideal/Operations.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -826,6 +826,7 @@ theorem IsRadical.radical_le_iff (hJ : J.IsRadical) : I.radical ≤ J ↔ I ≤
826826
theorem radical_le_radical_iff : radical I ≤ radical J ↔ I ≤ radical J :=
827827
(radical_isRadical J).radical_le_iff
828828

829+
@[simp]
829830
theorem radical_eq_top : radical I = ⊤ ↔ I = ⊤ :=
830831
fun h =>
831832
(eq_top_iff_one _).2 <|

Mathlib/RingTheory/IsPrimary.lean

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ open Pointwise
4040

4141
namespace Submodule
4242

43+
open Ideal
44+
4345
section CommSemiring
4446

4547
variable {R M : Type*} [CommSemiring R] [AddCommMonoid M] [Module R M]
@@ -87,6 +89,19 @@ lemma isPrimary_finsetInf {ι : Type*} {s : Finset ι} {f : ι → Submodule R M
8789
rw [colon_finsetInf, Ideal.radical_finset_inf hy H,
8890
hs' (mem_insert_self _ _), hs' (mem_insert_of_mem hy)]
8991

92+
theorem IsPrimary.isPrime_radical_colon (hI : S.IsPrimary) : (S.colon .univ).radical.IsPrime := by
93+
refine isPrime_iff.mpr <| hI.imp (by simp) fun h x y ⟨n, hn⟩ ↦ ?_
94+
simp_rw [← mem_colon_iff_le, ← mem_radical_iff] at h
95+
refine or_iff_not_imp_left.mpr fun hx ↦ ⟨n, ?_⟩
96+
simp only [mul_pow, mem_colon, Set.mem_univ, true_imp_iff, mul_smul] at hn ⊢
97+
exact fun p ↦ (h (hn p)).resolve_right (mt mem_radical_of_pow_mem hx)
98+
99+
theorem IsPrimary.radical_colon_singleton_of_notMem (hI : S.IsPrimary) {m : M} (hm : m ∉ S) :
100+
(S.colon {m}).radical = (S.colon Set.univ).radical :=
101+
le_antisymm (radical_le_radical_iff.mpr fun _ hy ↦
102+
(hI.2 (Submodule.mem_colon_singleton.mp hy)).resolve_left hm)
103+
(radical_mono (Submodule.colon_mono le_rfl (Set.subset_univ {m})))
104+
90105
end CommSemiring
91106

92107
section CommRing

0 commit comments

Comments
 (0)