Documentation

Mathlib.RingTheory.Ideal.Operations

More operations on modules and ideals #

theorem Submodule.coe_span_smul {R' : Type u_1} {M' : Type u_2} [CommSemiring R'] [AddCommMonoid M'] [Module R' M'] (s : Set R') (N : Submodule R' M') :
โ†‘(Ideal.span s) โ€ข N = s โ€ข N
theorem Ideal.smul_eq_mul {R : Type u} [Semiring R] (I J : Ideal R) :
I โ€ข J = I * J

This duplicates the global smul_eq_mul, but doesn't have to unfold anywhere near as much to apply.

theorem Submodule.smul_le_right {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] {I : Ideal R} {N : Submodule R M} :
I โ€ข N โ‰ค N
theorem Submodule.map_le_smul_top {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (I : Ideal R) (f : R โ†’โ‚—[R] M) :
map f I โ‰ค I โ€ข โŠค
@[simp]
theorem Submodule.top_smul {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (N : Submodule R M) :
โŠค โ€ข N = N
theorem Submodule.mul_smul {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (I J : Ideal R) (N : Submodule R M) :
(I * J) โ€ข N = I โ€ข J โ€ข N
theorem Submodule.mem_of_span_top_of_smul_mem {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (M' : Submodule R M) (s : Set R) (hs : Ideal.span s = โŠค) (x : M) (H : โˆ€ (r : โ†‘s), โ†‘r โ€ข x โˆˆ M') :
x โˆˆ M'
@[simp]
theorem Submodule.map_smul'' {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (I : Ideal R) (N : Submodule R M) {M' : Type w} [AddCommMonoid M'] [Module R M'] (f : M โ†’โ‚—[R] M') :
map f (I โ€ข N) = I โ€ข map f N
theorem Submodule.mem_smul_top_iff {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (I : Ideal R) (N : Submodule R M) (x : โ†ฅN) :
x โˆˆ I โ€ข โŠค โ†” โ†‘x โˆˆ I โ€ข N
@[simp]
theorem Submodule.smul_comap_le_comap_smul {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] {M' : Type w} [AddCommMonoid M'] [Module R M'] (f : M โ†’โ‚—[R] M') (S : Submodule R M') (I : Ideal R) :
I โ€ข comap f S โ‰ค comap f (I โ€ข S)
theorem Submodule.comap_smul'' {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] {M' : Type w} [AddCommMonoid M'] [Module R M'] {f : M โ†’โ‚—[R] M'} (hf : Function.Injective โ‡‘f) {p : Submodule R M'} (hp : p โ‰ค f.range) {I : Ideal R} :
comap f (I โ€ข p) = I โ€ข comap f p
theorem Submodule.mem_smul_span_singleton {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] {I : Ideal R} [I.IsTwoSided] {m x : M} :
x โˆˆ I โ€ข (R โˆ™ m) โ†” โˆƒ y โˆˆ I, y โ€ข m = x
theorem Submodule.span_smul_span {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (S : Set R) (T : Set M) [(Ideal.span S).IsTwoSided] :
Ideal.span S โ€ข span R T = span R (S โ€ข T)
theorem Submodule.mem_smul_span {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] {I : Ideal R} [I.IsTwoSided] {s : Set M} {x : M} :
x โˆˆ I โ€ข span R s โ†” x โˆˆ span R (โ†‘I โ€ข s)
theorem Submodule.mem_ideal_smul_span_iff_exists_sum {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (I : Ideal R) [I.IsTwoSided] {ฮน : Type u_4} (f : ฮน โ†’ M) (x : M) :
x โˆˆ I โ€ข span R (Set.range f) โ†” โˆƒ (a : ฮน โ†’โ‚€ R) (_ : โˆ€ (i : ฮน), a i โˆˆ I), (a.sum fun (i : ฮน) (c : R) => c โ€ข f i) = x

If x is an I-multiple of the submodule spanned by f '' s, then we can write x as an I-linear combination of the elements of f '' s.

theorem Submodule.mem_ideal_smul_span_iff_exists_sum' {R : Type u} {M : Type v} [Semiring R] [AddCommMonoid M] [Module R M] (I : Ideal R) [I.IsTwoSided] {ฮน : Type u_4} (s : Set ฮน) (f : ฮน โ†’ M) (x : M) :
x โˆˆ I โ€ข span R (f '' s) โ†” โˆƒ (a : โ†‘s โ†’โ‚€ R) (_ : โˆ€ (i : โ†‘s), a i โˆˆ I), (a.sum fun (i : โ†‘s) (c : R) => c โ€ข f โ†‘i) = x
theorem Submodule.smul_eq_mapโ‚‚ {R : Type u} {M : Type v} [CommSemiring R] [AddCommMonoid M] [Module R M] {I : Ideal R} {N : Submodule R M} :
I โ€ข N = mapโ‚‚ (LinearMap.lsmul R M) I N
theorem Submodule.ideal_span_singleton_smul {R : Type u} {M : Type v} [CommSemiring R] [AddCommMonoid M] [Module R M] (r : R) (N : Submodule R M) :
Ideal.span {r} โ€ข N = r โ€ข N
theorem Submodule.mem_of_span_eq_top_of_smul_pow_mem {R : Type u} {M : Type v} [CommSemiring R] [AddCommMonoid M] [Module R M] (M' : Submodule R M) (s : Set R) (hs : Ideal.span s = โŠค) (x : M) (H : โˆ€ (r : โ†‘s), โˆƒ (n : โ„•), โ†‘r ^ n โ€ข x โˆˆ M') :
x โˆˆ M'

Given s, a generating set of R, to check that an x : M falls in a submodule M' of x, we only need to show that r ^ n โ€ข x โˆˆ M' for some n for each r : s.

@[simp]
theorem Submodule.map_pointwise_smul {R : Type u} {M : Type v} {M' : Type u_1} [CommSemiring R] [AddCommMonoid M] [Module R M] [AddCommMonoid M'] [Module R M'] (r : R) (N : Submodule R M) (f : M โ†’โ‚—[R] M') :
map f (r โ€ข N) = r โ€ข map f N
@[simp]
theorem Ideal.add_eq_sup {R : Type u} [Semiring R] {I J : Ideal R} :
I + J = I โŠ” J
@[simp]
theorem Ideal.sum_eq_sup {R : Type u} [Semiring R] {ฮน : Type u_1} (s : Finset ฮน) (f : ฮน โ†’ Ideal R) :
s.sum f = s.sup f
theorem Ideal.add_eq_one_iff {R : Type u} [Semiring R] {I J : Ideal R} :
I + J = 1 โ†” โˆƒ i โˆˆ I, โˆƒ j โˆˆ J, i + j = 1
theorem Ideal.mul_mem_mul {R : Type u} [Semiring R] {I J : Ideal R} {r s : R} (hr : r โˆˆ I) (hs : s โˆˆ J) :
r * s โˆˆ I * J
theorem Ideal.bot_pow {R : Type u} [Semiring R] {n : โ„•} (hn : n โ‰  0) :
theorem Ideal.pow_mem_pow {R : Type u} [Semiring R] {I : Ideal R} {x : R} (hx : x โˆˆ I) (n : โ„•) :
x ^ n โˆˆ I ^ n
theorem Ideal.mul_le {R : Type u} [Semiring R] {I J K : Ideal R} :
I * J โ‰ค K โ†” โˆ€ r โˆˆ I, โˆ€ s โˆˆ J, r * s โˆˆ K
theorem Ideal.mul_le_left {R : Type u} [Semiring R] {I J : Ideal R} :
I * J โ‰ค J
@[simp]
theorem Ideal.sup_mul_left_self {R : Type u} [Semiring R] {I J : Ideal R} :
I โŠ” J * I = I
@[simp]
theorem Ideal.mul_left_self_sup {R : Type u} [Semiring R] {I J : Ideal R} :
J * I โŠ” I = I
@[simp]
theorem Ideal.sup_mul_right_self {R : Type u} [Semiring R] {I J : Ideal R} [I.IsTwoSided] :
I โŠ” I * J = I
@[simp]
theorem Ideal.mul_right_self_sup {R : Type u} [Semiring R] {I J : Ideal R} [I.IsTwoSided] :
I * J โŠ” I = I
theorem Ideal.mul_assoc {R : Type u} [Semiring R] {I J K : Ideal R} :
I * J * K = I * (J * K)
@[simp]
theorem Ideal.top_mul {R : Type u} [Semiring R] (I : Ideal R) :
โŠค * I = I
theorem Ideal.mul_mono {R : Type u} [Semiring R] {I J K L : Ideal R} (hik : I โ‰ค K) (hjl : J โ‰ค L) :
I * J โ‰ค K * L
theorem Ideal.mul_mono_left {R : Type u} [Semiring R] {I J K : Ideal R} (h : I โ‰ค J) :
I * K โ‰ค J * K
theorem Ideal.mul_mono_right {R : Type u} [Semiring R] {I J K : Ideal R} (h : J โ‰ค K) :
I * J โ‰ค I * K
theorem Ideal.mul_sup {R : Type u} [Semiring R] (I J K : Ideal R) :
I * (J โŠ” K) = I * J โŠ” I * K
theorem Ideal.sup_mul {R : Type u} [Semiring R] (I J K : Ideal R) :
(I โŠ” J) * K = I * K โŠ” J * K
theorem Ideal.mul_iSup {R : Type u} [Semiring R] (I : Ideal R) {ฮน : Sort u_1} (J : ฮน โ†’ Ideal R) :
I * โจ† (i : ฮน), J i = โจ† (i : ฮน), I * J i
theorem Ideal.iSup_mul {R : Type u} [Semiring R] {ฮน : Sort u_1} (J : ฮน โ†’ Ideal R) (I : Ideal R) :
(โจ† (i : ฮน), J i) * I = โจ† (i : ฮน), J i * I
theorem Ideal.pow_le_pow_right {R : Type u} [Semiring R] {I : Ideal R} {m n : โ„•} (h : m โ‰ค n) :
I ^ n โ‰ค I ^ m
theorem Ideal.pow_le_self {R : Type u} [Semiring R] {I : Ideal R} {n : โ„•} (hn : n โ‰  0) :
I ^ n โ‰ค I
theorem Ideal.pow_right_mono {R : Type u} [Semiring R] {I J : Ideal R} (e : I โ‰ค J) (n : โ„•) :
I ^ n โ‰ค J ^ n
@[instance 100]
instance Ideal.IsTwoSided.instHMul {R : Type u} [Semiring R] {I J : Ideal R} [J.IsTwoSided] :
(I * J).IsTwoSided
@[instance 100]
instance Ideal.IsTwoSided.instHPowNat {R : Type u} [Semiring R] {I : Ideal R} [I.IsTwoSided] (n : โ„•) :
(I ^ n).IsTwoSided
theorem Ideal.IsTwoSided.pow_add {R : Type u} [Semiring R] {I : Ideal R} [I.IsTwoSided] (m n : โ„•) :
I ^ (m + n) = I ^ m * I ^ n
theorem Ideal.IsTwoSided.pow_succ {R : Type u} [Semiring R] {I : Ideal R} [I.IsTwoSided] (n : โ„•) :
I ^ (n + 1) = I * I ^ n
@[simp]
theorem Ideal.mul_eq_bot {R : Type u} [Semiring R] {I J : Ideal R} [NoZeroDivisors R] :
I * J = โŠฅ โ†” I = โŠฅ โˆจ J = โŠฅ
instance Ideal.instIsTorsionFreeSubtypeMemSubmodule {R : Type u} [Semiring R] {S : Type u_1} {A : Type u_2} [Semiring S] [SMul R S] [AddCommMonoid A] [Module R A] [Module S A] [IsScalarTower R S A] [Module.IsTorsionFree R A] {I : Submodule S A} :
theorem Ideal.span_mul_span {R : Type u} [Semiring R] (S T : Set R) [(span S).IsTwoSided] :
span S * span T = span (S * T)
theorem Ideal.span_mul_span' {R : Type u} [Semiring R] (S T : Set R) [(span S).IsTwoSided] :
span S * span T = span (S * T)
theorem Ideal.span_singleton_mul_span_singleton {R : Type u} [Semiring R] (r s : R) [(span {r}).IsTwoSided] :
span {r} * span {s} = span {r * s}
theorem Ideal.span_singleton_pow {R : Type u} [Semiring R] (s : R) [(span {s}).IsTwoSided] (n : โ„•) :
span {s} ^ n = span {s ^ n}
theorem Ideal.mem_mul_span_singleton {R : Type u} [Semiring R] {x y : R} {I : Ideal R} [I.IsTwoSided] :
x โˆˆ I * span {y} โ†” โˆƒ z โˆˆ I, z * y = x
theorem Ideal.span_singleton_mul_left_mono {R : Type u} [Semiring R] {I J : Ideal R} [IsDomain R] [I.IsTwoSided] [J.IsTwoSided] {x : R} (hx : x โ‰  0) :
I * span {x} โ‰ค J * span {x} โ†” I โ‰ค J
theorem Ideal.span_singleton_mul_left_inj {R : Type u} [Semiring R] {I J : Ideal R} [IsDomain R] [I.IsTwoSided] [J.IsTwoSided] {x : R} (hx : x โ‰  0) :
I * span {x} = J * span {x} โ†” I = J
theorem Ideal.mul_le_inf {R : Type u} [Semiring R] {I J : Ideal R} [I.IsTwoSided] :
I * J โ‰ค I โŠ“ J
theorem Ideal.sup_mul_eq_of_coprime_left {R : Type u} [Semiring R] {I J K : Ideal R} [I.IsTwoSided] (h : I โŠ” J = โŠค) :
I โŠ” J * K = I โŠ” K
theorem Ideal.sup_mul_eq_of_coprime_right {R : Type u} [Semiring R] {I J K : Ideal R} [J.IsTwoSided] (h : I โŠ” K = โŠค) :
I โŠ” J * K = I โŠ” J
theorem Ideal.mul_sup_eq_of_coprime_left {R : Type u} [Semiring R] {I J K : Ideal R} [J.IsTwoSided] (h : I โŠ” J = โŠค) :
I * K โŠ” J = K โŠ” J
theorem Ideal.mul_sup_eq_of_coprime_right {R : Type u} [Semiring R] {I J K : Ideal R} [I.IsTwoSided] (h : K โŠ” J = โŠค) :
I * K โŠ” J = I โŠ” J
theorem Ideal.sup_iInf_eq_top {R : Type u} [Semiring R] {I : Ideal R} {ฮน : Type u_1} {s : Finset ฮน} {J : ฮน โ†’ Ideal R} [โˆ€ (i : ฮน), (J i).IsTwoSided] (h : โˆ€ i โˆˆ s, I โŠ” J i = โŠค) :
I โŠ” โจ… i โˆˆ s, J i = โŠค
theorem Ideal.iInf_sup_eq_top {R : Type u} [Semiring R] {I : Ideal R} {ฮน : Type u_1} {s : Finset ฮน} {J : ฮน โ†’ Ideal R} [โˆ€ (i : ฮน), (J i).IsTwoSided] (h : โˆ€ i โˆˆ s, J i โŠ” I = โŠค) :
(โจ… i โˆˆ s, J i) โŠ” I = โŠค
theorem Ideal.sup_pow_eq_top {R : Type u} [Semiring R] {I J : Ideal R} [I.IsTwoSided] {n : โ„•} (h : I โŠ” J = โŠค) :
I โŠ” J ^ n = โŠค
theorem Ideal.sup_pow_eq_top' {R : Type u} [Semiring R] {I J : Ideal R} [J.IsTwoSided] {n : โ„•} (h : I โŠ” J = โŠค) :
I โŠ” J ^ n = โŠค
theorem Ideal.pow_sup_eq_top {R : Type u} [Semiring R] {I J : Ideal R} [I.IsTwoSided] {n : โ„•} (h : I โŠ” J = โŠค) :
I ^ n โŠ” J = โŠค
theorem Ideal.pow_sup_eq_top' {R : Type u} [Semiring R] {I J : Ideal R} [J.IsTwoSided] {n : โ„•} (h : I โŠ” J = โŠค) :
I ^ n โŠ” J = โŠค
theorem Ideal.pow_sup_pow_eq_top {R : Type u} [Semiring R] {I J : Ideal R} [I.IsTwoSided] {m n : โ„•} (h : I โŠ” J = โŠค) :
I ^ m โŠ” J ^ n = โŠค
theorem Ideal.pow_sup_pow_eq_top' {R : Type u} [Semiring R] {I J : Ideal R} [J.IsTwoSided] {m n : โ„•} (h : I โŠ” J = โŠค) :
I ^ m โŠ” J ^ n = โŠค
@[simp]
theorem Ideal.mul_top {R : Type u} [Semiring R] (I : Ideal R) [I.IsTwoSided] :
I * โŠค = I
theorem Ideal.span_pair_mul_span_pair {R : Type u} [Semiring R] (w x y z : R) [(span {w, x}).IsTwoSided] :
span {w, x} * span {y, z} = span {w * y, w * z, x * y, x * z}
theorem Ideal.top_pow (R : Type u) [Semiring R] (n : โ„•) :
@[simp]
theorem Ideal.pow_eq_top_iff {R : Type u} [Semiring R] {I : Ideal R} {n : โ„•} :
I ^ n = โŠค โ†” I = โŠค โˆจ n = 0
theorem Ideal.natCast_eq_top {R : Type u} [Semiring R] {n : โ„•} (hn : n โ‰  0) :
โ†‘n = โŠค
theorem Ideal.ofNat_eq_top {R : Type u} [Semiring R] {n : โ„•} [n.AtLeastTwo] :
OfNat.ofNat n = โŠค

3 : Ideal R is not the ideal generated by 3 (which would be spelt Ideal.span {3}), it is simply 1 + 1 + 1 = โŠค.

theorem Ideal.pow_eq_zero_of_mem {R : Type u} [Semiring R] {I : Ideal R} {n m : โ„•} (hnI : I ^ n = 0) (hmn : n โ‰ค m) {x : R} (hx : x โˆˆ I) :
x ^ m = 0
theorem Ideal.mul_mem_mul_rev {R : Type u} [CommSemiring R] {I J : Ideal R} {r s : R} (hr : r โˆˆ I) (hs : s โˆˆ J) :
s * r โˆˆ I * J
theorem Ideal.prod_mem_prod {R : Type u} [CommSemiring R] {ฮน : Type u_2} {s : Finset ฮน} {I : ฮน โ†’ Ideal R} {x : ฮน โ†’ R} :
(โˆ€ i โˆˆ s, x i โˆˆ I i) โ†’ โˆ i โˆˆ s, x i โˆˆ โˆ i โˆˆ s, I i
theorem Ideal.sup_pow_add_le_pow_sup_pow {R : Type u} [CommSemiring R] {I J : Ideal R} {n m : โ„•} :
(I โŠ” J) ^ (n + m) โ‰ค I ^ n โŠ” J ^ m
theorem Ideal.mul_comm {R : Type u} [CommSemiring R] (I J : Ideal R) :
I * J = J * I
theorem Ideal.mem_span_singleton_mul {R : Type u} [CommSemiring R] {x y : R} {I : Ideal R} :
x โˆˆ span {y} * I โ†” โˆƒ z โˆˆ I, y * z = x
@[simp]
theorem Ideal.range_mul {R : Type u} [CommSemiring R] (A : Type u_2) [CommSemiring A] [Module R A] [SMulCommClass R A A] [IsScalarTower R A A] (a : A) :
theorem Ideal.range_mul' {R : Type u} [CommSemiring R] (a : R) :
((LinearMap.mul R R) a).range = span {a}
theorem Ideal.le_span_singleton_mul_iff {R : Type u} [CommSemiring R] {x : R} {I J : Ideal R} :
I โ‰ค span {x} * J โ†” โˆ€ zI โˆˆ I, โˆƒ zJ โˆˆ J, x * zJ = zI
theorem Ideal.span_singleton_mul_le_iff {R : Type u} [CommSemiring R] {x : R} {I J : Ideal R} :
span {x} * I โ‰ค J โ†” โˆ€ z โˆˆ I, x * z โˆˆ J
theorem Ideal.span_singleton_mul_le_span_singleton_mul {R : Type u} [CommSemiring R] {x y : R} {I J : Ideal R} :
span {x} * I โ‰ค span {y} * J โ†” โˆ€ zI โˆˆ I, โˆƒ zJ โˆˆ J, x * zI = y * zJ
theorem Ideal.span_singleton_mul_right_mono {R : Type u} [CommSemiring R] {I J : Ideal R} [IsDomain R] {x : R} (hx : x โ‰  0) :
span {x} * I โ‰ค span {x} * J โ†” I โ‰ค J
theorem Ideal.span_singleton_mul_right_inj {R : Type u} [CommSemiring R] {I J : Ideal R} [IsDomain R] {x : R} (hx : x โ‰  0) :
span {x} * I = span {x} * J โ†” I = J
theorem Ideal.span_singleton_mul_right_injective {R : Type u} [CommSemiring R] [IsDomain R] {x : R} (hx : x โ‰  0) :
Function.Injective fun (x_1 : Ideal R) => span {x} * x_1
theorem Ideal.span_singleton_mul_left_injective {R : Type u} [CommSemiring R] [IsDomain R] {x : R} (hx : x โ‰  0) :
Function.Injective fun (I : Ideal R) => I * span {x}
theorem Ideal.eq_span_singleton_mul {R : Type u} [CommSemiring R] {x : R} (I J : Ideal R) :
I = span {x} * J โ†” (โˆ€ zI โˆˆ I, โˆƒ zJ โˆˆ J, x * zJ = zI) โˆง โˆ€ z โˆˆ J, x * z โˆˆ I
theorem Ideal.span_singleton_mul_eq_span_singleton_mul {R : Type u} [CommSemiring R] {x y : R} (I J : Ideal R) :
span {x} * I = span {y} * J โ†” (โˆ€ zI โˆˆ I, โˆƒ zJ โˆˆ J, x * zI = y * zJ) โˆง โˆ€ zJ โˆˆ J, โˆƒ zI โˆˆ I, x * zI = y * zJ
theorem Ideal.prod_span {R : Type u} [CommSemiring R] {ฮน : Type u_2} (s : Finset ฮน) (I : ฮน โ†’ Set R) :
โˆ i โˆˆ s, span (I i) = span (โˆ i โˆˆ s, I i)
theorem Ideal.prod_span_singleton {R : Type u} [CommSemiring R] {ฮน : Type u_2} (s : Finset ฮน) (I : ฮน โ†’ R) :
โˆ i โˆˆ s, span {I i} = span {โˆ i โˆˆ s, I i}
@[simp]
theorem Ideal.multiset_prod_span_singleton {R : Type u} [CommSemiring R] (m : Multiset R) :
(Multiset.map (fun (x : R) => span {x}) m).prod = span {m.prod}
theorem Ideal.finset_inf_span_singleton {R : Type u} [CommSemiring R] {ฮน : Type u_2} (s : Finset ฮน) (I : ฮน โ†’ R) (hI : (โ†‘s).Pairwise (Function.onFun IsCoprime I)) :
(s.inf fun (i : ฮน) => span {I i}) = span {โˆ i โˆˆ s, I i}
theorem Ideal.iInf_span_singleton {R : Type u} [CommSemiring R] {ฮน : Type u_2} [Fintype ฮน] {I : ฮน โ†’ R} (hI : โˆ€ (i j : ฮน), i โ‰  j โ†’ IsCoprime (I i) (I j)) :
โจ… (i : ฮน), span {I i} = span {โˆ i : ฮน, I i}
theorem Ideal.iInf_span_singleton_natCast {R : Type u_2} [CommRing R] {ฮน : Type u_3} [Fintype ฮน] {I : ฮน โ†’ โ„•} (hI : Pairwise fun (i j : ฮน) => (I i).Coprime (I j)) :
โจ… (i : ฮน), span {โ†‘(I i)} = span {โ†‘(โˆ i : ฮน, I i)}
theorem Ideal.sup_eq_top_iff_isCoprime {R : Type u_2} [CommSemiring R] (x y : R) :
span {x} โŠ” span {y} = โŠค โ†” IsCoprime x y
theorem Ideal.prod_le_inf {R : Type u} {ฮน : Type u_1} [CommSemiring R] {s : Finset ฮน} {f : ฮน โ†’ Ideal R} :
s.prod f โ‰ค s.inf f
theorem Ideal.mul_eq_inf_of_coprime {R : Type u} [CommSemiring R] {I J : Ideal R} (h : I โŠ” J = โŠค) :
I * J = I โŠ“ J
theorem Ideal.sup_prod_eq_top {R : Type u} {ฮน : Type u_1} [CommSemiring R] {I : Ideal R} {s : Finset ฮน} {J : ฮน โ†’ Ideal R} (h : โˆ€ i โˆˆ s, I โŠ” J i = โŠค) :
I โŠ” โˆ i โˆˆ s, J i = โŠค
theorem Ideal.sup_multiset_prod_eq_top {R : Type u} [CommSemiring R] {I : Ideal R} {s : Multiset (Ideal R)} (h : โˆ€ p โˆˆ s, I โŠ” p = โŠค) :
I โŠ” s.prod = โŠค
theorem Ideal.prod_sup_eq_top {R : Type u} {ฮน : Type u_1} [CommSemiring R] {I : Ideal R} {s : Finset ฮน} {J : ฮน โ†’ Ideal R} (h : โˆ€ i โˆˆ s, J i โŠ” I = โŠค) :
(โˆ i โˆˆ s, J i) โŠ” I = โŠค
@[simp]
theorem Ideal.multiset_prod_eq_bot {R : Type u_2} [CommSemiring R] [IsDomain R] {s : Multiset (Ideal R)} :
s.prod = โŠฅ โ†” โŠฅ โˆˆ s

A product of ideals in an integral domain is zero if and only if one of the terms is zero.

theorem Ideal.isCoprime_of_isMaximal {R : Type u} [CommSemiring R] {I J : Ideal R} [I.IsMaximal] [J.IsMaximal] (ne : I โ‰  J) :
theorem Ideal.isCoprime_iff_add {R : Type u} [CommSemiring R] {I J : Ideal R} :
IsCoprime I J โ†” I + J = 1
theorem Ideal.isCoprime_iff_exists {R : Type u} [CommSemiring R] {I J : Ideal R} :
IsCoprime I J โ†” โˆƒ i โˆˆ I, โˆƒ j โˆˆ J, i + j = 1
theorem Ideal.isCoprime_iff_sup_eq {R : Type u} [CommSemiring R] {I J : Ideal R} :
IsCoprime I J โ†” I โŠ” J = โŠค
theorem Ideal.coprime_of_no_prime_ge {R : Type u} [CommSemiring R] {I J : Ideal R} (h : โˆ€ (P : Ideal R), I โ‰ค P โ†’ J โ‰ค P โ†’ ยฌP.IsPrime) :
theorem Ideal.isCoprime_tfae {R : Type u} [CommSemiring R] {I J : Ideal R} :
[IsCoprime I J, Codisjoint I J, I + J = 1, โˆƒ i โˆˆ I, โˆƒ j โˆˆ J, i + j = 1, I โŠ” J = โŠค].TFAE
theorem IsCoprime.add_eq {R : Type u} [CommSemiring R] {I J : Ideal R} (h : IsCoprime I J) :
I + J = 1
theorem IsCoprime.exists {R : Type u} [CommSemiring R] {I J : Ideal R} (h : IsCoprime I J) :
โˆƒ i โˆˆ I, โˆƒ j โˆˆ J, i + j = 1
theorem IsCoprime.sup_eq {R : Type u} [CommSemiring R] {I J : Ideal R} (h : IsCoprime I J) :
I โŠ” J = โŠค
theorem Ideal.isCoprime_biInf {R : Type u} {ฮน : Type u_1} [CommSemiring R] {I : Ideal R} {J : ฮน โ†’ Ideal R} {s : Finset ฮน} (hf : โˆ€ j โˆˆ s, IsCoprime I (J j)) :
IsCoprime I (โจ… j โˆˆ s, J j)
theorem Ideal.mul_eq_inf_of_isCoprime {R : Type u} [CommSemiring R] {I J : Ideal R} (coprime : IsCoprime I J) :
I * J = I โŠ“ J
@[deprecated Ideal.mul_eq_inf_of_isCoprime (since := "2026-03-10")]
theorem Ideal.inf_eq_mul_of_isCoprime {R : Type u} [CommSemiring R] {I J : Ideal R} (coprime : IsCoprime I J) :
I โŠ“ J = I * J
theorem Ideal.prod_eq_iInf_of_pairwise_isCoprime {R : Type u} {ฮน : Type u_1} [CommSemiring R] {s : Finset ฮน} {J : ฮน โ†’ Ideal R} (hp : (โ†‘s).Pairwise (Function.onFun IsCoprime J)) :
โˆ i โˆˆ s, J i = โจ… i โˆˆ s, J i
def Ideal.radical {R : Type u} [CommSemiring R] (I : Ideal R) :

The radical of an ideal I consists of the elements r such that r ^ n โˆˆ I for some n.

Instances For
    theorem Ideal.mem_radical_iff {R : Type u} [CommSemiring R] {I : Ideal R} {r : R} :
    r โˆˆ I.radical โ†” โˆƒ (n : โ„•), r ^ n โˆˆ I
    def Ideal.IsRadical {R : Type u} [CommSemiring R] (I : Ideal R) :

    An ideal is radical if it contains its radical.

    Instances For
      theorem Ideal.radical_eq_iff {R : Type u} [CommSemiring R] {I : Ideal R} :
      I.radical = I โ†” I.IsRadical

      An ideal is radical iff it is equal to its radical.

      theorem Ideal.IsRadical.radical {R : Type u} [CommSemiring R] {I : Ideal R} :
      I.IsRadical โ†’ I.radical = I

      Alias of the reverse direction of Ideal.radical_eq_iff.


      An ideal is radical iff it is equal to its radical.

      theorem Ideal.isRadical_iff_pow_one_lt {R : Type u} [CommSemiring R] {I : Ideal R} (k : โ„•) (hk : 1 < k) :
      I.IsRadical โ†” โˆ€ (r : R), r ^ k โˆˆ I โ†’ r โˆˆ I
      @[simp]
      theorem Ideal.radical_eq_top {R : Type u} [CommSemiring R] {I : Ideal R} :
      I.radical = โŠค โ†” I = โŠค
      theorem Ideal.mem_radical_of_pow_mem {R : Type u} [CommSemiring R] {I : Ideal R} {x : R} {m : โ„•} (hx : x ^ m โˆˆ I.radical) :
      x โˆˆ I.radical
      theorem Ideal.disjoint_powers_iff_notMem {R : Type u} [CommSemiring R] {I : Ideal R} (y : R) (hI : I.IsRadical) :
      Disjoint โ†‘(Submonoid.powers y) โ†‘I โ†” y โˆ‰ I.toAddSubmonoid
      theorem Ideal.radical_sup {R : Type u} [CommSemiring R] (I J : Ideal R) :
      (I โŠ” J).radical = (I.radical โŠ” J.radical).radical
      theorem Ideal.radical_inf {R : Type u} [CommSemiring R] (I J : Ideal R) :
      (I โŠ“ J).radical = I.radical โŠ“ J.radical
      theorem Ideal.IsRadical.inf {R : Type u} [CommSemiring R] {I J : Ideal R} (hI : I.IsRadical) (hJ : J.IsRadical) :
      (I โŠ“ J).IsRadical

      Ideal.radical as an InfTopHom, bundling in that it distributes over inf.

      Instances For
        theorem Ideal.radical_finset_inf {R : Type u} [CommSemiring R] {ฮน : Type u_2} {s : Finset ฮน} {f : ฮน โ†’ Ideal R} {i : ฮน} (hi : i โˆˆ s) (hs : โˆ€ โฆƒy : ฮนโฆ„, y โˆˆ s โ†’ (f y).radical = (f i).radical) :
        (s.inf f).radical = (f i).radical
        theorem Ideal.radical_iInf_le {R : Type u} [CommSemiring R] {ฮน : Sort u_2} (I : ฮน โ†’ Ideal R) :
        (โจ… (i : ฮน), I i).radical โ‰ค โจ… (i : ฮน), (I i).radical

        The reverse inclusion does not hold for e.g. I := fun n : โ„• โ†ฆ Ideal.span {(2 ^ n : โ„ค)}.

        theorem Ideal.isRadical_iInf {R : Type u} [CommSemiring R] {ฮน : Sort u_2} (I : ฮน โ†’ Ideal R) (hI : โˆ€ (i : ฮน), (I i).IsRadical) :
        (โจ… (i : ฮน), I i).IsRadical
        theorem Ideal.radical_mul {R : Type u} [CommSemiring R] (I J : Ideal R) :
        (I * J).radical = I.radical โŠ“ J.radical
        theorem Ideal.radical_pow {R : Type u} [CommSemiring R] (I : Ideal R) {n : โ„•} :
        n โ‰  0 โ†’ (I ^ n).radical = I.radical
        theorem Ideal.IsPrime.mul_le {R : Type u} [CommSemiring R] {I J P : Ideal R} (hp : P.IsPrime) :
        I * J โ‰ค P โ†” I โ‰ค P โˆจ J โ‰ค P
        theorem Ideal.IsPrime.inf_le {R : Type u} [CommSemiring R] {I J P : Ideal R} (hp : P.IsPrime) :
        I โŠ“ J โ‰ค P โ†” I โ‰ค P โˆจ J โ‰ค P
        theorem Ideal.IsPrime.multiset_prod_le {R : Type u} [CommSemiring R] {s : Multiset (Ideal R)} {P : Ideal R} (hp : P.IsPrime) :
        s.prod โ‰ค P โ†” โˆƒ I โˆˆ s, I โ‰ค P
        theorem Ideal.IsPrime.multiset_prod_map_le {R : Type u} {ฮน : Type u_1} [CommSemiring R] {s : Multiset ฮน} (f : ฮน โ†’ Ideal R) {P : Ideal R} (hp : P.IsPrime) :
        (Multiset.map f s).prod โ‰ค P โ†” โˆƒ i โˆˆ s, f i โ‰ค P
        theorem Ideal.IsPrime.multiset_prod_mem_iff_exists_mem {R : Type u} [CommSemiring R] {I : Ideal R} (hI : I.IsPrime) (s : Multiset R) :
        s.prod โˆˆ I โ†” โˆƒ p โˆˆ s, p โˆˆ I
        theorem Ideal.IsPrime.pow_le_iff {R : Type u} [CommSemiring R] {I P : Ideal R} [hP : P.IsPrime] {n : โ„•} (hn : n โ‰  0) :
        I ^ n โ‰ค P โ†” I โ‰ค P
        theorem Ideal.IsPrime.le_of_pow_le {R : Type u} [CommSemiring R] {I P : Ideal R} [hP : P.IsPrime] {n : โ„•} (h : I ^ n โ‰ค P) :
        theorem Ideal.IsPrime.prod_le {R : Type u} {ฮน : Type u_1} [CommSemiring R] {s : Finset ฮน} {f : ฮน โ†’ Ideal R} {P : Ideal R} (hp : P.IsPrime) :
        s.prod f โ‰ค P โ†” โˆƒ i โˆˆ s, f i โ‰ค P
        theorem Ideal.IsPrime.prod_mem_iff {R : Type u} {ฮน : Type u_1} [CommSemiring R] {s : Finset ฮน} {x : ฮน โ†’ R} {p : Ideal R} [hp : p.IsPrime] :
        โˆ i โˆˆ s, x i โˆˆ p โ†” โˆƒ i โˆˆ s, x i โˆˆ p

        The product of a finite number of elements in the commutative semiring R lies in the prime ideal p if and only if at least one of those elements is in p.

        theorem Ideal.IsPrime.prod_mem_iff_exists_mem {R : Type u} [CommSemiring R] {I : Ideal R} (hI : I.IsPrime) (s : Finset R) :
        โˆ x โˆˆ s, x โˆˆ I โ†” โˆƒ p โˆˆ s, p โˆˆ I
        theorem Ideal.IsPrime.inf_le' {R : Type u} {ฮน : Type u_1} [CommSemiring R] {s : Finset ฮน} {f : ฮน โ†’ Ideal R} {P : Ideal R} (hp : P.IsPrime) :
        s.inf f โ‰ค P โ†” โˆƒ i โˆˆ s, f i โ‰ค P
        theorem Ideal.eq_inf_of_isPrime_inf {R : Type u} {ฮน : Type u_1} [CommSemiring R] {s : Finset ฮน} {f : ฮน โ†’ Ideal R} (hp : (s.inf f).IsPrime) :
        โˆƒ i โˆˆ s, f i = s.inf f
        theorem Ideal.IsPrime.notMem_of_isCoprime_of_mem {R : Type u} [CommSemiring R] {I : Ideal R} [I.IsPrime] {x y : R} (h : IsCoprime x y) (hx : x โˆˆ I) :
        y โˆ‰ I
        theorem Ideal.subset_union {R : Type u} [Ring R] {I J K : Ideal R} :
        โ†‘I โІ โ†‘J โˆช โ†‘K โ†” I โ‰ค J โˆจ I โ‰ค K
        theorem Ideal.subset_union_prime' {ฮน : Type u_1} {R : Type u} [CommRing R] {s : Finset ฮน} {f : ฮน โ†’ Ideal R} {a b : ฮน} (hp : โˆ€ i โˆˆ s, (f i).IsPrime) {I : Ideal R} :
        โ†‘I โІ โ†‘(f a) โˆช โ†‘(f b) โˆช โ‹ƒ i โˆˆ โ†‘s, โ†‘(f i) โ†” I โ‰ค f a โˆจ I โ‰ค f b โˆจ โˆƒ i โˆˆ s, I โ‰ค f i
        theorem Ideal.subset_union_prime {ฮน : Type u_1} {R : Type u} [CommRing R] {s : Finset ฮน} {f : ฮน โ†’ Ideal R} (a b : ฮน) (hp : โˆ€ i โˆˆ s, i โ‰  a โ†’ i โ‰  b โ†’ (f i).IsPrime) {I : Ideal R} :
        โ†‘I โІ โ‹ƒ i โˆˆ โ†‘s, โ†‘(f i) โ†” โˆƒ i โˆˆ s, I โ‰ค f i

        Prime avoidance. Atiyah-Macdonald 1.11, Eisenbud 3.3, Matsumura Ex.1.6.

        theorem Ideal.subset_union_prime_finite {R : Type u_2} {ฮน : Type u_3} [CommRing R] {s : Set ฮน} (hs : s.Finite) {f : ฮน โ†’ Ideal R} (a b : ฮน) (hp : โˆ€ i โˆˆ s, i โ‰  a โ†’ i โ‰  b โ†’ (f i).IsPrime) {I : Ideal R} :
        โ†‘I โІ โ‹ƒ i โˆˆ s, โ†‘(f i) โ†” โˆƒ i โˆˆ s, I โ‰ค f i

        Another version of prime avoidance using Set.Finite instead of Finset.

        theorem Ideal.IsMaximal.exists_inv_pow {R : Type u} [CommSemiring R] (I : Ideal R) [I.IsMaximal] {x : R} (hx : x โˆ‰ I) (n : โ„•) :
        โˆƒ (y : R), โˆƒ i โˆˆ I ^ n, y * x + i = 1

        Generalize Ideal.IsMaximal.exists_inv to power of maximal ideals.

        theorem Ideal.IsMaximal.mul_mem_pow {R : Type u} [CommSemiring R] (I : Ideal R) [I.IsMaximal] {a b : R} {n : โ„•} (h : a * b โˆˆ I ^ n) :
        a โˆˆ I โˆจ b โˆˆ I ^ n

        See also Ideal.IsPrime.mul_mem_pow for prime ideal in Dedekind domain.

        theorem Ideal.IsMaximal.mem_pow_mul {R : Type u_2} [CommSemiring R] (I : Ideal R) [I.IsMaximal] {a b : R} {n : โ„•} (h : a * b โˆˆ I ^ n) :
        a โˆˆ I ^ n โˆจ b โˆˆ I

        See also Ideal.IsPrime.mem_pow_mul for prime ideal in Dedekind domain.

        theorem Ideal.le_of_dvd {R : Type u} [CommSemiring R] {I J : Ideal R} :
        I โˆฃ J โ†’ J โ‰ค I

        If I divides J, then I contains J.

        In a Dedekind domain, to divide and contain are equivalent, see Ideal.dvd_iff_le.

        @[simp]
        theorem Ideal.dvd_bot {R : Type u} [CommSemiring R] {I : Ideal R} :
        I โˆฃ โŠฅ
        @[simp]
        theorem Ideal.isUnit_iff {R : Type u} [CommSemiring R] {I : Ideal R} :
        IsUnit I โ†” I = โŠค

        See also isUnit_iff_eq_one.

        @[implicit_reducible]
        noncomputable def Ideal.finsuppTotal (ฮน : Type u_1) (M : Type u_2) [AddCommGroup M] {R : Type u_3} [CommRing R] [Module R M] (I : Ideal R) (v : ฮน โ†’ M) :
        (ฮน โ†’โ‚€ โ†ฅI) โ†’โ‚—[R] M

        A variant of Finsupp.linearCombination that takes in vectors valued in I.

        Instances For
          theorem Ideal.finsuppTotal_apply {ฮน : Type u_1} {M : Type u_2} [AddCommGroup M] {R : Type u_3} [CommRing R] [Module R M] (I : Ideal R) {v : ฮน โ†’ M} (f : ฮน โ†’โ‚€ โ†ฅI) :
          (finsuppTotal ฮน M I v) f = f.sum fun (i : ฮน) (x : โ†ฅI) => โ†‘x โ€ข v i
          theorem Ideal.finsuppTotal_apply_eq_of_fintype {ฮน : Type u_1} {M : Type u_2} [AddCommGroup M] {R : Type u_3} [CommRing R] [Module R M] (I : Ideal R) {v : ฮน โ†’ M} [Fintype ฮน] (f : ฮน โ†’โ‚€ โ†ฅI) :
          (finsuppTotal ฮน M I v) f = โˆ‘ i : ฮน, โ†‘(f i) โ€ข v i
          theorem Ideal.range_finsuppTotal {ฮน : Type u_1} {M : Type u_2} [AddCommGroup M] {R : Type u_3} [CommRing R] [Module R M] (I : Ideal R) {v : ฮน โ†’ M} :
          (finsuppTotal ฮน M I v).range = I โ€ข Submodule.span R (Set.range v)
          @[implicit_reducible]
          noncomputable instance Ideal.instDecidableEqAssociates {R : Type u_1} [CommSemiring R] :
          DecidableEq (Associates (Ideal R))

          Associates (Ideal R) almost never has decidable equality. We add a global instance that Associates (Ideal R) has decidable equality, coming from the choice axiom, so that we don't have to provide [DecidableEq (Associates (Ideal R))] arguments in lemma statements.

          @[implicit_reducible]
          noncomputable instance Ideal.instDecidableIrreducibleAssociates {R : Type u_1} [CommSemiring R] (I : Associates (Ideal R)) :
          Decidable (Irreducible I)

          Associates (Ideal R) almost never has a decidable reducibility check. We add a global instance that members of Associates (Ideal R) have decidable reducibility, coming from the choice axiom, so that we don't have to provide this as an arguments in lemma statements.

          theorem Finsupp.mem_ideal_span_range_iff_exists_finsupp {ฮฑ : Type u_1} {R : Type u_2} [Semiring R] {x : R} {v : ฮฑ โ†’ R} :
          x โˆˆ Ideal.span (Set.range v) โ†” โˆƒ (c : ฮฑ โ†’โ‚€ R), (c.sum fun (i : ฮฑ) (a : R) => a * v i) = x
          theorem Ideal.mem_span_range_iff_exists_fun {ฮฑ : Type u_1} {R : Type u_2} [Semiring R] [Fintype ฮฑ] {x : R} {v : ฮฑ โ†’ R} :
          x โˆˆ span (Set.range v) โ†” โˆƒ (c : ฮฑ โ†’ R), โˆ‘ i : ฮฑ, c i * v i = x

          An element x lies in the span of v iff it can be written as sum โˆ‘ cแตข โ€ข vแตข = x.

          theorem Associates.mk_ne_zero' {R : Type u_1} [CommSemiring R] {r : R} :
          Associates.mk (Ideal.span {r}) โ‰  0 โ†” r โ‰  0
          @[implicit_reducible]
          instance Submodule.moduleSubmodule {R : Type u_1} [CommSemiring R] {M : Type u_2} [AddCommMonoid M] [Module R M] :
          theorem Submodule.span_smul_eq {R : Type u_1} [CommSemiring R] {M : Type u_2} [AddCommMonoid M] [Module R M] (s : Set R) (N : Submodule R M) :
          Ideal.span s โ€ข N = s โ€ข N
          @[simp]
          theorem Submodule.set_smul_top_eq_span {R : Type u_1} [CommSemiring R] (s : Set R) :
          s โ€ข โŠค = Ideal.span s
          theorem Submodule.smul_le_span {R : Type u_1} [CommSemiring R] (s : Set R) (I : Ideal R) :
          s โ€ข I โ‰ค Ideal.span s
          @[implicit_reducible]
          instance Submodule.algebraIdeal {R : Type u_1} [CommSemiring R] {A : Type u_3} [Semiring A] [Algebra R A] :
          def Submodule.mapAlgHom {R : Type u_1} [CommSemiring R] {A : Type u_3} {B : Type u_4} [Semiring A] [Semiring B] [Algebra R A] [Algebra R B] (f : A โ†’โ‚[R] B) :

          Submonoid.map as an AlgHom, when applied to an AlgHom.

          Instances For
            @[simp]
            theorem Submodule.coe_mapAlgHom_apply {R : Type u_1} [CommSemiring R] {A : Type u_3} {B : Type u_4} [Semiring A] [Semiring B] [Algebra R A] [Algebra R B] (f : A โ†’โ‚[R] B) (p : Submodule R A) :
            โ†‘((mapAlgHom f) p) = โ‡‘f '' โ†‘p
            def Submodule.mapAlgEquiv {R : Type u_1} [CommSemiring R] {A : Type u_3} {B : Type u_4} [Semiring A] [Semiring B] [Algebra R A] [Algebra R B] (f : A โ‰ƒโ‚[R] B) :

            Submonoid.map as an AlgEquiv, when applied to an AlgEquiv.

            Instances For
              @[simp]
              theorem Submodule.coe_mapAlgEquiv_symm_apply {R : Type u_1} [CommSemiring R] {A : Type u_3} {B : Type u_4} [Semiring A] [Semiring B] [Algebra R A] [Algebra R B] (f : A โ‰ƒโ‚[R] B) (a : Submodule R B) :
              โ†‘((mapAlgEquiv f).symm a) = (fun (a : B) => f.symm a) '' โ†‘a
              @[simp]
              theorem Submodule.coe_mapAlgEquiv_apply {R : Type u_1} [CommSemiring R] {A : Type u_3} {B : Type u_4} [Semiring A] [Semiring B] [Algebra R A] [Algebra R B] (f : A โ‰ƒโ‚[R] B) (aโœ : Submodule R A) :
              โ†‘((mapAlgEquiv f) aโœ) = (fun (a : A) => f a) '' โ†‘aโœ
              theorem Submodule.smul_top_le_comap_smul_top {R : Type u_1} [Semiring R] {M : Type u_2} {N : Type u_3} [AddCommMonoid M] [AddCommMonoid N] [Module R M] [Module R N] (I : Ideal R) (f : M โ†’โ‚—[R] N) :
              I โ€ข โŠค โ‰ค comap f (I โ€ข โŠค)
              theorem Submodule.comap_smul_top_of_surjective {R : Type u_1} [Semiring R] {M : Type u_2} {N : Type u_3} [AddCommGroup M] [AddCommGroup N] [Module R M] [Module R N] (I : Ideal R) (f : M โ†’โ‚—[R] N) (h : Function.Surjective โ‡‘f) :
              comap f (I โ€ข โŠค) = I โ€ข โŠค โŠ” f.ker
              theorem Ideal.exists_subset_radical_span_sup_of_subset_radical_sup {R : Type u_1} [CommSemiring R] (s : Set R) (I J : Ideal R) (hs : s โІ โ†‘(I โŠ” J).radical) :
              โˆƒ (t : โ†‘s โ†’ R), Set.range t โІ โ†‘I โˆง s โІ โ†‘(span (Set.range t) โŠ” J).radical