Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
(* Some of the material in abstract_algebra and canonical names could be selectively exported to the user, as is done in Groups/Group.v. *)Require Import Classes.interfaces.abstract_algebra.Require Import Algebra.AbGroups.Require Export Algebra.Rings.Ring Algebra.Rings.Ideal Algebra.Rings.QuotientRing.(** * Commutative Rings *)LocalOpen Scope ring_scope.LocalOpen Scope wc_iso_scope.(** A commutative ring consists of the following data: *)RecordCRing := {
(** An underlying ring. *)
cring_ring :> Ring;
(** Such that they satisfy the axioms of a commutative ring. *)
cring_commutative :: Commutative (A:=cring_ring) (.*.);
}.Definitionissig_CRing : _ <~> CRing := ltac:(issig).Instancecring_plus {R : CRing} : Plus R := plus_abgroup R.Instancecring_zero {R : CRing} : Zero R := zero_abgroup R.Instancecring_negate {R : CRing} : Negate R := negate_abgroup R.
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1
CRing
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1
CRing
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1
Ring
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1
Commutative mult
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1
Ring
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1
RightDistribute mult plus
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1
RightIdentity mult 1
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1
RightDistribute mult plus
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1 x, y, z: R
(x + y) * z = x * z + y * z
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1 x, y, z: R
z * (x + y) = x * z + y * z
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1 x, y, z: R
z * x + z * y = x * z + y * z
f_ap.
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1
RightIdentity mult 1
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1 x: R
x * 1 = x
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1 x: R
1 * x = x
apply unit_l.
R: AbGroup One0: One R Mult0: Mult R comm: Commutative mult assoc: Associative mult dist_l: LeftDistribute mult plus unit_l: LeftIdentity mult 1
Commutative mult
exact _.Defined.(** ** Properties of commutative rings *)Definitionrng_mult_comm {R : CRing} (xy : R) : x * y = y * x := commutativity x y.(** Powers commute with multiplication *)
R: CRing x, y: R n: nat
rng_power (x * y) n = rng_power x n * rng_power y n
R: CRing x, y: R n: nat
rng_power (x * y) n = rng_power x n * rng_power y n
R: CRing x, y: R
rng_power (x * y) 0 = rng_power x 0 * rng_power y 0
R: CRing x, y: R n: nat IHn: rng_power (x * y) n = rng_power x n * rng_power y n
rng_power (x * y) n.+1 =
rng_power x n.+1 * rng_power y n.+1
R: CRing x, y: R n: nat IHn: rng_power (x * y) n = rng_power x n * rng_power y n
rng_power (x * y) n.+1 =
rng_power x n.+1 * rng_power y n.+1
R: CRing x, y: R n: nat IHn: rng_power (x * y) n = rng_power x n * rng_power y n
x * y * rng_power (x * y) n =
x * rng_power x n * (y * rng_power y n)
R: CRing x, y: R n: nat IHn: rng_power (x * y) n = rng_power x n * rng_power y n
x * y * rng_power (x * y) n =
x * rng_power x n * y * rng_power y n
R: CRing x, y: R n: nat IHn: rng_power (x * y) n = rng_power x n * rng_power y n
x * y * rng_power (x * y) n =
x * (rng_power x n * y) * rng_power y n
R: CRing x, y: R n: nat IHn: rng_power (x * y) n = rng_power x n * rng_power y n
x * y * rng_power (x * y) n =
x * (y * rng_power x n) * rng_power y n
R: CRing x, y: R n: nat IHn: rng_power (x * y) n = rng_power x n * rng_power y n
x * y * rng_power (x * y) n =
x * y * rng_power x n * rng_power y n
R: CRing x, y: R n: nat IHn: rng_power (x * y) n = rng_power x n * rng_power y n
x * y * rng_power (x * y) n =
x * y * (rng_power x n * rng_power y n)
f_ap.Defined.
R: CRing x, y, z: R
x * y * z = x * z * y
R: CRing x, y, z: R
x * y * z = x * z * y
R: CRing x, y, z: R
x * (y * z) = x * z * y
R: CRing x, y, z: R
x * (y * z) = x * (z * y)
apply ap, rng_mult_comm.Defined.
R: CRing x, y, z: R
x * y * z = y * x * z
R: CRing x, y, z: R
x * y * z = y * x * z
f_ap; apply rng_mult_comm.Defined.
R: CRing x, y, z: R
x * (y * z) = y * (x * z)
R: CRing x, y, z: R
x * (y * z) = y * (x * z)
R: CRing x, y, z: R
x * y * z = y * x * z
apply rng_mult_move_left_assoc.Defined.
R: CRing x, inv: R inv_l: inv * x = 1
IsInvertible R x
R: CRing x, inv: R inv_l: inv * x = 1
IsInvertible R x
R: CRing x, inv: R inv_l: inv * x = 1
R
R: CRing x, inv: R inv_l: inv * x = 1
?inv * x = 1
R: CRing x, inv: R inv_l: inv * x = 1
x * ?inv = 1
R: CRing x, inv: R inv_l: inv * x = 1
R
exact inv.
R: CRing x, inv: R inv_l: inv * x = 1
inv * x = 1
exact inv_l.
R: CRing x, inv: R inv_l: inv * x = 1
x * inv = 1
R: CRing x, inv: R inv_l: inv * x = 1
inv * x = 1
exact inv_l.Defined.(** ** Ideals in commutative rings *)SectionIdealCRing.Context {R : CRing}.(** The section is meant to complement the [IdealLemmas] section in Algebra.Rings.Ideal. Since the results here only hold in commutative rings, they have to be kept here. *)(** We import ideal notations as used in Algebra.Rings.Ideal but only for this section. Important to note is that [↔] corresponds to equality of ideals. *)Import Ideal.Notation.LocalOpen Scope ideal_scope.(** In a commutative ring, the product of two ideals is a subset of the reversed product. *)
R: CRing I, J: Ideal R
I ⋅ J ⊆ J ⋅ I
R: CRing I, J: Ideal R
I ⋅ J ⊆ J ⋅ I
R: CRing I, J: Ideal R r: R p: (I ⋅ J) r
(J ⋅ I) r
R: CRing I, J: Ideal R r: R p: subgroup_generated_type
(ideal_product_naive_type I J) r
(J ⋅ I) r
R: CRing I, J: Ideal R r: R p: ideal_product_naive_type I J r
(J ⋅ I) r
R: CRing I, J: Ideal R
(J ⋅ I) mon_unit
R: CRing I, J: Ideal R g, h: R p1: subgroup_generated_type
(ideal_product_naive_type I J) g p2: subgroup_generated_type
(ideal_product_naive_type I J) h IHp1: (J ⋅ I) g IHp2: (J ⋅ I) h
(J ⋅ I) (sg_op g (inv h))
R: CRing I, J: Ideal R r: R p: ideal_product_naive_type I J r
(J ⋅ I) r
R: CRing I, J: Ideal R g, h: R p1: subgroup_generated_type
(ideal_product_naive_type I J) g p2: subgroup_generated_type
(ideal_product_naive_type I J) h IHp1: (J ⋅ I) g IHp2: (J ⋅ I) h
(J ⋅ I) (sg_op g (inv h))
R: CRing I, J: Ideal R r: R p: ideal_product_naive_type I J r
by rapply ipn_in.Defined.(** Ideal products are commutative in commutative rings. Note that we are using ideal notations here and [↔] corresponds to equality of ideals. Essentially a subset in each direction. *)
R: CRing I, J: Ideal R
I ⋅ J ↔ J ⋅ I
R: CRing I, J: Ideal R
I ⋅ J ↔ J ⋅ I
apply ideal_subset_antisymm;
apply ideal_product_subset_product_commutative.Defined.(** Product of intersection and sum is a subset of product. Note that this is a generalization of lcm * gcd = product *)
R: CRing I, J: Ideal R
(I ∩ J) ⋅ (I + J) ⊆ I ⋅ J
R: CRing I, J: Ideal R
(I ∩ J) ⋅ (I + J) ⊆ I ⋅ J
R: CRing I, J: Ideal R
(I ∩ J) ⋅ (I + J) ⊆ ?Goal
R: CRing I, J: Ideal R
?Goal ⊆ I ⋅ J
R: CRing I, J: Ideal R
(I ∩ J) ⋅ (I + J) ⊆ (I ⋅ J + I ⋅ J)
R: CRing I, J: Ideal R
(I ∩ J) ⋅ (I + J) ⊆ ?Goal
R: CRing I, J: Ideal R
?Goal ⊆ (I ⋅ J + I ⋅ J)
R: CRing I, J: Ideal R
(I ∩ J) ⋅ (I + J) ⊆ (I ⋅ J + ?Goal0)
R: CRing I, J: Ideal R
?Goal0 ⊆ I ⋅ J
R: CRing I, J: Ideal R
(I ∩ J) ⋅ (I + J) ⊆ (I ⋅ J + J ⋅ I)
apply ideal_product_intersection_sum_subset.Defined.(** If the sum of ideals is the whole ring then their intersection is a subset of their product. *)
R: CRing I, J: Ideal R
ideal_unit R ⊆ (I + J) -> I ∩ J ⊆ I ⋅ J
R: CRing I, J: Ideal R
ideal_unit R ⊆ (I + J) -> I ∩ J ⊆ I ⋅ J
R: CRing I, J: Ideal R p: ideal_unit R ⊆ (I + J)
I ∩ J ⊆ I ⋅ J
R: CRing I, J: Ideal R p: ideal_unit R ⊆ (I + J)
I ∩ J ⊆ ?Goal
R: CRing I, J: Ideal R p: ideal_unit R ⊆ (I + J)
?Goal ⊆ I ⋅ J
R: CRing I, J: Ideal R p: ideal_unit R ⊆ (I + J)
I ∩ J ⊆ ?Goal
R: CRing I, J: Ideal R p: ideal_unit R ⊆ (I + J)
I ∩ J ↔ ?Goal
R: CRing I, J: Ideal R p: ideal_unit R ⊆ (I + J)
?Goal ↔ I ∩ J
apply ideal_product_unit_r.
R: CRing I, J: Ideal R p: ideal_unit R ⊆ (I + J)
(I ∩ J) ⋅ ideal_unit R ⊆ I ⋅ J
R: CRing I, J: Ideal R p: ideal_unit R ⊆ (I + J)
(I ∩ J) ⋅ ideal_unit R ⊆ ?Goal
R: CRing I, J: Ideal R p: ideal_unit R ⊆ (I + J)
?Goal ⊆ I ⋅ J
R: CRing I, J: Ideal R p: ideal_unit R ⊆ (I + J)
(I ∩ J) ⋅ (I + J) ⊆ I ⋅ J
rapply ideal_product_intersection_sum_subset'.Defined.(** This can be combined into a sufficient (but not necessary) condition for equality of intersections and products. *)
R: CRing I, J: Ideal R
Coprime I J -> I ∩ J ↔ I ⋅ J
R: CRing I, J: Ideal R
Coprime I J -> I ∩ J ↔ I ⋅ J
R: CRing I, J: Ideal R p: Coprime I J
I ∩ J ↔ I ⋅ J
R: CRing I, J: Ideal R p: Coprime I J
I ∩ J ⊆ I ⋅ J
R: CRing I, J: Ideal R p: Coprime I J
I ⋅ J ⊆ I ∩ J
R: CRing I, J: Ideal R p: Coprime I J
I ∩ J ⊆ I ⋅ J
R: CRing I, J: Ideal R p: Coprime I J
ideal_unit R ⊆ (I + J)
R: CRing I, J: Ideal R p: I + J ↔ ideal_unit R
ideal_unit R ⊆ (I + J)
R: CRing I, J: Ideal R p: ideal_unit R ↔ I + J
ideal_unit R ⊆ (I + J)
exact p.
R: CRing I, J: Ideal R p: Coprime I J
I ⋅ J ⊆ I ∩ J
apply ideal_product_subset_intersection.Defined.
R: CRing I, J, K: Ideal R
(I :: J) :: K ↔ I :: J ⋅ K
R: CRing I, J, K: Ideal R
(I :: J) :: K ↔ I :: J ⋅ K
R: CRing I, J, K: Ideal R
((I :: J) :: K) ⊆ (I :: J ⋅ K)
R: CRing I, J, K: Ideal R
(I :: J ⋅ K) ⊆ ((I :: J) :: K)
R: CRing I, J, K: Ideal R
((I :: J) :: K) ⊆ (I :: J ⋅ K)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) r: R jk: subgroup_generated_type
(ideal_product_naive_type J K) r
I (x * r)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) r: rng_op R jk: subgroup_generated_type
(ideal_product_naive_type J K) r
I (x * r)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) r: R jk: subgroup_generated_type
(ideal_product_naive_type J K) r
I (x * r)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) y, z, z': R j: J z k: K z'
I (x * (z * z'))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0)
I (x * mon_unit)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) g, h: R jk1: subgroup_generated_type (ideal_product_naive_type J K) g jk2: subgroup_generated_type (ideal_product_naive_type J K) h IHjk1: I (x * g) IHjk2: I (x * h)
I (x * sg_op g (inv h))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) y, z, z': R j: J z k: K z'
I (x * (z * z'))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) y, z, z': R j: J z k: K z'
I (x * (z' * z))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) y, z, z': R j: J z k: K z'
I (x * z' * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) y, z, z': R j: J z k: K z' p': leftideal_quotient I J (x * z') snd: rightideal_quotient I J (x * z')
I (x * z' * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) y, z, z': R j: J z k: K z' snd: rightideal_quotient I J (x * z') p': forallx0 : R, J x0 -> I (x * z' * x0)
I (x * z' * z)
exact (p' z j).
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0)
I (x * mon_unit)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0)
I (x * 0)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0)
I 0
apply ideal_in_zero.
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) g, h: R jk1: subgroup_generated_type (ideal_product_naive_type J K) g jk2: subgroup_generated_type (ideal_product_naive_type J K) h IHjk1: I (x * g) IHjk2: I (x * h)
I (x * sg_op g (inv h))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) g, h: R jk1: subgroup_generated_type (ideal_product_naive_type J K) g jk2: subgroup_generated_type (ideal_product_naive_type J K) h IHjk1: I (x * g) IHjk2: I (x * h)
I (x * (g - h))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) g, h: R jk1: subgroup_generated_type (ideal_product_naive_type J K) g jk2: subgroup_generated_type (ideal_product_naive_type J K) h IHjk1: I (x * g) IHjk2: I (x * h)
I (plus (x * g) (x * - h))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) g, h: R jk1: subgroup_generated_type (ideal_product_naive_type J K) g jk2: subgroup_generated_type (ideal_product_naive_type J K) h IHjk1: I (x * g) IHjk2: I (x * h)
I (x * g - x * h)
byapply ideal_in_plus_negate.
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) r: rng_op R jk: subgroup_generated_type
(ideal_product_naive_type J K) r
I (x * r)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) y, z, z': R j: J z k: K z'
I (x * (z * z'))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0)
I (x * mon_unit)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) g, h: R jk1: subgroup_generated_type (ideal_product_naive_type J K) g jk2: subgroup_generated_type (ideal_product_naive_type J K) h IHjk1: I (x * g) IHjk2: I (x * h)
I (x * sg_op g (inv h))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) y, z, z': R j: J z k: K z'
I (x * (z * z'))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) y, z, z': R j: J z k: K z'
I (z * z' * x)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) y, z, z': R j: J z k: K z'
I (z * (z' * x))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) y, z, z': R j: J z k: K z'
I (z' * x * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) y, z, z': R j: J z k: K z' q': leftideal_quotient I J (x * z') snd: rightideal_quotient I J (x * z')
I (z' * x * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) y, z, z': R j: J z k: K z' snd: rightideal_quotient I J (x * z') q': forallx0 : R, J x0 -> I (x * z' * x0)
I (z' * x * z)
exact (q' z j).
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0)
I (x * mon_unit)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0)
I (0 * x)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0)
I 0
apply ideal_in_zero.
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) g, h: R jk1: subgroup_generated_type (ideal_product_naive_type J K) g jk2: subgroup_generated_type (ideal_product_naive_type J K) h IHjk1: I (x * g) IHjk2: I (x * h)
I (x * sg_op g (inv h))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) g, h: R jk1: subgroup_generated_type (ideal_product_naive_type J K) g jk2: subgroup_generated_type (ideal_product_naive_type J K) h IHjk1: I (x * g) IHjk2: I (x * h)
I ((g - h) * x)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) g, h: R jk1: subgroup_generated_type (ideal_product_naive_type J K) g jk2: subgroup_generated_type (ideal_product_naive_type J K) h IHjk1: I (x * g) IHjk2: I (x * h)
I (plus (g * x) (- h * x))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, K x0 -> (I :: J) (x * x0) p: forallx0 : R, K x0 -> (I :: J) (x * x0) g, h: R jk1: subgroup_generated_type (ideal_product_naive_type J K) g jk2: subgroup_generated_type (ideal_product_naive_type J K) h IHjk1: I (x * g) IHjk2: I (x * h)
I (g * x - h * x)
byapply ideal_in_plus_negate.
R: CRing I, J, K: Ideal R
(I :: J ⋅ K) ⊆ ((I :: J) :: K)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (x * r * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: rng_op R j: J z
I (x * r * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: rng_op R k: K r z: R j: J z
I (x * r * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: rng_op R k: K r z: rng_op R j: J z
I (x * r * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (x * r * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (x * (r * z))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (x * (z * r))
byapply p, tr, sgt_in, ipn_in.
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: rng_op R j: J z
I (x * r * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (x * r * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (z * (x * r))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (z * (r * x))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (z * r * x)
byapply q, tr, sgt_in, ipn_in.
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: rng_op R k: K r z: R j: J z
I (x * r * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (x * r * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (r * x * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (r * (x * z))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (x * z * r)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (x * (z * r))
byapply p, tr, sgt_in, ipn_in.
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: rng_op R k: K r z: rng_op R j: J z
I (x * r * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (x * r * z)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (z * (r * x))
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (z * r * x)
R: CRing I, J, K: Ideal R x: R q: forallx0 : rng_op R, (J ⋅ K) x0 -> I (x * x0) p: forallx0 : R, (J ⋅ K) x0 -> I (x * x0) r: R k: K r z: R j: J z
I (x * (z * r))
byapply p, tr, sgt_in, ipn_in.Defined.(** The ideal quotient is a right adjoint to the product in the monoidal lattice of ideals. *)
R: CRing I, J, K: Ideal R
I ⋅ J ⊆ K <-> I ⊆ (K :: J)
R: CRing I, J, K: Ideal R
I ⋅ J ⊆ K <-> I ⊆ (K :: J)
R: CRing I, J, K: Ideal R
I ⋅ J ⊆ K -> I ⊆ (K :: J)
R: CRing I, J, K: Ideal R
I ⊆ (K :: J) -> I ⋅ J ⊆ K
R: CRing I, J, K: Ideal R
I ⋅ J ⊆ K -> I ⊆ (K :: J)
R: CRing I, J, K: Ideal R p: I ⋅ J ⊆ K r: R i: I r s: R j: J s
K (r * s)
R: CRing I, J, K: Ideal R p: I ⋅ J ⊆ K r: R i: I r s: R j: J s
K (r * s)
R: CRing I, J, K: Ideal R p: I ⋅ J ⊆ K r: R i: I r s: R j: J s
K (r * s)
byapply p, tr, sgt_in, ipn_in.
R: CRing I, J, K: Ideal R p: I ⋅ J ⊆ K r: R i: I r s: R j: J s
K (r * s)
R: CRing I, J, K: Ideal R p: I ⋅ J ⊆ K r: R i: I r s: R j: J s
K (s * r)
R: CRing I, J, K: Ideal R p: I ⋅ J ⊆ K r: R i: I r s: R j: J s
K (r * s)
byapply p, tr, sgt_in; rapply ipn_in.
R: CRing I, J, K: Ideal R
I ⊆ (K :: J) -> I ⋅ J ⊆ K
R: CRing I, J, K: Ideal R p: I ⊆ (K :: J) x: R
(I ⋅ J) x -> K x
R: CRing I, J, K: Ideal R p: I ⊆ (K :: J) x: R
subgroup_generated_type (ideal_product_naive_type I J)
x -> K x
R: CRing I, J, K: Ideal R p: I ⊆ (K :: J) x: R q: subgroup_generated_type
(ideal_product_naive_type I J) x
K x
R: CRing I, J, K: Ideal R p: I ⊆ (K :: J) r: R x: ideal_product_naive_type I J r
K r
R: CRing I, J, K: Ideal R p: I ⊆ (K :: J)
K mon_unit
R: CRing I, J, K: Ideal R p: I ⊆ (K :: J) g, h: R q1: subgroup_generated_type
(ideal_product_naive_type I J) g q2: subgroup_generated_type
(ideal_product_naive_type I J) h IHq1: K g IHq2: K h
K (sg_op g (inv h))
R: CRing I, J, K: Ideal R p: I ⊆ (K :: J) r: R x: ideal_product_naive_type I J r
K r
R: CRing I, J, K: Ideal R p: I ⊆ (K :: J) x, y: R s: I x s0: J y
K (x * y)
R: CRing I, J, K: Ideal R x: R p: leftideal_quotient K J x q: rightideal_quotient K J x y: R s: I x s0: J y
K (x * y)
R: CRing I, J, K: Ideal R x: R q: rightideal_quotient K J x y: R s: I x s0: J y p: forallx0 : R, J x0 -> K (x * x0)
K (x * y)
byapply p.
R: CRing I, J, K: Ideal R p: I ⊆ (K :: J)
K mon_unit
R: CRing I, J, K: Ideal R p: I ⊆ (K :: J) g, h: R q1: subgroup_generated_type
(ideal_product_naive_type I J) g q2: subgroup_generated_type
(ideal_product_naive_type I J) h IHq1: K g IHq2: K h
K (sg_op g (inv h))
R: CRing I, J, K: Ideal R p: I ⊆ (K :: J) g, h: R q1: subgroup_generated_type
(ideal_product_naive_type I J) g q2: subgroup_generated_type
(ideal_product_naive_type I J) h IHq1: K g IHq2: K h
forallx : R / I,
(funr : R / I => x * r = r * x)
(rng_quotient_map I y)
R: CRing I: Ideal R y, x: R
rng_quotient_map I x * rng_quotient_map I y =
rng_quotient_map I y * rng_quotient_map I x
R: CRing I: Ideal R y, x: R
rng_quotient_map I (x * y) =
rng_quotient_map I y * rng_quotient_map I x
R: CRing I: Ideal R y, x: R
rng_quotient_map I (x * y) =
rng_quotient_map I (y * x)
R: CRing I: Ideal R y, x: R
x * y = y * x
apply commutativity.Defined.Definitioncring_quotient (R : CRing) (I : Ideal R) : CRing
:= Build_CRing (QuotientRing R I) _.Definitioncring_quotient_map {R : CRing} (I : Ideal R)
: R $-> cring_quotient R I
:= rng_quotient_map I.