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

Commit 1132237

Browse files
committed
feat(ring_theory/ideal_over): lemmas for nonzero ideals lying over nonzero ideals (#3385)
Let `f` be a ring homomorphism from `R` to `S` and `I` be an ideal in `S`. To show that `I.comap f` is not the zero ideal, we can show `I` contains a non-zero root of some non-zero polynomial `p : polynomial R`. As a corollary, if `S` is algebraic over `R` (e.g. the integral closure of `R`), nonzero ideals in `S` lie over nonzero ideals in `R`. I created a new file because `integral_closure.comap_ne_bot` depends on `comap_ne_bot_of_algebraic_mem`, but `ring_theory/algebraic.lean` imports `ring_theory/integral_closure.lean` and I didn't see any obvious join in the dependency graph where they both belonged. Co-authored-by: Vierkantor <Vierkantor@users.noreply.github.com>
1 parent 45477c8 commit 1132237

File tree

3 files changed

+98
-0
lines changed

3 files changed

+98
-0
lines changed

src/linear_algebra/basic.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,13 @@ instance : order_bot (submodule R M) :=
438438
bot_le := λ p x, by simp {contextual := tt},
439439
..submodule.partial_order }
440440

441+
protected lemma eq_bot_iff (p : submodule R M) : p = ⊥ ↔ ∀ x ∈ p, x = (0 : M) :=
442+
⟨ λ h, h.symm ▸ λ x hx, (mem_bot R).mp hx,
443+
λ h, eq_bot_iff.mpr (λ x hx, (mem_bot R).mpr (h x hx)) ⟩
444+
445+
protected lemma ne_bot_iff (p : submodule R M) : p ≠ ⊥ ↔ ∃ x ∈ p, x ≠ (0 : M) :=
446+
by { haveI := classical.prop_decidable, simp_rw [ne.def, p.eq_bot_iff, not_forall] }
447+
441448
/-- The universal set is the top element of the lattice of submodules. -/
442449
instance : has_top (submodule R M) :=
443450
⟨{ carrier := univ, smul_mem' := λ _ _ _, trivial, .. (⊤ : add_submonoid M)}⟩

src/ring_theory/ideal_over.lean

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/-
2+
Copyright (c) 2020 Anne Baanen. All rights reserved.
3+
Released under Apache 2.0 license as described in the file LICENSE.
4+
Author: Anne Baanen
5+
-/
6+
7+
import ring_theory.algebraic
8+
9+
/-!
10+
# Ideals over/under ideals
11+
12+
This file concerns ideals lying over other ideals.
13+
Let `f : R →+* S` be a ring homomorphism (typically a ring extension), `I` an ideal of `R` and
14+
`J` an ideal of `S`. We say `J` lies over `I` (and `I` under `J`) if `I` is the `f`-preimage of `J`.
15+
This is expressed here by writing `I = J.comap f`.
16+
-/
17+
18+
variables {R : Type*} [comm_ring R]
19+
20+
namespace ideal
21+
22+
open polynomial
23+
open submodule
24+
25+
section comm_ring
26+
variables {S : Type*} [comm_ring S] {f : R →+* S} {I : ideal S}
27+
28+
lemma coeff_zero_mem_comap_of_root_mem {r : S} (hr : r ∈ I) {p : polynomial R}
29+
(hp : p.eval₂ f r = 0) : p.coeff 0 ∈ I.comap f :=
30+
begin
31+
rw [←p.div_X_mul_X_add, eval₂_add, eval₂_C, eval₂_mul, eval₂_X] at hp,
32+
refine mem_comap.mpr ((I.add_mem_iff_right _).mp (by simpa only [←hp] using I.zero_mem)),
33+
exact I.mul_mem_left hr
34+
end
35+
end comm_ring
36+
37+
section integral_domain
38+
variables {S : Type*} [integral_domain S] {f : R →+* S} {I : ideal S}
39+
40+
lemma exists_coeff_ne_zero_mem_comap_of_root_mem {r : S} (r_ne_zero : r ≠ 0) (hr : r ∈ I)
41+
{p : polynomial R} : ∀ (p_ne_zero : p ≠ 0) (hp : p.eval₂ f r = 0),
42+
∃ i, p.coeff i ≠ 0 ∧ p.coeff i ∈ I.comap f :=
43+
begin
44+
refine p.rec_on_horner _ _ _,
45+
{ intro h, contradiction },
46+
{ intros p a coeff_eq_zero a_ne_zero ih p_ne_zero hp,
47+
refine ⟨0, _, coeff_zero_mem_comap_of_root_mem hr hp⟩,
48+
simp [coeff_eq_zero, a_ne_zero] },
49+
{ intros p p_nonzero ih mul_nonzero hp,
50+
rw [eval₂_mul, eval₂_X, mul_eq_zero] at hp,
51+
obtain ⟨i, hi, mem⟩ := ih p_nonzero (or.resolve_right hp r_ne_zero),
52+
refine ⟨i + 1, _, _⟩; simp [hi, mem] }
53+
end
54+
55+
lemma comap_ne_bot_of_root_mem {r : S} (r_ne_zero : r ≠ 0) (hr : r ∈ I)
56+
{p : polynomial R} (p_ne_zero : p ≠ 0) (hp : p.eval₂ f r = 0) :
57+
I.comap f ≠ ⊥ :=
58+
λ h, let ⟨i, hi, mem⟩ := exists_coeff_ne_zero_mem_comap_of_root_mem r_ne_zero hr p_ne_zero hp in
59+
absurd ((mem_bot _).mp (eq_bot_iff.mp h mem)) hi
60+
61+
variables [algebra R S]
62+
63+
lemma comap_ne_bot_of_algebraic_mem {I : ideal S} {x : S}
64+
(x_ne_zero : x ≠ 0) (x_mem : x ∈ I) (hx : is_algebraic R x) : I.comap (algebra_map R S) ≠ ⊥ :=
65+
let ⟨p, p_ne_zero, hp⟩ := hx
66+
in comap_ne_bot_of_root_mem x_ne_zero x_mem p_ne_zero hp
67+
68+
lemma comap_ne_bot_of_integral_mem [nontrivial R] {I : ideal S} {x : S}
69+
(x_ne_zero : x ≠ 0) (x_mem : x ∈ I) (hx : is_integral R x) : I.comap (algebra_map R S) ≠ ⊥ :=
70+
comap_ne_bot_of_algebraic_mem x_ne_zero x_mem (hx.is_algebraic R)
71+
72+
lemma integral_closure.comap_ne_bot [nontrivial R] {I : ideal (integral_closure R S)}
73+
(I_ne_bot : I ≠ ⊥) : I.comap (algebra_map R (integral_closure R S)) ≠ ⊥ :=
74+
let ⟨x, x_mem, x_ne_zero⟩ := I.ne_bot_iff.mp I_ne_bot in
75+
comap_ne_bot_of_integral_mem x_ne_zero x_mem (integral_closure.is_integral x)
76+
77+
lemma integral_closure.eq_bot_of_comap_eq_bot [nontrivial R] {I : ideal (integral_closure R S)} :
78+
I.comap (algebra_map R (integral_closure R S)) = ⊥ → I = ⊥ :=
79+
imp_of_not_imp_not _ _ integral_closure.comap_ne_bot
80+
81+
end integral_domain
82+
83+
end ideal

src/ring_theory/integral_closure.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,14 @@ theorem mem_integral_closure_iff_mem_fg {r : A} :
235235
⟨λ hr, ⟨algebra.adjoin R {r}, fg_adjoin_singleton_of_integral _ hr, algebra.subset_adjoin rfl⟩,
236236
λ ⟨M, Hf, hrM⟩, is_integral_of_mem_of_fg M Hf _ hrM⟩
237237

238+
variables {R} {A}
239+
240+
lemma integral_closure.is_integral (x : integral_closure R A) : is_integral R x :=
241+
exists_imp_exists
242+
(λ p, and.imp_right (λ hp, show aeval R (integral_closure R A) x p = 0,
243+
from subtype.ext (trans (p.hom_eval₂ _ (integral_closure R A).val.to_ring_hom x) hp)))
244+
x.2
245+
238246
theorem integral_closure_idem : integral_closure (integral_closure R A : set A) A = ⊥ :=
239247
begin
240248
rw eq_bot_iff, intros r hr,

0 commit comments

Comments
 (0)