# mathlibdocumentation

ring_theory.ideal.operations

# More operations on modules and ideals #

@[protected, instance]
def submodule.has_smul' {R : Type u} {M : Type v} [ M] :
Equations
@[protected]
theorem ideal.smul_eq_mul {R : Type u} (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.

def submodule.annihilator {R : Type u} {M : Type v} [ M] (N : M) :

`N.annihilator` is the ideal of all elements `r : R` such that `r • N = 0`.

Equations
theorem submodule.mem_annihilator {R : Type u} {M : Type v} [ M] {N : M} {r : R} :
r N.annihilator ∀ (n : M), n Nr n = 0
theorem submodule.mem_annihilator' {R : Type u} {M : Type v} [ M] {N : M} {r : R} :
theorem submodule.mem_annihilator_span {R : Type u} {M : Type v} [ M] (s : set M) (r : R) :
r s).annihilator ∀ (n : s), r n = 0
theorem submodule.mem_annihilator_span_singleton {R : Type u} {M : Type v} [ M] (g : M) (r : R) :
r {g}).annihilator r g = 0
theorem submodule.annihilator_bot {R : Type u} {M : Type v} [ M] :
theorem submodule.annihilator_eq_top_iff {R : Type u} {M : Type v} [ M] {N : M} :
N =
theorem submodule.annihilator_mono {R : Type u} {M : Type v} [ M] {N P : M} (h : N P) :
theorem submodule.annihilator_supr {R : Type u} {M : Type v} [ M] (ι : Sort w) (f : ι → M) :
(⨆ (i : ι), f i).annihilator = ⨅ (i : ι), (f i).annihilator
theorem submodule.smul_mem_smul {R : Type u} {M : Type v} [ M] {I : ideal R} {N : M} {r : R} {n : M} (hr : r I) (hn : n N) :
r n I N
theorem submodule.smul_le {R : Type u} {M : Type v} [ M] {I : ideal R} {N P : M} :
I N P ∀ (r : R), r I∀ (n : M), n Nr n P
theorem submodule.smul_induction_on {R : Type u} {M : Type v} [ M] {I : ideal R} {N : M} {p : M → Prop} {x : M} (H : x I N) (Hb : ∀ (r : R), r I∀ (n : M), n Np (r n)) (H1 : ∀ (x y : M), p xp yp (x + y)) :
p x
theorem submodule.mem_smul_span_singleton {R : Type u} {M : Type v} [ M] {I : ideal R} {m x : M} :
x I {m} ∃ (y : R) (H : y I), y m = x
theorem submodule.smul_le_right {R : Type u} {M : Type v} [ M] {I : ideal R} {N : M} :
I N N
theorem submodule.smul_mono {R : Type u} {M : Type v} [ M] {I J : ideal R} {N P : M} (hij : I J) (hnp : N P) :
I N J P
theorem submodule.smul_mono_left {R : Type u} {M : Type v} [ M] {I J : ideal R} {N : M} (h : I J) :
I N J N
theorem submodule.smul_mono_right {R : Type u} {M : Type v} [ M] {I : ideal R} {N P : M} (h : N P) :
I N I P
theorem submodule.map_le_smul_top {R : Type u} {M : Type v} [ M] (I : ideal R) (f : R →ₗ[R] M) :
@[simp]
theorem submodule.annihilator_smul {R : Type u} {M : Type v} [ M] (N : M) :
@[simp]
theorem submodule.annihilator_mul {R : Type u} (I : ideal R) :
@[simp]
theorem submodule.mul_annihilator {R : Type u} (I : ideal R) :
@[simp]
theorem submodule.smul_bot {R : Type u} {M : Type v} [ M] (I : ideal R) :
@[simp]
theorem submodule.bot_smul {R : Type u} {M : Type v} [ M] (N : M) :
@[simp]
theorem submodule.top_smul {R : Type u} {M : Type v} [ M] (N : M) :
N = N
theorem submodule.smul_sup {R : Type u} {M : Type v} [ M] (I : ideal R) (N P : M) :
I (N P) = I N I P
theorem submodule.sup_smul {R : Type u} {M : Type v} [ M] (I J : ideal R) (N : M) :
(I J) N = I N J N
@[protected]
theorem submodule.smul_assoc {R : Type u} {M : Type v} [ M] (I J : ideal R) (N : M) :
(I J) N = I J N
theorem submodule.smul_inf_le {R : Type u} {M : Type v} [ M] (I : ideal R) (M₁ M₂ : M) :
I (M₁ M₂) I M₁ I M₂
theorem submodule.smul_supr {R : Type u} {M : Type v} [ M] {ι : Sort u_1} {I : ideal R} {t : ι → M} :
I supr t = ⨆ (i : ι), I t i
theorem submodule.smul_infi_le {R : Type u} {M : Type v} [ M] {ι : Sort u_1} {I : ideal R} {t : ι → M} :
I infi t ⨅ (i : ι), I t i
theorem submodule.span_smul_span {R : Type u} {M : Type v} [ M] (S : set R) (T : set M) :
= (⋃ (s : R) (H : s S) (t : M) (H : t T), {s t})
theorem submodule.ideal_span_singleton_smul {R : Type u} {M : Type v} [ M] (r : R) (N : M) :
ideal.span {r} N = r N
theorem submodule.span_smul_eq {R : Type u} {M : Type v} [ M] (r : R) (s : set M) :
(r s) = r
theorem submodule.mem_of_span_top_of_smul_mem {R : Type u} {M : Type v} [ M] (M' : M) (s : set R) (hs : = ) (x : M) (H : ∀ (r : s), r x M') :
x M'
theorem submodule.mem_of_span_eq_top_of_smul_pow_mem {R : Type u} {M : Type v} [ M] (M' : M) (s : set R) (hs : = ) (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`.

theorem submodule.map_smul'' {R : Type u} {M : Type v} [ M] (I : ideal R) (N : M) {M' : Type w} [add_comm_monoid M'] [ M'] (f : M →ₗ[R] M') :
(I N) = I
theorem submodule.mem_smul_span {R : Type u} {M : Type v} [ M] {I : ideal R} {s : set M} {x : M} :
x I x (⋃ (a : R) (H : a I) (b : M) (H : b s), {a b})
theorem submodule.mem_ideal_smul_span_iff_exists_sum {R : Type u} {M : Type v} [ M] (I : ideal R) {ι : Type u_1} (f : ι → M) (x : M) :
x I (set.range f) ∃ (a : ι →₀ R) (ha : ∀ (i : ι), a i I), a.sum (λ (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} [ M] (I : ideal R) {ι : Type u_1} (s : set ι) (f : ι → M) (x : M) :
x I (f '' s) ∃ (a : s →₀ R) (ha : ∀ (i : s), a i I), a.sum (λ (i : s) (c : R), c f i) = x
@[simp]
theorem submodule.smul_comap_le_comap_smul {R : Type u} {M : Type v} [ M] {M' : Type w} [add_comm_monoid M'] [ M'] (f : M →ₗ[R] M') (S : M') (I : ideal R) :
I (I S)
def submodule.colon {R : Type u} {M : Type v} [comm_ring R] [ M] (N P : M) :

`N.colon P` is the ideal of all elements `r : R` such that `r • P ⊆ N`.

Equations
theorem submodule.mem_colon {R : Type u} {M : Type v} [comm_ring R] [ M] {N P : M} {r : R} :
r N.colon P ∀ (p : M), p Pr p N
theorem submodule.mem_colon' {R : Type u} {M : Type v} [comm_ring R] [ M] {N P : M} {r : R} :
r N.colon P P
theorem submodule.colon_mono {R : Type u} {M : Type v} [comm_ring R] [ M] {N₁ N₂ P₁ P₂ : M} (hn : N₁ N₂) (hp : P₁ P₂) :
N₁.colon P₂ N₂.colon P₁
theorem submodule.infi_colon_supr {R : Type u} {M : Type v} [comm_ring R] [ M] (ι₁ : Sort w) (f : ι₁ → M) (ι₂ : Sort x) (g : ι₂ → M) :
(⨅ (i : ι₁), f i).colon (⨆ (j : ι₂), g j) = ⨅ (i : ι₁) (j : ι₂), (f i).colon (g j)
@[simp]
theorem ideal.add_eq_sup {R : Type u} [semiring R] {I J : ideal R} :
I + J = I J
@[simp]
theorem ideal.zero_eq_bot {R : Type u} [semiring R] :
0 =
@[protected, instance]
def ideal.has_mul {R : Type u}  :
Equations
@[simp]
theorem ideal.one_eq_top {R : Type u}  :
1 =
theorem ideal.mul_mem_mul {R : Type u} {I J : ideal R} {r s : R} (hr : r I) (hs : s J) :
r * s I * J
theorem ideal.mul_mem_mul_rev {R : Type u} {I J : ideal R} {r s : R} (hr : r I) (hs : s J) :
s * r I * J
theorem ideal.pow_mem_pow {R : Type u} {I : ideal R} {x : R} (hx : x I) (n : ) :
x ^ n I ^ n
theorem ideal.prod_mem_prod {R : Type u} {ι : Type u_1} {s : finset ι} {I : ι → } {x : ι → R} :
(∀ (i : ι), i sx i I i)s.prod (λ (i : ι), x i) s.prod (λ (i : ι), I i)
theorem ideal.mul_le {R : Type u} {I J K : ideal R} :
I * J K ∀ (r : R), r I∀ (s : R), s Jr * s K
theorem ideal.mul_le_left {R : Type u} {I J : ideal R} :
I * J J
theorem ideal.mul_le_right {R : Type u} {I J : ideal R} :
I * J I
@[simp]
theorem ideal.sup_mul_right_self {R : Type u} {I J : ideal R} :
I I * J = I
@[simp]
theorem ideal.sup_mul_left_self {R : Type u} {I J : ideal R} :
I J * I = I
@[simp]
theorem ideal.mul_right_self_sup {R : Type u} {I J : ideal R} :
I * J I = I
@[simp]
theorem ideal.mul_left_self_sup {R : Type u} {I J : ideal R} :
J * I I = I
@[protected]
theorem ideal.mul_comm {R : Type u} (I J : ideal R) :
I * J = J * I
@[protected]
theorem ideal.mul_assoc {R : Type u} (I J K : ideal R) :
I * J * K = I * (J * K)
theorem ideal.span_mul_span {R : Type u} (S T : set R) :
= ideal.span (⋃ (s : R) (H : s S) (t : R) (H : t T), {s * t})
theorem ideal.span_mul_span' {R : Type u} (S T : set R) :
= ideal.span (S * T)
theorem ideal.span_singleton_mul_span_singleton {R : Type u} (r s : R) :
theorem ideal.span_singleton_pow {R : Type u} (s : R) (n : ) :
ideal.span {s} ^ n = ideal.span {s ^ n}
theorem ideal.mem_mul_span_singleton {R : Type u} {x y : R} {I : ideal R} :
x I * ideal.span {y} ∃ (z : R) (H : z I), z * y = x
theorem ideal.mem_span_singleton_mul {R : Type u} {x y : R} {I : ideal R} :
x ideal.span {y} * I ∃ (z : R) (H : z I), y * z = x
theorem ideal.le_span_singleton_mul_iff {R : Type u} {x : R} {I J : ideal R} :
I ideal.span {x} * J ∀ (zI : R), zI I(∃ (zJ : R) (H : zJ J), x * zJ = zI)
theorem ideal.span_singleton_mul_le_iff {R : Type u} {x : R} {I J : ideal R} :
ideal.span {x} * I J ∀ (z : R), z Ix * z J
theorem ideal.span_singleton_mul_le_span_singleton_mul {R : Type u} {x y : R} {I J : ideal R} :
ideal.span {x} * I ideal.span {y} * J ∀ (zI : R), zI I(∃ (zJ : R) (H : zJ J), x * zI = y * zJ)
theorem ideal.eq_span_singleton_mul {R : Type u} {x : R} (I J : ideal R) :
I = ideal.span {x} * J (∀ (zI : R), zI I(∃ (zJ : R) (H : zJ J), x * zJ = zI)) ∀ (z : R), z Jx * z I
theorem ideal.span_singleton_mul_eq_span_singleton_mul {R : Type u} {x y : R} (I J : ideal R) :
ideal.span {x} * I = ideal.span {y} * J (∀ (zI : R), zI I(∃ (zJ : R) (H : zJ J), x * zI = y * zJ)) ∀ (zJ : R), zJ J(∃ (zI : R) (H : zI I), x * zI = y * zJ)
theorem ideal.prod_span {R : Type u} {ι : Type u_1} (s : finset ι) (I : ι → set R) :
s.prod (λ (i : ι), ideal.span (I i)) = ideal.span (s.prod (λ (i : ι), I i))
theorem ideal.prod_span_singleton {R : Type u} {ι : Type u_1} (s : finset ι) (I : ι → R) :
s.prod (λ (i : ι), ideal.span {I i}) = ideal.span {s.prod (λ (i : ι), I i)}
theorem ideal.finset_inf_span_singleton {R : Type u} {ι : Type u_1} (s : finset ι) (I : ι → R) (hI : s.pairwise (is_coprime on I)) :
s.inf (λ (i : ι), ideal.span {I i}) = ideal.span {s.prod (λ (i : ι), I i)}
theorem ideal.infi_span_singleton {R : Type u} {ι : Type u_1} [fintype ι] (I : ι → R) (hI : ∀ (i j : ι), i jis_coprime (I i) (I j)) :
(⨅ (i : ι), ideal.span {I i}) = ideal.span {finset.univ.prod (λ (i : ι), I i)}
theorem ideal.sup_eq_top_iff_is_coprime {R : Type u_1} (x y : R) :
theorem ideal.mul_le_inf {R : Type u} {I J : ideal R} :
I * J I J
theorem ideal.multiset_prod_le_inf {R : Type u} {s : multiset (ideal R)} :
theorem ideal.prod_le_inf {R : Type u} {ι : Type u_1} {s : finset ι} {f : ι → } :
s.prod f s.inf f
theorem ideal.mul_eq_inf_of_coprime {R : Type u} {I J : ideal R} (h : I J = ) :
I * J = I J
theorem ideal.sup_mul_eq_of_coprime_left {R : Type u} {I J K : ideal R} (h : I J = ) :
I J * K = I K
theorem ideal.sup_mul_eq_of_coprime_right {R : Type u} {I J K : ideal R} (h : I K = ) :
I J * K = I J
theorem ideal.mul_sup_eq_of_coprime_left {R : Type u} {I J K : ideal R} (h : I J = ) :
I * K J = K J
theorem ideal.mul_sup_eq_of_coprime_right {R : Type u} {I J K : ideal R} (h : K J = ) :
I * K J = I J
theorem ideal.sup_prod_eq_top {R : Type u} {ι : Type u_1} {I : ideal R} {s : finset ι} {J : ι → } (h : ∀ (i : ι), i sI J i = ) :
I s.prod (λ (i : ι), J i) =
theorem ideal.sup_infi_eq_top {R : Type u} {ι : Type u_1} {I : ideal R} {s : finset ι} {J : ι → } (h : ∀ (i : ι), i sI J i = ) :
(I ⨅ (i : ι) (H : i s), J i) =
theorem ideal.prod_sup_eq_top {R : Type u} {ι : Type u_1} {I : ideal R} {s : finset ι} {J : ι → } (h : ∀ (i : ι), i sJ i I = ) :
s.prod (λ (i : ι), J i) I =
theorem ideal.infi_sup_eq_top {R : Type u} {ι : Type u_1} {I : ideal R} {s : finset ι} {J : ι → } (h : ∀ (i : ι), i sJ i I = ) :
(⨅ (i : ι) (H : i s), J i) I =
theorem ideal.sup_pow_eq_top {R : Type u} {I J : ideal R} {n : } (h : I J = ) :
I J ^ n =
theorem ideal.pow_sup_eq_top {R : Type u} {I J : ideal R} {n : } (h : I J = ) :
I ^ n J =
theorem ideal.pow_sup_pow_eq_top {R : Type u} {I J : ideal R} {m n : } (h : I J = ) :
I ^ m J ^ n =
@[simp]
theorem ideal.mul_bot {R : Type u} (I : ideal R) :
@[simp]
theorem ideal.bot_mul {R : Type u} (I : ideal R) :
@[simp]
theorem ideal.mul_top {R : Type u} (I : ideal R) :
I * = I
@[simp]
theorem ideal.top_mul {R : Type u} (I : ideal R) :
* I = I
theorem ideal.mul_mono {R : Type u} {I J K L : ideal R} (hik : I K) (hjl : J L) :
I * J K * L
theorem ideal.mul_mono_left {R : Type u} {I J K : ideal R} (h : I J) :
I * K J * K
theorem ideal.mul_mono_right {R : Type u} {I J K : ideal R} (h : J K) :
I * J I * K
theorem ideal.mul_sup {R : Type u} (I J K : ideal R) :
I * (J K) = I * J I * K
theorem ideal.sup_mul {R : Type u} (I J K : ideal R) :
(I J) * K = I * K J * K
theorem ideal.pow_le_pow {R : Type u} {I : ideal R} {m n : } (h : m n) :
I ^ n I ^ m
theorem ideal.pow_le_self {R : Type u} {I : ideal R} {n : } (hn : n 0) :
I ^ n I
theorem ideal.pow_mono {R : Type u} {I J : ideal R} (e : I J) (n : ) :
I ^ n J ^ n
theorem ideal.mul_eq_bot {R : Type u_1} {I J : ideal R} :
I * J = I = J =
@[protected, instance]
def ideal.no_zero_divisors {R : Type u_1}  :
theorem ideal.prod_eq_bot {R : Type u_1} [comm_ring R] [is_domain R] {s : multiset (ideal R)} :
s.prod = ∃ (I : ideal R) (H : I s), I =

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

def ideal.radical {R : Type u} (I : ideal R) :

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

Equations
theorem ideal.le_radical {R : Type u} {I : ideal R} :
theorem ideal.radical_top (R : Type u)  :
theorem ideal.radical_mono {R : Type u} {I J : ideal R} (H : I J) :
@[simp]
theorem ideal.radical_idem {R : Type u} (I : ideal R) :
theorem ideal.radical_le_radical_iff {R : Type u} {I J : ideal R} :
theorem ideal.radical_eq_top {R : Type u} {I : ideal R} :
I =
theorem ideal.is_prime.radical {R : Type u} {I : ideal R} (H : I.is_prime) :
theorem ideal.radical_sup {R : Type u} (I J : ideal R) :
theorem ideal.radical_inf {R : Type u} (I J : ideal R) :
theorem ideal.radical_mul {R : Type u} (I J : ideal R) :
theorem ideal.is_prime.radical_le_iff {R : Type u} {I J : ideal R} (hj : J.is_prime) :
I.radical J I J
theorem ideal.radical_eq_Inf {R : Type u} (I : ideal R) :
@[simp]
theorem ideal.radical_bot_of_is_domain {R : Type u}  :
@[protected, instance]
def ideal.comm_semiring {R : Type u}  :
Equations
theorem ideal.top_pow (R : Type u) (n : ) :
theorem ideal.radical_pow {R : Type u} (I : ideal R) (n : ) (H : n > 0) :
(I ^ n).radical = I.radical
theorem ideal.is_prime.mul_le {R : Type u} {I J P : ideal R} (hp : P.is_prime) :
I * J P I P J P
theorem ideal.is_prime.inf_le {R : Type u} {I J P : ideal R} (hp : P.is_prime) :
I J P I P J P
theorem ideal.is_prime.multiset_prod_le {R : Type u} {s : multiset (ideal R)} {P : ideal R} (hp : P.is_prime) (hne : s 0) :
s.prod P ∃ (I : ideal R) (H : I s), I P
theorem ideal.is_prime.multiset_prod_map_le {R : Type u} {ι : Type u_1} {s : multiset ι} (f : ι → ) {P : ideal R} (hp : P.is_prime) (hne : s 0) :
s).prod P ∃ (i : ι) (H : i s), f i P
theorem ideal.is_prime.prod_le {R : Type u} {ι : Type u_1} {s : finset ι} {f : ι → } {P : ideal R} (hp : P.is_prime) (hne : s.nonempty) :
s.prod f P ∃ (i : ι) (H : i s), f i P
theorem ideal.is_prime.inf_le' {R : Type u} {ι : Type u_1} {s : finset ι} {f : ι → } {P : ideal R} (hp : P.is_prime) (hsne : s.nonempty) :
s.inf f P ∃ (i : ι) (H : i s), f i P
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} [comm_ring R] {s : finset ι} {f : ι → } {a b : ι} (hp : ∀ (i : ι), i s(f i).is_prime) {I : ideal R} :
(I (f a) (f b) ⋃ (i : ι) (H : i s), (f i)) I f a I f b ∃ (i : ι) (H : i s), I f i
theorem ideal.subset_union_prime {ι : Type u_1} {R : Type u} [comm_ring R] {s : finset ι} {f : ι → } (a b : ι) (hp : ∀ (i : ι), i si ai b(f i).is_prime) {I : ideal R} :
(I ⋃ (i : ι) (H : i s), (f i)) ∃ (i : ι) (H : i s), I f i

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

theorem ideal.le_of_dvd {R : Type u} {I J : ideal R} :
I JJ I

If `I` divides `J`, then `I` contains `J`.

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

theorem ideal.is_unit_iff {R : Type u} {I : ideal R} :
I =
@[protected, instance]
def ideal.unique_units {R : Type u}  :
Equations
def ideal.map {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (I : ideal R) :

`I.map f` is the span of the image of the ideal `I` under `f`, which may be bigger than the image itself.

Equations
def ideal.comap {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (I : ideal S) :

`I.comap f` is the preimage of `I` under `f`.

Equations
Instances for `ideal.comap`
theorem ideal.map_mono {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] {f : F} {I J : ideal R} (h : I J) :
I J
theorem ideal.mem_map_of_mem {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {I : ideal R} {x : R} (h : x I) :
f x I
theorem ideal.apply_coe_mem_map {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (I : ideal R) (x : I) :
f x I
theorem ideal.map_le_iff_le_comap {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] {f : F} {I : ideal R} {K : ideal S} :
I K I K
@[simp]
theorem ideal.mem_comap {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] {f : F} {K : ideal S} {x : R} :
x K f x K
theorem ideal.comap_mono {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] {f : F} {K L : ideal S} (h : K L) :
K L
theorem ideal.comap_ne_top {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {K : ideal S} (hK : K ) :
K
theorem ideal.map_le_comap_of_inv_on {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {G : Type u_2} [rcg : R] (g : G) (I : ideal R) (hf : I) :
I I
theorem ideal.comap_le_map_of_inv_on {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {G : Type u_2} [rcg : R] (g : G) (I : ideal S) (hf : (f ⁻¹' I)) :
I I
theorem ideal.map_le_comap_of_inverse {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {G : Type u_2} [rcg : R] (g : G) (I : ideal R) (h : f) :
I I

The `ideal` version of `set.image_subset_preimage_of_inverse`.

theorem ideal.comap_le_map_of_inverse {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {G : Type u_2} [rcg : R] (g : G) (I : ideal S) (h : f) :
I I

The `ideal` version of `set.preimage_subset_image_of_inverse`.

@[protected, instance]
def ideal.is_prime.comap {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {K : ideal S} [hK : K.is_prime] :
theorem ideal.map_top {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) :
theorem ideal.gc_map_comap {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) :
@[simp]
theorem ideal.comap_id {R : Type u} [semiring R] (I : ideal R) :
I = I
@[simp]
theorem ideal.map_id {R : Type u} [semiring R] (I : ideal R) :
I = I
theorem ideal.comap_comap {R : Type u} {S : Type v} [semiring R] [semiring S] {T : Type u_1} [semiring T] {I : ideal T} (f : R →+* S) (g : S →+* T) :
I) = ideal.comap (g.comp f) I
theorem ideal.map_map {R : Type u} {S : Type v} [semiring R] [semiring S] {T : Type u_1} [semiring T] {I : ideal R} (f : R →+* S) (g : S →+* T) :
I) = ideal.map (g.comp f) I
theorem ideal.map_span {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (s : set R) :
theorem ideal.map_le_of_le_comap {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] {f : F} {I : ideal R} {K : ideal S} :
I K I K
theorem ideal.le_comap_of_map_le {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] {f : F} {I : ideal R} {K : ideal S} :
I KI K
theorem ideal.le_comap_map {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] {f : F} {I : ideal R} :
I I)
theorem ideal.map_comap_le {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] {f : F} {K : ideal S} :
K) K
@[simp]
theorem ideal.comap_top {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] {f : F} :
@[simp]
theorem ideal.comap_eq_top_iff {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] {f : F} {I : ideal S} :
I = I =
@[simp]
theorem ideal.map_bot {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] {f : F} :
@[simp]
theorem ideal.map_comap_map {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (I : ideal R) :
I)) = I
@[simp]
theorem ideal.comap_map_comap {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (K : ideal S) :
K)) = K
theorem ideal.map_sup {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (I J : ideal R) :
(I J) = I J
theorem ideal.comap_inf {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (K L : ideal S) :
(K L) = K L
theorem ideal.map_supr {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {ι : Sort u_3} (K : ι → ) :
(supr K) = ⨆ (i : ι), (K i)
theorem ideal.comap_infi {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {ι : Sort u_3} (K : ι → ) :
(infi K) = ⨅ (i : ι), (K i)
theorem ideal.map_Sup {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (s : set (ideal R)) :
(has_Sup.Sup s) = ⨆ (I : ideal R) (H : I s), I
theorem ideal.comap_Inf {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (s : set (ideal S)) :
(has_Inf.Inf s) = ⨅ (I : ideal S) (H : I s), I
theorem ideal.comap_Inf' {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (s : set (ideal S)) :
(has_Inf.Inf s) = ⨅ (I : ideal R) (H : I '' s), I
theorem ideal.comap_is_prime {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (K : ideal S) [H : K.is_prime] :
theorem ideal.map_inf_le {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {I J : ideal R} :
(I J) I J
theorem ideal.le_comap_sup {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {K L : ideal S} :
K L (K L)
@[simp]
theorem ideal.smul_top_eq_map {R : Type u_1} {S : Type u_2} [ S] (I : ideal R) :
I = (ideal.map S) I)
@[simp]
theorem ideal.coe_restrict_scalars {R : Type u_1} {S : Type u_2} [semiring S] [ S] (I : ideal S) :
@[simp]
theorem ideal.restrict_scalars_mul {R : Type u_1} {S : Type u_2} [ S] (I J : ideal S) :

The smallest `S`-submodule that contains all `x ∈ I * y ∈ J` is also the smallest `R`-submodule that does so.

theorem ideal.map_comap_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (hf : function.surjective f) (I : ideal S) :
I) = I
def ideal.gi_map_comap {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (hf : function.surjective f) :

`map` and `comap` are adjoint, and the composition `map f ∘ comap f` is the identity

Equations
theorem ideal.map_surjective_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (hf : function.surjective f) :
theorem ideal.comap_injective_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (hf : function.surjective f) :
theorem ideal.map_sup_comap_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (hf : function.surjective f) (I J : ideal S) :
I J) = I J
theorem ideal.map_supr_comap_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {ι : Sort u_3} (hf : function.surjective f) (K : ι → ) :
(⨆ (i : ι), (K i)) = supr K
theorem ideal.map_inf_comap_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (hf : function.surjective f) (I J : ideal S) :
I J) = I J
theorem ideal.map_infi_comap_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {ι : Sort u_3} (hf : function.surjective f) (K : ι → ) :
(⨅ (i : ι), (K i)) = infi K
theorem ideal.mem_image_of_mem_map_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (hf : function.surjective f) {I : ideal R} {y : S} (H : y I) :
theorem ideal.mem_map_iff_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) (hf : function.surjective f) {I : ideal R} {y : S} :
y I ∃ (x : R), x I f x = y
theorem ideal.le_map_of_comap_le_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {I : ideal R} {K : ideal S} (hf : function.surjective f) :
K IK I
theorem ideal.comap_bot_le_of_injective {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rc : S] (f : F) {I : ideal R} (hf : function.injective f) :
I
theorem ideal.comap_map_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [ring R] [ring S] [ S] (f : F) (hf : function.surjective f) (I : ideal R) :
I) = I
def ideal.rel_iso_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [ring R] [ring S] [ S] (f : F) (hf : function.surjective f) :
≃o {p // p}

Correspondence theorem

Equations
def ideal.order_embedding_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [ring R] [ring S] [ S] (f : F) (hf : function.surjective f) :

The map on ideals induced by a surjective map preserves inclusion.

Equations
theorem ideal.map_eq_top_or_is_maximal_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [ring R] [ring S] [ S] (f : F) (hf : function.surjective f) {I : ideal R} (H : I.is_maximal) :
theorem ideal.comap_is_maximal_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [ring R] [ring S] [ S] (f : F) (hf : function.surjective f) {K : ideal S} [H : K.is_maximal] :
theorem ideal.comap_le_comap_iff_of_surjective {R : Type u} {S : Type v} {F : Type u_1} [ring R] [ring S] [ S] (f : F) (hf : function.surjective f) (I J : ideal S) :
I J I J
@[simp]
theorem ideal.map_of_equiv {R : Type u} {S : Type v} [ring R] [ring S] (I : ideal R) (f : R ≃+* S) :

If `f : R ≃+* S` is a ring isomorphism and `I : ideal R`, then `map f (map f.symm) = I`.

@[simp]
theorem ideal.comap_of_equiv {R : Type u} {S : Type v} [ring R] [ring S] (I : ideal R) (f : R ≃+* S) :
(ideal.comap (f.symm) I) = I

If `f : R ≃+* S` is a ring isomorphism and `I : ideal R`, then `comap f.symm (comap f) = I`.

theorem ideal.map_comap_of_equiv {R : Type u} {S : Type v} [ring R] [ring S] (I : ideal R) (f : R ≃+* S) :
I = I

If `f : R ≃+* S` is a ring isomorphism and `I : ideal R`, then `map f I = comap f.symm I`.

def ideal.rel_iso_of_bijective {R : Type u} {S : Type v} {F : Type u_1} [ring R] [ring S] [ S] (f : F) (hf : function.bijective f) :

Special case of the correspondence theorem for isomorphic rings

Equations
theorem ideal.comap_le_iff_le_map {R : Type u} {S : Type v} {F : Type u_1} [ring R] [ring S] [ S] (f : F) (hf : function.bijective f) {I : ideal R} {K : ideal S} :
K I K I
theorem ideal.map.is_maximal {R : Type u} {S : Type v} {F : Type u_1} [ring R] [ring S] [ S] (f : F) (hf : function.bijective f) {I : ideal R} (H : I.is_maximal) :
theorem ideal.ring_equiv.bot_maximal_iff {R : Type u} {S : Type v} [ring R] [ring S] (e : R ≃+* S) :
theorem ideal.map_mul {R : Type u} {S : Type v} {F : Type u_1} [comm_ring R] [comm_ring S] [rc : S] (f : F) (I J : ideal R) :
(I * J) = I * J
def ideal.map_hom {R : Type u} {S : Type v} {F : Type u_1} [comm_ring R] [comm_ring S] [rc : S] (f : F) :

The pushforward `ideal.map` as a monoid-with-zero homomorphism.

Equations
@[simp]
theorem ideal.map_hom_apply {R : Type u} {S : Type v} {F : Type u_1} [comm_ring R] [comm_ring S] [rc : S] (f : F) (I : ideal R) :
I = I
@[protected]
theorem ideal.map_pow {R : Type u} {S : Type v} {F : Type u_1} [comm_ring R] [comm_ring S] [rc : S] (f : F) (I : ideal R) (n : ) :
(I ^ n) = I ^ n
theorem ideal.comap_radical {R : Type u} {S : Type v} {F : Type u_1} [comm_ring R] [comm_ring S] [rc : S] (f : F) (K : ideal S) :
@[simp]
theorem ideal.map_quotient_self {R : Type u} [comm_ring R] (I : ideal R) :
theorem ideal.map_radical_le {R : Type u} {S : Type v} {F : Type u_1} [comm_ring R] [comm_ring S] [rc : S] (f : F) {I : ideal R} :
theorem ideal.le_comap_mul {R : Type u} {S : Type v} {F : Type u_1} [comm_ring R] [comm_ring S] [rc : S] (f : F) {K L : ideal S} :
K * L (K * L)
theorem ideal.le_comap_pow {R : Type u} {S : Type v} {F : Type u_1} [comm_ring R] [comm_ring S] [rc : S] (f : F) {K : ideal S} (n : ) :
K ^ n (K ^ n)
def ideal.is_primary {R : Type u} (I : ideal R) :
Prop

A proper ideal `I` is primary iff `xy ∈ I` implies `x ∈ I` or `y ∈ radical I`.

Equations
theorem ideal.is_prime.is_primary {R : Type u} {I : ideal R} (hi : I.is_prime) :
theorem ideal.mem_radical_of_pow_mem {R : Type u} {I : ideal R} {x : R} {m : } (hx : x ^ m I.radical) :
theorem ideal.is_prime_radical {R : Type u} {I : ideal R} (hi : I.is_primary) :
theorem ideal.is_primary_inf {R : Type u} {I J : ideal R} (hi : I.is_primary) (hj : J.is_primary) (hij : I.radical = J.radical) :
noncomputable def ideal.finsupp_total (ι : Type u_1) (M : Type u_2) {R : Type u_3} [comm_ring R] [ M] (I : ideal R) (v : ι → M) :

A variant of `finsupp.total` that takes in vectors valued in `I`.

Equations
theorem ideal.finsupp_total_apply {ι : Type u_1} {M : Type u_2} {R : Type u_3} [comm_ring R] [ M] (I : ideal R) {v : ι → M} (f : ι →₀ I) :
I v) f = f.sum (λ (i : ι) (x : I), x v i)
theorem ideal.finsupp_total_apply_eq_of_fintype {ι : Type u_1} {M : Type u_2} {R : Type u_3} [comm_ring R] [ M] (I : ideal R) {v : ι → M} [fintype ι] (f : ι →₀ I) :
I v) f = finset.univ.sum (λ (i : ι), (f i) v i)
theorem ideal.range_finsupp_total {ι : Type u_1} {M : Type u_2} {R : Type u_3} [comm_ring R] [ M] (I : ideal R) {v : ι → M} :
theorem associates.mk_ne_zero' {R : Type u_1} {r : R} :
def ring_hom.ker {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rcf : S] (f : F) :

Kernel of a ring homomorphism as an ideal of the domain.

Equations
theorem ring_hom.mem_ker {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rcf : S] (f : F) {r : R} :
f r = 0

An element is in the kernel if and only if it maps to zero.

theorem ring_hom.ker_eq {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rcf : S] (f : F) :
theorem ring_hom.ker_eq_comap_bot {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rcf : S] (f : F) :
theorem ring_hom.comap_ker {R : Type u} {S T : Type v} [semiring R] [semiring S] [semiring T] (f : S →+* R) (g : T →+* S) :
theorem ring_hom.not_one_mem_ker {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rcf : S] [nontrivial S] (f : F) :

If the target is not the zero ring, then one is not in the kernel.

theorem ring_hom.ker_ne_top {R : Type u} {S : Type v} {F : Type u_1} [semiring R] [semiring S] [rcf : S] [nontrivial S] (f : F) :
theorem ring_hom.injective_iff_ker_eq_bot {R : Type u} {S : Type v} {F : Type u_1} [ring R] [semiring S] [rc : S] (f : F) :
theorem ring_hom.ker_eq_bot_iff_eq_zero {R : Type u} {S : Type v} {F : Type u_1} [ring R] [semiring S] [rc : S] (f : F) :
∀ (x : R), f x = 0x = 0
@[simp]
theorem ring_hom.ker_coe_equiv {R : Type u} {S : Type v} [ring R] [semiring S] (f : R ≃+* S) :
@[simp]
theorem ring_hom.ker_equiv {R : Type u} {S : Type v} [ring R] [semiring S] {F' : Type u_1} [ R S] (f : F') :
def ring_hom.ker_lift {R : Type u} {S : Type v} [comm_ring R] [comm_ring S] (f : R →+* S) :

The induced map from the quotient by the kernel to the codomain.

This is an isomorphism if `f` has a right inverse (`quotient_ker_equiv_of_right_inverse`) / is surjective (`quotient_ker_equiv_of_surjective`).

Equations
@[simp]
theorem ring_hom.ker_lift_mk {R : Type u} {S : Type v} [comm_ring R] [comm_ring S] (f : R →+* S) (r : R) :
(f.ker_lift) ( r) = f r
theorem ring_hom.ker_lift_injective {R : Type u} {S : Type v} [comm_ring R] [comm_ring S] (f : R →+* S) :

The induced map from the quotient by the kernel is injective.

def ring_hom.quotient_ker_equiv_of_right_inverse {R : Type u} {S : Type v} [comm_ring R] [comm_ring S] {f : R →+* S} {g : S → R} (hf : f) :

The first isomorphism theorem for commutative rings, computable version.

Equations
@[simp]
theorem ring_hom.quotient_ker_equiv_of_right_inverse.apply {R : Type u} {S : Type v} [comm_ring R] [comm_ring S] {f : R →+* S} {g : S → R} (hf : f) (x : R ) :
@[simp]
theorem ring_hom.quotient_ker_equiv_of_right_inverse.symm.apply {R : Type u} {S : Type v} [comm_ring R] [comm_ring S] {f : R →+* S} {g : S → R} (hf : f) (x : S) :
= (g x)
noncomputable def ring_hom.quotient_ker_equiv_of_surjective {R : Type u} {S : Type v} [comm_ring R] [comm_ring S] {f : R →+* S} (hf : function.surjective f) :

The first isomorphism theorem for commutative rings.

Equations
theorem ring_hom.ker_is_prime {R : Type u} {S : Type v} {F : Type u_1} [ring R] [ring S] [is_domain S] [ S] (f : F) :

The kernel of a homomorphism to a domain is a prime ideal.

theorem ring_hom.ker_is_maximal_of_surjective {R : Type u_1} {K : Type u_2} {F : Type u_3} [ring R] [field K] [ K] (f : F) (hf : function.surjective f) :

The kernel of a homomorphism to a field is a maximal ideal.

theorem ideal.map_eq_bot_iff_le_ker {R : Type u_1} {S : Type u_2} {F : Type u_3} [semiring R] [semiring S] [rc : S] {I : ideal R} (f : F) :
I =
theorem ideal.ker_le_comap {R : Type u_1} {S : Type u_2} {F : Type u_3} [semiring R] [semiring S] [rc : S] {K : ideal S} (f : F) :
K
theorem ideal.map_Inf {R : Type u_1} {S : Type u_2} {F : Type u_3} [ring R] [ring S] [rc : S] {A : set (ideal R)} {f : F} (hf : function.surjective f) :
(∀ (J : ideal R), J A J) (has_Inf.Inf A) = has_Inf.Inf '' A)
theorem ideal.map_is_prime_of_surjective {R : Type u_1} {S : Type u_2} {F : Type u_3} [ring R] [ring S] [rc : S] {f : F} (hf : function.surjective f) {I : ideal R} [H : I.is_prime] (hk : I) :
theorem ideal.map_is_prime_of_equiv {R : Type u_1} {S : Type u_2} [ring R] [ring S] {F' : Type u_3} [ R S] (f : F') {I : ideal R} [I.is_prime] :
@[simp]
theorem ideal.mk_ker {R : Type u_1} [comm_ring R] {I : ideal R} :
theorem ideal.map_mk_eq_bot_of_le {R : Type u_1} [comm_ring R] {I J : ideal R} (h : I J) :
theorem ideal.ker_quotient_lift {R : Type u_1} [comm_ring R] {S : Type v} [comm_ring S] {I : ideal R} (f : R →+* S) (H : I ) :
theorem ideal.map_eq_iff_sup_ker_eq_of_surjective {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] {I J : ideal R} (f : R →+* S) (hf : function.surjective f) :
I = J =
theorem ideal.map_radical_of_surjective {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] {f : R →+* S} (hf : function.surjective f) {I : ideal R} (h : I) :
@[simp]
theorem ideal.bot_quotient_is_maximal_iff {R : Type u_1} [comm_ring R] (I : ideal R) :
@[simp]
theorem ideal.mem_quotient_iff_mem_sup {R : Type u_1} [comm_ring R] {I J : ideal R} {x : R} :
x x J I

See also `ideal.mem_quotient_iff_mem` in case `I ≤ J`.

theorem ideal.mem_quotient_iff_mem {R : Type u_1} [comm_ring R] {I J : ideal R} (hIJ : I J) {x : R} :
x x J

See also `ideal.mem_quotient_iff_mem_sup` if the assumption `I ≤ J` is not available.

@[protected, instance]
def ideal.quotient.algebra (R₁ : Type u_4) {A : Type u_6} [comm_semiring R₁] [comm_ring A] [algebra R₁ A] {I : ideal A} :
algebra R₁ (A I)

The `R₁`-algebra structure on `A/I` for an `R₁`-algebra `A`

Equations
@[protected, instance]
def ideal.quotient.is_scalar_tower (R₁ : Type u_4) (R₂ : Type u_5) {A : Type u_6} [comm_semiring R₁] [comm_semiring R₂] [comm_ring A] [algebra R₁ A] [algebra R₂ A] [has_smul R₁ R₂] [ R₂ A] (I : ideal A) :
R₂ (A I)
def ideal.quotient.mkₐ (R₁ : Type u_4) {A : Type u_6} [comm_semiring R₁] [comm_ring A] [algebra R₁ A] (I : ideal A) :
A →ₐ[R₁] A I

The canonical morphism `A →ₐ[R₁] A ⧸ I` as morphism of `R₁`-algebras, for `I` an ideal of `A`, where `A` is an `R₁`-algebra.

Equations
theorem ideal.quotient.alg_hom_ext (R₁ : Type u_4) {A : Type u_6} [comm_semiring R₁] [comm_ring A] [algebra R₁ A] {I : ideal A} {S : Type u_1} [semiring S] [algebra R₁ S] ⦃f g : A I →ₐ[R₁] S⦄ (h : f.comp I) = g.comp I)) :
f = g
theorem ideal.quotient.alg_map_eq (R₁ : Type u_4) {A : Type u_6} [comm_semiring R₁] [comm_ring A] [algebra R₁ A] (I : ideal A) :
(A I) = (A I)).comp (algebra_map R₁ A)
theorem ideal.quotient.mkₐ_to_ring_hom (R₁ : Type u_4) {A : Type u_6} [comm_semiring R₁] [comm_ring A] [algebra R₁ A] (I : ideal A) :
@[simp]
theorem ideal.quotient.mkₐ_eq_mk (R₁ : Type u_4) {A : Type u_6} [comm_semiring R₁] [comm_ring A] [algebra R₁ A] (I : ideal A) :
I) =
@[simp]
theorem ideal.quotient.algebra_map_eq {R : Type u_1} [comm_ring R] (I : ideal R) :
(R I) =
@[simp]
theorem ideal.quotient.mk_comp_algebra_map (R₁ : Type u_4) {A : Type u_6} [comm_semiring R₁] [comm_ring A] [algebra R₁ A] (I : ideal A) :
(algebra_map R₁ A) = (A I)
@[simp]
theorem ideal.quotient.mk_algebra_map (R₁ : Type u_4) {A : Type u_6} [comm_semiring R₁] [comm_ring A] [algebra R₁ A] (I : ideal A) (x : R₁) :
((algebra_map R₁ A) x) = (algebra_map R₁ (A I)) x
theorem ideal.quotient.mkₐ_surjective (R₁ : Type u_4) {A : Type u_6} [comm_semiring R₁] [comm_ring A] [algebra R₁ A] (I : ideal A) :

The canonical morphism `A →ₐ[R₁] I.quotient` is surjective.

@[simp]
theorem ideal.quotient.mkₐ_ker (R₁ : Type u_4) {A : Type u_6} [comm_semiring R₁] [comm_ring A] [algebra R₁ A] (I : ideal A) :
= I

The kernel of `A →ₐ[R₁] I.quotient` is `I`.

def ideal.quotient.liftₐ {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] (I : ideal A) (f : A →ₐ[R₁] B) (hI : ∀ (a : A), a If a = 0) :
A I →ₐ[R₁] B

`ideal.quotient.lift` as an `alg_hom`.

Equations
@[simp]
theorem ideal.quotient.liftₐ_apply {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] (I : ideal A) (f : A →ₐ[R₁] B) (hI : ∀ (a : A), a If a = 0) (x : A I) :
hI) x = hI) x
theorem ideal.quotient.liftₐ_comp {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] (I : ideal A) (f : A →ₐ[R₁] B) (hI : ∀ (a : A), a If a = 0) :
hI).comp I) = f
theorem ideal.ker_lift.map_smul {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] (f : A →ₐ[R₁] B) (r : R₁) (x : A ) :
def ideal.ker_lift_alg {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] (f : A →ₐ[R₁] B) :
→ₐ[R₁] B

The induced algebras morphism from the quotient by the kernel to the codomain.

This is an isomorphism if `f` has a right inverse (`quotient_ker_alg_equiv_of_right_inverse`) / is surjective (`quotient_ker_alg_equiv_of_surjective`).

Equations
@[simp]
theorem ideal.ker_lift_alg_mk {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] (f : A →ₐ[R₁] B) (a : A) :
a) = f a
@[simp]
theorem ideal.ker_lift_alg_to_ring_hom {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] (f : A →ₐ[R₁] B) :
theorem ideal.ker_lift_alg_injective {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] (f : A →ₐ[R₁] B) :

The induced algebra morphism from the quotient by the kernel is injective.

def ideal.quotient_ker_alg_equiv_of_right_inverse {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] {f : A →ₐ[R₁] B} {g : B → A} (hf : f) :
(A ≃ₐ[R₁] B

The first isomorphism theorem for algebras, computable version.

Equations
@[simp]
theorem ideal.quotient_ker_alg_equiv_of_right_inverse.apply {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] {f : A →ₐ[R₁] B} {g : B → A} (hf : f) (x : A ) :
@[simp]
theorem ideal.quotient_ker_alg_equiv_of_right_inverse_symm.apply {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] {f : A →ₐ[R₁] B} {g : B → A} (hf : f) (x : B) :
= (g x)
noncomputable def ideal.quotient_ker_alg_equiv_of_surjective {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] {f : A →ₐ[R₁] B} (hf : function.surjective f) :
(A ≃ₐ[R₁] B

The first isomorphism theorem for algebras.

Equations
def ideal.quotient_map {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] {I : ideal R} (J : ideal S) (f : R →+* S) (hIJ : I J) :
R I →+* S J

The ring hom `R/I →+* S/J` induced by a ring hom `f : R →+* S` with `I ≤ f⁻¹(J)`

Equations
@[simp]
theorem ideal.quotient_map_mk {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] {J : ideal R} {I : ideal S} {f : R →+* S} {H : J I} {x : R} :
(I.quotient_map f H) ( x) = (f x)
@[simp]
theorem ideal.quotient_map_algebra_map {S : Type u_2} [comm_ring S] {R₁ : Type u_4} {A : Type u_6} [comm_semiring R₁] [comm_ring A] [algebra R₁ A] {J : ideal A} {I : ideal S} {f : A →+* S} {H : J I} {x : R₁} :
(I.quotient_map f H) ((algebra_map R₁ (A J)) x) = (f ((algebra_map R₁ A) x))
theorem ideal.quotient_map_comp_mk {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] {J : ideal R} {I : ideal S} {f : R →+* S} (H : J I) :
(I.quotient_map f H).comp = f
@[simp]
theorem ideal.quotient_equiv_symm_apply {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] (I : ideal R) (J : ideal S) (f : R ≃+* S) (hIJ : J = I) (ᾰ : S J) :
((I.quotient_equiv J f hIJ).symm) = (I.quotient_map (f.symm) _)
def ideal.quotient_equiv {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] (I : ideal R) (J : ideal S) (f : R ≃+* S) (hIJ : J = I) :
R I ≃+* S J

The ring equiv `R/I ≃+* S/J` induced by a ring equiv `f : R ≃+** S`, where `J = f(I)`.

Equations
@[simp]
theorem ideal.quotient_equiv_apply {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] (I : ideal R) (J : ideal S) (f : R ≃+* S) (hIJ : J = I) (ᾰ : R I) :
(I.quotient_equiv J f hIJ) = (J.quotient_map f _).to_fun
@[simp]
theorem ideal.quotient_equiv_mk {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] (I : ideal R) (J : ideal S) (f : R ≃+* S) (hIJ : J = I) (x : R) :
(I.quotient_equiv J f hIJ) ( x) = (f x)
@[simp]
theorem ideal.quotient_equiv_symm_mk {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] (I : ideal R) (J : ideal S) (f : R ≃+* S) (hIJ : J = I) (x : S) :
((I.quotient_equiv J f hIJ).symm) ( x) = ((f.symm) x)
theorem ideal.quotient_map_injective' {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] {J : ideal R} {I : ideal S} {f : R →+* S} {H : J I} (h : I J) :

`H` and `h` are kept as separate hypothesis since H is used in constructing the quotient map.

theorem ideal.quotient_map_injective {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] {I : ideal S} {f : R →+* S} :

If we take `J = I.comap f` then `quotient_map` is injective automatically.

theorem ideal.quotient_map_surjective {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] {J : ideal R} {I : ideal S} {f : R →+* S} {H : J I} (hf : function.surjective f) :
theorem ideal.comp_quotient_map_eq_of_comp_eq {R : Type u_1} {S : Type u_2} [comm_ring R] [comm_ring S] {R' : Type u_3} {S' : Type u_4} [comm_ring R'] [comm_ring S'] {f : R →+* S} {f' : R' →+* S'} {g : R →+* R'} {g' : S →+* S'} (hfg : f'.comp g = g'.comp f) (I : ideal S') :

Commutativity of a square is preserved when taking quotients by an ideal.

def ideal.quotient_mapₐ {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] {I : ideal A} (J : ideal B) (f : A →ₐ[R₁] B) (hIJ : I J) :
A I →ₐ[R₁] B J

The algebra hom `A/I →+* B/J` induced by an algebra hom `f : A →ₐ[R₁] B` with `I ≤ f⁻¹(J)`.

Equations
@[simp]
theorem ideal.quotient_map_mkₐ {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] {I : ideal A} (J : ideal B) (f : A →ₐ[R₁] B) (H : I J) {x : A} :
(J.quotient_mapₐ f H) ( x) = J) (f x)
theorem ideal.quotient_map_comp_mkₐ {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] {I : ideal A} (J : ideal B) (f : A →ₐ[R₁] B) (H : I J) :
(J.quotient_mapₐ f H).comp I) = J).comp f
def ideal.quotient_equiv_alg {R₁ : Type u_4} {A : Type u_6} {B : Type u_7} [comm_semiring R₁] [comm_ring A] [comm_ring B] [algebra R₁ A] [algebra R₁ B] (I : ideal A) (J : ideal B) (f : A ≃ₐ[R₁] B) (hIJ : J = I) :
(A I) ≃ₐ[R₁] B J

The algebra equiv `A/I ≃ₐ[R] B/J` induced by an algebra equiv `f : A ≃ₐ[R] B`, where`J = f(I)`.

Equations
@[protected, instance]
def ideal.quotient_algebra {R : Type u_1} [comm_ring R] {A : Type u_6} [comm_ring A] {I : ideal A} [ A] :
algebra (R ideal.comap A) I) (A I)
Equations
theorem ideal.algebra_map_quotient_injective {R : Type u_1} [comm_ring R] {A : Type u_6} [comm_ring A] {I : ideal A} [ A] :
@[protected, instance]
def submodule.module_submodule {R : Type u} {M : Type v} [ M] :
module (ideal R) M)
Equations
def ring_hom.lift_of_right_inverse_aux {A : Type u_1} {B : Type u_2} {C : Type u_3} [ring A] [ring B] [ring C] (f : A →+* B) (f_inv : B → A) (hf : f) (g : A →+* C) (hg : ) :
B →+* C

Auxiliary definition used to define `lift_of_right_inverse`

Equations
@[simp]
theorem ring_hom.lift_of_right_inverse_aux_comp_apply {A : Type u_1} {B : Type u_2} {C : Type u_3} [ring A] [ring B] [ring C] (f : A →+* B) (f_inv : B → A) (hf : f) (g : A →+* C) (hg : ) (a : A) :
(f.lift_of_right_inverse_aux f_inv hf g hg) (f a) = g a
def ring_hom.lift_of_right_inverse {A : Type u_1} {B : Type u_2} {C : Type u_3} [ring A] [ring B] [ring C] (f : A →+* B) (f_inv : B → A) (hf : f) :
{g // (B →+* C)

`lift_of_right_inverse f hf g hg` is the unique ring homomorphism `φ`

• such that `φ.comp f = g` (`ring_hom.lift_of_right_inverse_comp`),
• where `f : A →+* B` is has a right_inverse `f_inv` (`hf`),
• and `g : B →+* C` satisfies `hg : f.ker ≤ g.ker`.

See `ring_hom.eq_lift_of_right_inverse` for the uniqueness lemma.

``````   A .
|  \
f |   \ g
|    \
v     \⌟
B ----> C
∃!φ
``````
Equations
@[simp, reducible]
noncomputable def ring_hom.lift_of_surjective {A : Type u_1} {B : Type u_2} {C : Type u_3} [ring A] [ring B] [ring C] (f : A →+* B) (hf : function.surjective f) :
{g // (B →+* C)

A non-computable version of `ring_hom.lift_of_right_inverse` for when no computable right inverse is available, that uses `function.surj_inv`.

theorem ring_hom.lift_of_right_inverse_comp_apply {A : Type u_1} {B : Type u_2} {C : Type u_3} [ring A] [ring B] [ring C] (f : A →+* B) (f_inv : B → A) (hf : f) (g : {g // ) (x : A) :
((f.lift_of_right_inverse f_inv hf) g) (f x) = g x
theorem ring_hom.lift_of_right_inverse_comp {A : Type u_1} {B : Type u_2} {C : Type u_3} [ring A] [ring B] [ring C] (f : A →+* B) (f_inv : B → A) (hf : f) (g : {g // ) :
((f.lift_of_right_inverse f_inv hf) g).comp f = g
theorem ring_hom.eq_lift_of_right_inverse {A : Type u_1} {B : Type u_2} {C : Type u_3} [ring A] [ring B] [ring C] (f : A →+* B) (f_inv : B → A) (hf : f) (g : A →+* C) (hg : ) (h : B →+* C) (hh : h.comp f = g) :
h = (f.lift_of_right_inverse f_inv hf) g, hg⟩
def double_quot.quot_left_to_quot_sup {R : Type u} [comm_ring R] (I J : ideal R) :
R I →+* R I J

The obvious ring hom `R/I → R/(I ⊔ J)`

Equations
theorem double_quot.ker_quot_left_to_quot_sup {R : Type u} [comm_ring R] (I J : ideal R) :

The kernel of `quot_left_to_quot_sup`

def double_quot.quot_quot_to_quot_sup {R : Type u} [comm_ring R] (I J : ideal R) :
(R I) →+* R I J

The ring homomorphism `(R/I)/J' -> R/(I ⊔ J)` induced by `quot_left_to_quot_sup` where `J'` is the image of `J` in `R/I`

Equations
def double_quot.quot_quot_mk {R : Type u} [comm_ring R] (I J : ideal R) :
R →+* (R I)

The composite of the maps `R → (R/I)` and `(R/I) → (R/I)/J'`

Equations
theorem double_quot.ker_quot_quot_mk {R : Type u} [comm_ring R] (I J : ideal R) :
= I J

The kernel of `quot_quot_mk`

def double_quot.lift_sup_quot_quot_mk {R : Type u} [comm_ring R] (I J : ideal R) :
R I J →+* (R I)

The ring homomorphism `R/(I ⊔ J) → (R/I)/J'`induced by `quot_quot_mk`

Equations
def double_quot.quot_quot_equiv_quot_sup {R : Type u} [comm_ring R] (I J : ideal R) :
(R I) ≃+* R I J

`quot_quot_to_quot_add` and `lift_sup_double_qot_mk` are inverse isomorphisms

Equations
@[simp]
theorem double_quot.quot_quot_equiv_quot_sup_quot_quot_mk {R : Type u} [comm_ring R] (I J : ideal R) (x : R) :
( x) = (ideal.quotient.mk (I J)) x
@[simp]
theorem double_quot.quot_quot_equiv_quot_sup_symm_quot_quot_mk {R : Type u} [comm_ring R] (I J : ideal R) (x : R) :
((ideal.quotient.mk (I J)) x) = x
def double_quot.quot_quot_equiv_comm {R : Type u} [comm_ring R] (I J : ideal R) :
(R I) ≃+* (R J)

The obvious isomorphism `(R/I)/J' → (R/J)/I'`

Equations
@[simp]
theorem double_quot.quot_quot_equiv_comm_quot_quot_mk {R : Type u} [comm_ring R] (I J : ideal R) (x : R) :
( x) = x
@[simp]
@[simp]
theorem double_quot.quot_quot_equiv_comm_symm {R : Type u} [comm_ring R] (I J : ideal R) :