Documentation

Mathlib.RingTheory.Ideal.Colon

The colon ideal #

This file defines Submodule.colon N P as the ideal of all elements r : R such that r • P ⊆ N. The normal notation for this would be N : P which has already been taken by type theory.

def Submodule.colon {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (N : Submodule R M) (S : Set M) :

N.colon P is the ideal of all elements r : R such that r • P ⊆ N. We treat it as an infix in lemma names.

Equations
  • N.colon S = { carrier := {r : R | r S N}, add_mem' := , zero_mem' := , smul_mem' := }
Instances For
    theorem Submodule.mem_colon {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {N : Submodule R M} {S : Set M} {r : R} :
    r N.colon S sS, r s N
    @[simp]
    theorem Submodule.mem_colon_singleton {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {N : Submodule R M} {x : M} {r : R} :
    r N.colon {x} r x N
    @[instance 100]
    instance Submodule.instIsTwoSidedColonCoe {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {N : Submodule R M} (P : Submodule R M) :
    (N.colon P).IsTwoSided
    @[simp]
    theorem Submodule.colon_univ {R : Type u_1} [Semiring R] {I : Ideal R} [I.IsTwoSided] :
    @[deprecated Submodule.colon_univ (since := "2026-01-11")]
    theorem Submodule.colon_top {R : Type u_1} [Semiring R] {I : Ideal R} [I.IsTwoSided] :

    Alias of Submodule.colon_univ.

    @[simp]
    theorem Submodule.bot_colon {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {N : Submodule R M} :
    theorem Submodule.colon_mono {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {N₁ N₂ : Submodule R M} {S₁ S₂ : Set M} (hn : N₁ N₂) (hs : S₁ S₂) :
    N₁.colon S₂ N₂.colon S₁
    theorem Ideal.le_colon {R : Type u_1} [Semiring R] {I : Ideal R} {S : Set R} [I.IsTwoSided] :
    theorem Submodule.iInf_colon_iUnion {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (ι₁ : Sort u_3) (f : ι₁Submodule R M) (ι₂ : Sort u_4) (g : ι₂Set M) :
    (⨅ (i : ι₁), f i).colon (⋃ (j : ι₂), g j) = ⨅ (i : ι₁), ⨅ (j : ι₂), (f i).colon (g j)
    @[deprecated Submodule.iInf_colon_iUnion (since := "2026-01-11")]
    theorem Submodule.iInf_colon_iSup {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (ι₁ : Sort u_3) (f : ι₁Submodule R M) (ι₂ : Sort u_4) (g : ι₂Set M) :
    (⨅ (i : ι₁), f i).colon (⋃ (j : ι₂), g j) = ⨅ (i : ι₁), ⨅ (j : ι₂), (f i).colon (g j)

    Alias of Submodule.iInf_colon_iUnion.

    theorem Submodule.colon_inf_eq_left_of_subset {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {N₁ N₂ : Submodule R M} {S : Set M} (h : S N₂) :
    (N₁N₂).colon S = N₁.colon S

    If S ⊆ N₂, then intersecting with N₂ does not change the colon ideal.

    @[simp]
    theorem Submodule.colon_eq_top_iff_subset {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {N : Submodule R M} (S : Set M) :
    N.colon S = S N
    @[simp]
    theorem Submodule.inf_colon {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {N₁ N₂ : Submodule R M} {S : Set M} :
    (N₁N₂).colon S = N₁.colon SN₂.colon S
    @[simp]
    theorem Submodule.iInf_colon {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {S : Set M} {ι : Sort u_3} (f : ιSubmodule R M) :
    (⨅ (i : ι), f i).colon S = ⨅ (i : ι), (f i).colon S
    @[simp]
    theorem Submodule.colon_finsetInf {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {S : Set M} {ι : Type u_3} (s : Finset ι) (f : ιSubmodule R M) :
    (s.inf f).colon S = s.inf fun (i : ι) => (f i).colon S
    @[simp]
    theorem Submodule.top_colon {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {S : Set M} :
    @[simp]
    theorem Submodule.colon_union {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {N : Submodule R M} {S₁ S₂ : Set M} :
    N.colon (S₁ S₂) = N.colon S₁N.colon S₂
    @[simp]
    theorem Submodule.colon_iUnion {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {N : Submodule R M} {ι : Sort u_3} (f : ιSet M) :
    N.colon (⋃ (i : ι), f i) = ⨅ (i : ι), N.colon (f i)
    @[simp]
    theorem Submodule.colon_empty {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {N : Submodule R M} :
    theorem Submodule.colon_singleton_zero {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {N : Submodule R M} :
    theorem Submodule.colon_bot {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {N : Submodule R M} :
    N.colon =
    @[deprecated Submodule.mem_colon (since := "2026-01-15")]
    theorem Submodule.mem_colon' {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {N : Submodule R M} {S : Set M} {r : R} :
    r N.colon S S (comap (r LinearMap.id) N)
    theorem Submodule.mem_colon_iff_le {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {N N' : Submodule R M} {r : R} :
    r N.colon N' r N' N
    theorem Submodule.bot_colon' {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {S : Set M} :

    A variant for arbitrary sets in commutative semirings

    @[simp]
    theorem Submodule.colon_span {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {N : Submodule R M} {S : Set M} :
    N.colon (span R S) = N.colon S
    @[simp]
    theorem Ideal.colon_span {R : Type u_1} [CommSemiring R] {I : Ideal R} {S : Set R} :
    theorem Submodule.mem_colon_span_singleton {R : Type u_1} {M : Type u_2} [CommSemiring R] [AddCommMonoid M] [Module R M] {N : Submodule R M} {x : M} {r : R} :
    r N.colon ↑(R x) r x N
    theorem Ideal.mem_colon_span_singleton {R : Type u_1} [CommSemiring R] {I : Ideal R} {x r : R} :
    r Submodule.colon I (span {x}) r * x I
    @[simp]
    theorem Submodule.annihilator_map_mkQ_eq_colon {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {N P : Submodule R M} :
    (map N.mkQ P).annihilator = N.colon P
    theorem Submodule.annihilator_quotient {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {N : Submodule R M} :
    theorem Ideal.annihilator_quotient {R : Type u_1} [Ring R] {I : Ideal R} [I.IsTwoSided] :