Documentation

Mathlib.RingTheory.Ideal.GoingUp

Ideals over/under ideals in integral extensions #

This file proves some going-up results for integral algebras.

Implementation notes #

The proofs of the comap_ne_bot and comap_lt_comap families use an approach specific for their situation: we construct an element in I.comap f from the coefficients of a minimal polynomial. Once mathlib has more material on the localization at a prime ideal, the results can be proven using more general going-up/going-down theory.

theorem Ideal.coeff_zero_mem_comap_of_root_mem_of_eval_mem {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] {f : R β†’+* S} {I : Ideal S} {r : S} (hr : r ∈ I) {p : Polynomial R} (hp : Polynomial.evalβ‚‚ f r p ∈ I) :
theorem Ideal.coeff_zero_mem_comap_of_root_mem {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] {f : R β†’+* S} {I : Ideal S} {r : S} (hr : r ∈ I) {p : Polynomial R} (hp : Polynomial.evalβ‚‚ f r p = 0) :
theorem Ideal.exists_coeff_ne_zero_mem_comap_of_non_zero_divisor_root_mem {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] {f : R β†’+* S} {I : Ideal S} {r : S} (r_non_zero_divisor : βˆ€ {x : S}, x * r = 0 β†’ x = 0) (hr : r ∈ I) {p : Polynomial R} :
p β‰  0 β†’ Polynomial.evalβ‚‚ f r p = 0 β†’ βˆƒ (i : β„•), p.coeff i β‰  0 ∧ p.coeff i ∈ comap f I

Let P be an ideal in R[x]. The map R[x]/P β†’ (R / (P ∩ R))[x] / (P / (P ∩ R)) is injective.

The identity in this lemma asserts that the "obvious" square

    R    β†’ (R / (P ∩ R))
    ↓          ↓
R[x] / P β†’ (R / (P ∩ R))[x] / (P / (P ∩ R))

commutes. It is used, for instance, in the proof of quotient_mk_comp_C_is_integral_of_jacobson, in the file Mathlib/RingTheory/Jacobson/Polynomial.lean.

theorem Ideal.exists_nonzero_mem_of_ne_bot {R : Type u_1} [CommRing R] {P : Ideal (Polynomial R)} (Pb : P β‰  βŠ₯) (hP : βˆ€ (x : R), Polynomial.C x ∈ P β†’ x = 0) :
βˆƒ p ∈ P, Polynomial.map (Quotient.mk (comap Polynomial.C P)) p β‰  0

This technical lemma asserts the existence of a polynomial p in an ideal P βŠ‚ R[x] that is non-zero in the quotient R / (P ∩ R) [x]. The assumptions are equivalent to P β‰  0 and P ∩ R = (0).

theorem Ideal.exists_coeff_ne_zero_mem_comap_of_root_mem {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] {f : R β†’+* S} {I : Ideal S} [IsDomain S] {r : S} (r_ne_zero : r β‰  0) (hr : r ∈ I) {p : Polynomial R} :
p β‰  0 β†’ Polynomial.evalβ‚‚ f r p = 0 β†’ βˆƒ (i : β„•), p.coeff i β‰  0 ∧ p.coeff i ∈ comap f I
theorem Ideal.exists_coeff_mem_comap_sdiff_comap_of_root_mem_sdiff {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] {f : R β†’+* S} {I J : Ideal S} [I.IsPrime] (hIJ : I ≀ J) {r : S} (hr : r ∈ ↑J \ ↑I) {p : Polynomial R} (p_ne_zero : Polynomial.map (Quotient.mk (comap f I)) p β‰  0) (hpI : Polynomial.evalβ‚‚ f r p ∈ I) :
βˆƒ (i : β„•), p.coeff i ∈ ↑(comap f J) \ ↑(comap f I)
theorem Ideal.comap_lt_comap_of_root_mem_sdiff {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] {f : R β†’+* S} {I J : Ideal S} [I.IsPrime] (hIJ : I ≀ J) {r : S} (hr : r ∈ ↑J \ ↑I) {p : Polynomial R} (p_ne_zero : Polynomial.map (Quotient.mk (comap f I)) p β‰  0) (hp : Polynomial.evalβ‚‚ f r p ∈ I) :
comap f I < comap f J
theorem Ideal.mem_of_one_mem {S : Type u_2} [CommRing S] {I : Ideal S} (h : 1 ∈ I) (x : S) :
x ∈ I
theorem Ideal.comap_lt_comap_of_integral_mem_sdiff {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] {I J : Ideal S} [Algebra R S] [hI : I.IsPrime] (hIJ : I ≀ J) {x : S} (mem : x ∈ ↑J \ ↑I) (integral : IsIntegral R x) :
theorem Ideal.comap_ne_bot_of_root_mem {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] {f : R β†’+* S} {I : Ideal S} [IsDomain S] {r : S} (r_ne_zero : r β‰  0) (hr : r ∈ I) {p : Polynomial R} (p_ne_zero : p β‰  0) (hp : Polynomial.evalβ‚‚ f r p = 0) :
theorem Ideal.comap_ne_bot_of_algebraic_mem {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] {I : Ideal S} [Algebra R S] [IsDomain S] {x : S} (x_ne_zero : x β‰  0) (x_mem : x ∈ I) (hx : IsAlgebraic R x) :
theorem Ideal.comap_ne_bot_of_integral_mem {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] {I : Ideal S} [Algebra R S] [Nontrivial R] [IsDomain S] {x : S} (x_ne_zero : x β‰  0) (x_mem : x ∈ I) (hx : IsIntegral R x) :
theorem Ideal.eq_bot_of_comap_eq_bot {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] {I : Ideal S} [Algebra R S] [Nontrivial R] [IsDomain S] [Algebra.IsIntegral R S] (hI : comap (algebraMap R S) I = βŠ₯) :
theorem Ideal.IsIntegralClosure.comap_lt_comap {R : Type u_1} [CommRing R] (S : Type u_2) [CommRing S] [Algebra R S] {A : Type u_3} [CommRing A] [Algebra R A] [Algebra A S] [IsScalarTower R A S] [IsIntegralClosure A R S] {I J : Ideal A} [I.IsPrime] (I_lt_J : I < J) :
theorem Ideal.IsIntegralClosure.comap_ne_bot {R : Type u_1} [CommRing R] (S : Type u_2) [CommRing S] [Algebra R S] {A : Type u_3} [CommRing A] [Algebra R A] [Algebra A S] [IsScalarTower R A S] [IsIntegralClosure A R S] [IsDomain A] [Nontrivial R] {I : Ideal A} (I_ne_bot : I β‰  βŠ₯) :
theorem Ideal.IsIntegralClosure.eq_bot_of_comap_eq_bot {R : Type u_1} [CommRing R] (S : Type u_2) [CommRing S] [Algebra R S] {A : Type u_3} [CommRing A] [Algebra R A] [Algebra A S] [IsScalarTower R A S] [IsIntegralClosure A R S] [IsDomain A] [Nontrivial R] {I : Ideal A} :
comap (algebraMap R A) I = βŠ₯ β†’ I = βŠ₯
theorem Ideal.IntegralClosure.comap_lt_comap {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] [Algebra R S] {I J : Ideal β†₯(integralClosure R S)} [I.IsPrime] (I_lt_J : I < J) :
comap (algebraMap R β†₯(integralClosure R S)) I < comap (algebraMap R β†₯(integralClosure R S)) J
theorem Ideal.IntegralClosure.comap_ne_bot {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] [Algebra R S] [IsDomain S] [Nontrivial R] {I : Ideal β†₯(integralClosure R S)} (I_ne_bot : I β‰  βŠ₯) :
theorem Ideal.IntegralClosure.eq_bot_of_comap_eq_bot {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] [Algebra R S] [IsDomain S] [Nontrivial R] {I : Ideal β†₯(integralClosure R S)} :
comap (algebraMap R β†₯(integralClosure R S)) I = βŠ₯ β†’ I = βŠ₯
theorem Ideal.exists_ideal_over_prime_of_isIntegral_of_isDomain {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] [Algebra R S] [IsDomain S] [Algebra.IsIntegral R S] (P : Ideal R) [P.IsPrime] (hP : RingHom.ker (algebraMap R S) ≀ P) :
βˆƒ (Q : Ideal S), Q.IsPrime ∧ comap (algebraMap R S) Q = P

comap (algebraMap R S) is a surjection from the prime spec of R to prime spec of S. hP : (algebraMap R S).ker ≀ P is a slight generalization of the extension being injective

theorem Ideal.exists_ideal_over_prime_of_isIntegral_of_isPrime {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] [Algebra R S] [Algebra.IsIntegral R S] (P : Ideal R) [P.IsPrime] (I : Ideal S) [I.IsPrime] (hIP : comap (algebraMap R S) I ≀ P) :
βˆƒ Q β‰₯ I, Q.IsPrime ∧ comap (algebraMap R S) Q = P

More general going-up theorem than exists_ideal_over_prime_of_isIntegral_of_isDomain. TODO: Version of going-up theorem with arbitrary length chains (by induction on this)? Not sure how best to write an ascending chain in Lean

theorem Ideal.exists_ideal_over_prime_of_isIntegral {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] [Algebra R S] [Algebra.IsIntegral R S] (P : Ideal R) [P.IsPrime] (I : Ideal S) (hIP : comap (algebraMap R S) I ≀ P) :
βˆƒ Q β‰₯ I, Q.IsPrime ∧ comap (algebraMap R S) Q = P
theorem Ideal.exists_ideal_over_maximal_of_isIntegral {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] [Algebra R S] [Algebra.IsIntegral R S] (P : Ideal R) [P_max : P.IsMaximal] (hP : RingHom.ker (algebraMap R S) ≀ P) :
βˆƒ (Q : Ideal S), Q.IsMaximal ∧ comap (algebraMap R S) Q = P

comap (algebraMap R S) is a surjection from the max spec of S to max spec of R. hP : (algebraMap R S).ker ≀ P is a slight generalization of the extension being injective

theorem Ideal.map_eq_top_iff_of_ker_le {R : Type u_3} {S : Type u_4} [CommRing R] [CommRing S] (f : R β†’+* S) {I : Ideal R} (hf₁ : RingHom.ker f ≀ I) (hfβ‚‚ : f.IsIntegral) :
theorem Ideal.map_eq_top_iff {R : Type u_3} {S : Type u_4} [CommRing R] [CommRing S] (f : R β†’+* S) {I : Ideal R} (hf₁ : Function.Injective ⇑f) (hfβ‚‚ : f.IsIntegral) :
theorem Ideal.exists_notMem_dvd_algebraMap_of_primesOver_eq_singleton {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] [Algebra R S] {p : Ideal R} [p.IsPrime] {q : Ideal S} [q.IsPrime] (hq : p.primesOver S = {q}) [Algebra.IsIntegral R S] (x : S) (hx : x βˆ‰ q) :
βˆƒ r βˆ‰ p, x ∣ (algebraMap R S) r

If S is an integral R-algebra such that q is the unique prime of S lying over a prime p of R, then any x βˆ‰ q divides some r βˆ‰ p.

instance Ideal.IsMaximal.under (A : Type u_1) [CommRing A] {B : Type u_2} [CommRing B] [Algebra A B] [Algebra.IsIntegral A B] (P : Ideal B) [P.IsMaximal] :

If B is an integral A-algebra, P is a maximal ideal of B, then the pull back of P is also a maximal ideal of A.

theorem Ideal.under_ne_bot (A : Type u_1) [CommRing A] {B : Type u_2} [CommRing B] [Algebra A B] [Algebra.IsIntegral A B] {P : Ideal B} [Nontrivial A] [IsDomain B] (hP : P β‰  βŠ₯) :
instance Ideal.Quotient.algebra_isIntegral_of_liesOver {A : Type u_1} [CommRing A] {B : Type u_2} [CommRing B] [Algebra A B] [Algebra.IsIntegral A B] (P : Ideal B) (p : Ideal A) [P.LiesOver p] :

B β§Έ P is an integral A β§Έ p-algebra if B is an integral A-algebra.

@[deprecated Ideal.exists_maximal_ideal_liesOver_of_isIntegral (since := "2025-11-06")]
theorem Ideal.exists_ideal_liesOver_maximal_of_isIntegral {R : Type u_1} [CommRing R] {S : Type u_2} [CommRing S] [Algebra R S] [Algebra.IsIntegral R S] [FaithfulSMul R S] (P : Ideal R) [P.IsMaximal] :
βˆƒ (Q : Ideal S), Q.IsMaximal ∧ Q.LiesOver P

Alias of Ideal.exists_maximal_ideal_liesOver_of_isIntegral.

instance Ideal.primesOver.isMaximal {A : Type u_1} [CommRing A] {p : Ideal A} [p.IsMaximal] {B : Type u_2} [CommRing B] [Algebra A B] [Algebra.IsIntegral A B] (Q : ↑(p.primesOver B)) :
(↑Q).IsMaximal