Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.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]
Require Import Algebra.Congruence.Require Import Algebra.AbGroups.Require Import Classes.interfaces.abstract_algebra.Require Import Algebra.Rings.Ring.Require Import Algebra.Rings.Ideal.(** * Quotient Rings *)(** In this file we define the quotient of a ring by an ideal. *)Import Ideal.Notation.LocalOpen Scope ring_scope.LocalOpen Scope wc_iso_scope.SectionQuotientRing.Context (R : Ring) (I : Ideal R).Instanceplus_quotient_group : Plus (QuotientAbGroup R I) := group_sgop.
R: Ring I: Ideal R
IsCongruence (in_cosetL I)
R: Ring I: Ideal R
IsCongruence (in_cosetL I)
R: Ring I: Ideal R
forallxx'yy' : R,
in_cosetL I x x' ->
in_cosetL I y y' ->
in_cosetL I (sg_op x y) (sg_op x' y')
R: Ring I: Ideal R x, x', y, y': R p: in_cosetL I x x' q: in_cosetL I y y'
in_cosetL I (sg_op x y) (sg_op x' y')
R: Ring I: Ideal R x, x', y, y': R p: in_cosetL I x x' q: in_cosetL I y y'
I (- (x * y) + x' * y')
R: Ring I: Ideal R x, x', y, y': R p: in_cosetL I x x' q: in_cosetL I y y'
I (- (x * y) + (0 + x' * y'))
R: Ring I: Ideal R x, x', y, y': R p: in_cosetL I x x' q: in_cosetL I y y'
I (- (x * y) + (x' * y - x' * y + x' * y'))
R: Ring I: Ideal R x, x', y, y': R p: in_cosetL I x x' q: in_cosetL I y y'
I (- (x * y) + x' * y - x' * y + x' * y')
R: Ring I: Ideal R x, x', y, y': R p: in_cosetL I x x' q: in_cosetL I y y'
I (- x * y + x' * y - x' * y + x' * y')
R: Ring I: Ideal R x, x', y, y': R p: in_cosetL I x x' q: in_cosetL I y y'
I ((- x + x') * y - x' * y + x' * y')
R: Ring I: Ideal R x, x', y, y': R p: in_cosetL I x x' q: in_cosetL I y y'
I ((- x + x') * y + (- (x' * y) + x' * y'))
R: Ring I: Ideal R x, x', y, y': R p: in_cosetL I x x' q: in_cosetL I y y'
I ((- x + x') * y + (x' * - y + x' * y'))
R: Ring I: Ideal R x, x', y, y': R p: in_cosetL I x x' q: in_cosetL I y y'
I ((- x + x') * y + x' * (- y + y'))
R: Ring I: Ideal R x, x', y, y': R p: in_cosetL I x x' q: in_cosetL I y y'
I ((- x + x') * y)
R: Ring I: Ideal R x, x', y, y': R p: in_cosetL I x x' q: in_cosetL I y y'
I (x' * (- y + y'))
R: Ring I: Ideal R x, x', y, y': R p: in_cosetL I x x' q: in_cosetL I y y'
I ((- x + x') * y)
by rapply isrightideal.
R: Ring I: Ideal R x, x', y, y': R p: in_cosetL I x x' q: in_cosetL I y y'
I (x' * (- y + y'))
by rapply isleftideal.Defined.
R: Ring I: Ideal R
Mult (QuotientAbGroup R I)
R: Ring I: Ideal R
Mult (QuotientAbGroup R I)
R: Ring I: Ideal R x: QuotientAbGroup R I
QuotientAbGroup R I -> QuotientAbGroup R I
R: Ring I: Ideal R x: QuotientAbGroup R I
R -> QuotientAbGroup R I
R: Ring I: Ideal R x: QuotientAbGroup R I
forallx0y : R,
in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x0 y -> ?pclass x0 = ?pclass y
R: Ring I: Ideal R x: QuotientAbGroup R I
R -> QuotientAbGroup R I
R: Ring I: Ideal R y: R
QuotientAbGroup R I -> QuotientAbGroup R I
R: Ring I: Ideal R y: R
R -> QuotientAbGroup R I
R: Ring I: Ideal R y: R
forallxy0 : R,
in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x y0 -> ?pclass x = ?pclass y0
R: Ring I: Ideal R y: R
R -> QuotientAbGroup R I
R: Ring I: Ideal R y, x: R
QuotientAbGroup R I
R: Ring I: Ideal R y, x: R
R
exact (x * y).
R: Ring I: Ideal R y: R
forallxy0 : R,
in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x y0 ->
(funx0 : R =>
class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (x0 * y)) x =
(funx0 : R =>
class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (x0 * y)) y0
R: Ring I: Ideal R y, x, x': R p: in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x x'
(funx : R =>
class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (x * y)) x =
(funx : R =>
class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (x * y)) x'
R: Ring I: Ideal R y, x, x': R p: in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x x'
in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} (x * y) (x' * y)
by rapply iscong.
R: Ring I: Ideal R x: QuotientAbGroup R I
forallx0y : R,
in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x0 y ->
(funy0 : R =>
Quotient_rec
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (QuotientAbGroup R I)
(funx : R =>
class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (x * y0))
(fun (xx' : R)
(p : in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x x') =>
qglue (iscong p (reflexive_in_cosetL I y0))) x) x0 =
(funy0 : R =>
Quotient_rec
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (QuotientAbGroup R I)
(funx : R =>
class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (x * y0))
(fun (xx' : R)
(p : in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x x') =>
qglue (iscong p (reflexive_in_cosetL I y0))) x) y
R: Ring I: Ideal R x: QuotientAbGroup R I y, y': R q: in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} y y'
(funy : R =>
Quotient_rec
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (QuotientAbGroup R I)
(funx : R =>
class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (x * y))
(fun (xx' : R)
(p : in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x x') =>
qglue (iscong p (reflexive_in_cosetL I y))) x) y =
(funy : R =>
Quotient_rec
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (QuotientAbGroup R I)
(funx : R =>
class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (x * y))
(fun (xx' : R)
(p : in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x x') =>
qglue (iscong p (reflexive_in_cosetL I y))) x) y'
R: Ring I: Ideal R y, y': R q: in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} y y'
forallx : QuotientAbGroup R I,
(funy : R =>
Quotient_rec
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (QuotientAbGroup R I)
(funx0 : R =>
class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (x0 * y))
(fun (x0x' : R)
(p : in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x0 x') =>
qglue (iscong p (reflexive_in_cosetL I y))) x) y =
(funy : R =>
Quotient_rec
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (QuotientAbGroup R I)
(funx0 : R =>
class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (x0 * y))
(fun (x0x' : R)
(p : in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x0 x') =>
qglue (iscong p (reflexive_in_cosetL I y))) x) y'
R: Ring I: Ideal R y, y': R q: in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} y y'
forallx : R,
(funq : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) =>
(funy : R =>
Quotient_rec
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (QuotientAbGroup R I)
(funx0 : R =>
class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (x0 * y))
(fun (x0x' : R)
(p : in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x0 x') =>
qglue (iscong p (reflexive_in_cosetL I y))) q) y =
(funy : R =>
Quotient_rec
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (QuotientAbGroup R I)
(funx0 : R =>
class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (x0 * y))
(fun (x0x' : R)
(p : in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x0 x') =>
qglue (iscong p (reflexive_in_cosetL I y))) q) y')
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) x)
R: Ring I: Ideal R y, y': R q: in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} y y' x: R
(funq : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) =>
(funy : R =>
Quotient_rec
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (QuotientAbGroup R I)
(funx : R =>
class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (x * y))
(fun (xx' : R)
(p : in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x x') =>
qglue (iscong p (reflexive_in_cosetL I y))) q) y =
(funy : R =>
Quotient_rec
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (QuotientAbGroup R I)
(funx : R =>
class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) (x * y))
(fun (xx' : R)
(p : in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x x') =>
qglue (iscong p (reflexive_in_cosetL I y))) q) y')
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) x)
R: Ring I: Ideal R y, y': R q: in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} y y' x: R
class_of (funxy : R => I (sg_op (- x) y)) (x * y) =
class_of (funxy : R => I (sg_op (- x) y)) (x * y')
R: Ring I: Ideal R y, y': R q: in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} y y' x: R
I (sg_op (- (x * y)) (x * y'))
by rapply iscong.Defined.Instanceone_quotient_abgroup : One (QuotientAbGroup R I) := class_of _ one.
R: Ring I: Ideal R
IsRing (QuotientAbGroup R I)
R: Ring I: Ideal R
IsRing (QuotientAbGroup R I)
R: Ring I: Ideal R
IsAbGroup (QuotientAbGroup R I)
R: Ring I: Ideal R
IsMonoid (QuotientAbGroup R I)
R: Ring I: Ideal R
LeftDistribute mult plus
R: Ring I: Ideal R
RightDistribute mult plus
R: Ring I: Ideal R
IsMonoid (QuotientAbGroup R I)
R: Ring I: Ideal R
LeftDistribute mult plus
R: Ring I: Ideal R
RightDistribute mult plus
R: Ring I: Ideal R
IsHSet (QuotientAbGroup R I)
R: Ring I: Ideal R
Associative sg_op
R: Ring I: Ideal R
LeftIdentity sg_op mon_unit
R: Ring I: Ideal R
RightIdentity sg_op mon_unit
R: Ring I: Ideal R
LeftDistribute mult plus
R: Ring I: Ideal R
RightDistribute mult plus
R: Ring I: Ideal R
Associative sg_op
R: Ring I: Ideal R
LeftIdentity sg_op mon_unit
R: Ring I: Ideal R
RightIdentity sg_op mon_unit
R: Ring I: Ideal R
LeftDistribute mult plus
R: Ring I: Ideal R
RightDistribute mult plus
(** Associativity follows from the underlying operation *)
R: Ring I: Ideal R
Associative sg_op
R: Ring I: Ideal R x, y: QuotientAbGroup R I
forallz : QuotientAbGroup R I,
sg_op x (sg_op y z) = sg_op (sg_op x y) z
R: Ring I: Ideal R x: QuotientAbGroup R I z: R
forally : QuotientAbGroup R I,
(funq : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) =>
sg_op x (sg_op y q) = sg_op (sg_op x y) q)
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) z)
R: Ring I: Ideal R z, y: R
forallx : QuotientAbGroup R I,
(funq : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) =>
(funq0 : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) =>
sg_op x (sg_op q q0) = sg_op (sg_op x q) q0)
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) z))
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) y)
R: Ring I: Ideal R z, y, x: R
(funq : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) =>
(funq0 : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) =>
(funq1 : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) =>
sg_op q (sg_op q0 q1) = sg_op (sg_op q q0) q1)
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) z))
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) y))
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) x)
R: Ring I: Ideal R z, y, x: R
class_of (funxy : R => I (sg_op (- x) y))
(x * (y * z)) =
class_of (funxy : R => I (sg_op (- x) y))
(x * y * z)
R: Ring I: Ideal R z, y, x: R
x * (y * z) = x * y * z
apply associativity.
R: Ring I: Ideal R
LeftIdentity sg_op mon_unit
R: Ring I: Ideal R
RightIdentity sg_op mon_unit
R: Ring I: Ideal R
LeftDistribute mult plus
R: Ring I: Ideal R
RightDistribute mult plus
(* Left and right identity follow from the underlying structure *)
R: Ring I: Ideal R x: R
(funq : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) => sg_op mon_unit q = q)
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) x)
R: Ring I: Ideal R x: R
(funq : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) => sg_op q mon_unit = q)
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) x)
R: Ring I: Ideal R
LeftDistribute mult plus
R: Ring I: Ideal R
RightDistribute mult plus
R: Ring I: Ideal R x: R
class_of (funxy : R => I (sg_op (- x) y)) (1 * x) =
class_of (funxy : R => I (sg_op (- x) y)) x
R: Ring I: Ideal R x: R
class_of (funxy : R => I (sg_op (- x) y)) (x * 1) =
class_of (funxy : R => I (sg_op (- x) y)) x
R: Ring I: Ideal R
LeftDistribute mult plus
R: Ring I: Ideal R
RightDistribute mult plus
R: Ring I: Ideal R x: R
1 * x = x
R: Ring I: Ideal R x: R
x * 1 = x
R: Ring I: Ideal R
LeftDistribute mult plus
R: Ring I: Ideal R
RightDistribute mult plus
R: Ring I: Ideal R x: R
x * 1 = x
R: Ring I: Ideal R
LeftDistribute mult plus
R: Ring I: Ideal R
RightDistribute mult plus
R: Ring I: Ideal R
LeftDistribute mult plus
R: Ring I: Ideal R
RightDistribute mult plus
(** Finally distributivity also follows *)
R: Ring I: Ideal R
LeftDistribute mult plus
R: Ring I: Ideal R x, y: QuotientAbGroup R I
forallc : QuotientAbGroup R I,
x * (y + c) = x * y + x * c
R: Ring I: Ideal R x: QuotientAbGroup R I z: R
forally : QuotientAbGroup R I,
(funq : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) => x * (y + q) = x * y + x * q)
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) z)
R: Ring I: Ideal R z, y: R
forallx : QuotientAbGroup R I,
(funq : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) =>
(funq0 : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) => x * (q + q0) = x * q + x * q0)
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) z))
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) y)
R: Ring I: Ideal R z, y, x: R
(funq : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) =>
(funq0 : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) =>
(funq1 : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) => q * (q0 + q1) = q * q0 + q * q1)
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) z))
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) y))
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) x)
R: Ring I: Ideal R z, y, x: R
class_of (funxy : R => I (sg_op (- x) y))
(ring_mult x (sg_op y z)) =
class_of (funxy : R => I (sg_op (- x) y))
(sg_op (ring_mult x y) (ring_mult x z))
R: Ring I: Ideal R z, y, x: R
ring_mult x (sg_op y z) =
sg_op (ring_mult x y) (ring_mult x z)
apply simple_distribute_l.
R: Ring I: Ideal R
RightDistribute mult plus
R: Ring I: Ideal R
RightDistribute mult plus
R: Ring I: Ideal R x, y: QuotientAbGroup R I
forallc : QuotientAbGroup R I,
(x + y) * c = x * c + y * c
R: Ring I: Ideal R x: QuotientAbGroup R I z: R
forally : QuotientAbGroup R I,
(funq : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) => (x + y) * q = x * q + y * q)
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) z)
R: Ring I: Ideal R z, y: R
forallx : QuotientAbGroup R I,
(funq : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) =>
(funq0 : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) => (x + q) * q0 = x * q0 + q * q0)
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) z))
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) y)
R: Ring I: Ideal R z, y, x: R
(funq : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) =>
(funq0 : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) =>
(funq1 : Quotient
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) => (q + q0) * q1 = q * q1 + q0 * q1)
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) z))
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) y))
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|}) x)
R: Ring I: Ideal R z, y, x: R
class_of (funxy : R => I (sg_op (- x) y))
(ring_mult (sg_op x y) z) =
class_of (funxy : R => I (sg_op (- x) y))
(sg_op (ring_mult x z) (ring_mult y z))
R: Ring I: Ideal R z, y, x: R
ring_mult (sg_op x y) z =
sg_op (ring_mult x z) (ring_mult y z)
exact _.Defined.(** *** Specialized induction principles *)(** We provide some specialized induction principes for [QuotientRing] that require cleaner hypotheses than the ones given by [Quotient_ind]. *)DefinitionQuotientRing_ind {R : Ring} {I : Ideal R} (P : R / I -> Type)
`{forallx, IsHSet (P x)}
(c : forall (x : R), P (rng_quotient_map I x))
(g : forall (xy : R) (h : I (- x + y)), qglue h # c x = c y)
: forall (r : R / I), P r
:= Quotient_ind _ P c g.(** And a version eliminating into hprops. This one is especially useful. *)DefinitionQuotientRing_ind_hprop {R : Ring} {I : Ideal R} (P : R / I -> Type)
`{forallx, IsHProp (P x)} (c : forall (x : R), P (rng_quotient_map I x))
: forall (r : R / I), P r
:= Quotient_ind_hprop _ P c.(** ** Quotient thoery *)(** First isomorphism theorem for commutative rings *)
H: Funext A, B: Ring f: A $-> B
A / ideal_kernel f ≅ rng_image f
H: Funext A, B: Ring f: A $-> B
A / ideal_kernel f ≅ rng_image f
H: Funext A, B: Ring f: A $-> B
GroupIsomorphism (A / ideal_kernel f) (rng_image f)
H: Funext A, B: Ring f: A $-> B
IsMonoidPreserving ?e
H: Funext A, B: Ring f: A $-> B
IsMonoidPreserving (abgroup_first_iso f)
H: Funext A, B: Ring f: A $-> B
IsSemiGroupPreserving (abgroup_first_iso f)
H: Funext A, B: Ring f: A $-> B
IsUnitPreserving (abgroup_first_iso f)
H: Funext A, B: Ring f: A $-> B
IsSemiGroupPreserving (abgroup_first_iso f)
H: Funext A, B: Ring f: A $-> B x, y: A / ideal_kernel f
abgroup_first_iso f (sg_op x y) =
sg_op (abgroup_first_iso f x) (abgroup_first_iso f y)
H: Funext A, B: Ring f: A $-> B x: A / ideal_kernel f y: A
(funr : A / ideal_kernel f =>
abgroup_first_iso f (sg_op x r) =
sg_op (abgroup_first_iso f x) (abgroup_first_iso f r))
(rng_quotient_map (ideal_kernel f) y)
H: Funext A, B: Ring f: A $-> B y, x: A
(funr : A / ideal_kernel f =>
(funr0 : A / ideal_kernel f =>
abgroup_first_iso f (sg_op r r0) =
sg_op (abgroup_first_iso f r)
(abgroup_first_iso f r0))
(rng_quotient_map (ideal_kernel f) y))
(rng_quotient_map (ideal_kernel f) x)
H: Funext A, B: Ring f: A $-> B y, x: A
(abgroup_first_iso f
(sg_op (rng_quotient_map (ideal_kernel f) x)
(rng_quotient_map (ideal_kernel f) y))).1 =
(sg_op
(abgroup_first_iso f
(rng_quotient_map (ideal_kernel f) x))
(abgroup_first_iso f
(rng_quotient_map (ideal_kernel f) y))).1
exact (rng_homo_mult _ _ _).
H: Funext A, B: Ring f: A $-> B
IsUnitPreserving (abgroup_first_iso f)
H: Funext A, B: Ring f: A $-> B
(abgroup_first_iso f mon_unit).1 = mon_unit.1
exact (rng_homo_one _).Defined.(** Invariance of equal ideals *)
R: Ring I, J: Ideal R p: (I ↔ J)%ideal
R / I ≅ R / J
R: Ring I, J: Ideal R p: (I ↔ J)%ideal
R / I ≅ R / J
R: Ring I, J: Ideal R p: (I ↔ J)%ideal
R / I <~> R / J
R: Ring I, J: Ideal R p: (I ↔ J)%ideal
IsSemiRingPreserving ?e
R: Ring I, J: Ideal R p: (I ↔ J)%ideal
R / I <~> R / J
R: Ring I, J: Ideal R p: (I ↔ J)%ideal
R <~> R
R: Ring I, J: Ideal R p: (I ↔ J)%ideal
forallxy : R,
in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x y <->
in_cosetL
{|
normalsubgroup_subgroup := J;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R J
|} (?f x) (?f y)
R: Ring I, J: Ideal R p: (I ↔ J)%ideal
forallxy : R,
in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x y <->
in_cosetL
{|
normalsubgroup_subgroup := J;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R J
|} (1%equiv x) (1%equiv y)
R: Ring I, J: Ideal R p: (I ↔ J)%ideal x, y: R
I (sg_op (- x) y) <-> J (sg_op (- x) y)
apply p.
R: Ring I, J: Ideal R p: (I ↔ J)%ideal
IsSemiRingPreserving
(equiv_quotient_functor'
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|})
(in_cosetL
{|
normalsubgroup_subgroup := J;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R J
|}) 1
(funxy : R =>
p (sg_op (- x) y)
:
in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|} x y <->
in_cosetL
{|
normalsubgroup_subgroup := J;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R J
|} (1%equiv x) (1%equiv y)))
R: Ring I, J: Ideal R p: (I ↔ J)%ideal
IsSemiGroupPreserving
(equiv_quotient_functor'
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|})
(in_cosetL
{|
normalsubgroup_subgroup := J;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R J
|}) 1 (funxy : R => p (sg_op (- x) y)))
R: Ring I, J: Ideal R p: (I ↔ J)%ideal
IsSemiGroupPreserving
(equiv_quotient_functor'
(in_cosetL
{|
normalsubgroup_subgroup := I;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R I
|})
(in_cosetL
{|
normalsubgroup_subgroup := J;
normalsubgroup_isnormal :=
isnormal_ab_subgroup R J
|}) 1 (funxy : R => p (sg_op (- x) y)))
R: Ring I, J: Ideal R p: (I ↔ J)%ideal x: R / I
forally : Quotient (funxy : R => I (sg_op (- x) y)),
Quotient_functor (funxy0 : R => I (sg_op (- x) y0))
(funxy0 : R => J (sg_op (- x) y0)) idmap
(funxy0 : R => fst (p (sg_op (- x) y0)))
(sg_op x y) =
sg_op
(Quotient_functor
(funxy0 : R => I (sg_op (- x) y0))
(funxy0 : R => J (sg_op (- x) y0)) idmap
(funxy0 : R => fst (p (sg_op (- x) y0))) x)
(Quotient_functor
(funxy0 : R => I (sg_op (- x) y0))
(funxy0 : R => J (sg_op (- x) y0)) idmap
(funxy0 : R => fst (p (sg_op (- x) y0))) y)
R: Ring I, J: Ideal R p: (I ↔ J)%ideal x: R / I
forally : Quotient (funxy : R => I (sg_op (- x) y)),
Quotient_functor (funxy0 : R => I (sg_op (- x) y0))
(funxy0 : R => J (sg_op (- x) y0)) idmap
(funxy0 : R => fst (p (sg_op (- x) y0)))
(sg_op x y) =
sg_op
(Quotient_functor
(funxy0 : R => I (sg_op (- x) y0))
(funxy0 : R => J (sg_op (- x) y0)) idmap
(funxy0 : R => fst (p (sg_op (- x) y0))) x)
(Quotient_functor
(funxy0 : R => I (sg_op (- x) y0))
(funxy0 : R => J (sg_op (- x) y0)) idmap
(funxy0 : R => fst (p (sg_op (- x) y0))) y)
R: Ring I, J: Ideal R p: (I ↔ J)%ideal x: R / I
forallx0 : R,
(funr : R / I =>
Quotient_functor (funxy : R => I (sg_op (- x) y))
(funxy : R => J (sg_op (- x) y)) idmap
(funxy : R => fst (p (sg_op (- x) y)))
(sg_op x r) =
sg_op
(Quotient_functor
(funxy : R => I (sg_op (- x) y))
(funxy : R => J (sg_op (- x) y)) idmap
(funxy : R => fst (p (sg_op (- x) y))) x)
(Quotient_functor
(funxy : R => I (sg_op (- x) y))
(funxy : R => J (sg_op (- x) y)) idmap
(funxy : R => fst (p (sg_op (- x) y))) r))
(rng_quotient_map I x0)
R: Ring I, J: Ideal R p: (I ↔ J)%ideal x: R / I
forallx0 : R,
(funr : R / I =>
Quotient_functor (funxy : R => I (sg_op (- x) y))
(funxy : R => J (sg_op (- x) y)) idmap
(funxy : R => fst (p (sg_op (- x) y)))
(sg_op x r) =
sg_op
(Quotient_functor
(funxy : R => I (sg_op (- x) y))
(funxy : R => J (sg_op (- x) y)) idmap
(funxy : R => fst (p (sg_op (- x) y))) x)
(Quotient_functor
(funxy : R => I (sg_op (- x) y))
(funxy : R => J (sg_op (- x) y)) idmap
(funxy : R => fst (p (sg_op (- x) y))) r))
(rng_quotient_map I x0)
R: Ring I, J: Ideal R p: (I ↔ J)%ideal y: R
forallx : R / I,
(funr : R / I =>
Quotient_functor (funx0y : R => I (sg_op (- x0) y))
(funx0y : R => J (sg_op (- x0) y)) idmap
(funx0y : R => fst (p (sg_op (- x0) y)))
(sg_op x r) =
sg_op
(Quotient_functor
(funx0y : R => I (sg_op (- x0) y))
(funx0y : R => J (sg_op (- x0) y)) idmap
(funx0y : R => fst (p (sg_op (- x0) y))) x)
(Quotient_functor
(funx0y : R => I (sg_op (- x0) y))
(funx0y : R => J (sg_op (- x0) y)) idmap
(funx0y : R => fst (p (sg_op (- x0) y))) r))
(rng_quotient_map I y)
R: Ring I, J: Ideal R p: (I ↔ J)%ideal y: R
forallx : R / I,
(funr : R / I =>
Quotient_functor (funx0y : R => I (sg_op (- x0) y))
(funx0y : R => J (sg_op (- x0) y)) idmap
(funx0y : R => fst (p (sg_op (- x0) y)))
(sg_op x r) =
sg_op
(Quotient_functor
(funx0y : R => I (sg_op (- x0) y))
(funx0y : R => J (sg_op (- x0) y)) idmap
(funx0y : R => fst (p (sg_op (- x0) y))) x)
(Quotient_functor
(funx0y : R => I (sg_op (- x0) y))
(funx0y : R => J (sg_op (- x0) y)) idmap
(funx0y : R => fst (p (sg_op (- x0) y))) r))
(rng_quotient_map I y)
R: Ring I, J: Ideal R p: (I ↔ J)%ideal y: R
forallx : R,
(funr : R / I =>
(funr0 : R / I =>
Quotient_functor
(funx0y : R => I (sg_op (- x0) y))
(funx0y : R => J (sg_op (- x0) y)) idmap
(funx0y : R => fst (p (sg_op (- x0) y)))
(sg_op r r0) =
sg_op
(Quotient_functor
(funx0y : R => I (sg_op (- x0) y))
(funx0y : R => J (sg_op (- x0) y)) idmap
(funx0y : R => fst (p (sg_op (- x0) y))) r)
(Quotient_functor
(funx0y : R => I (sg_op (- x0) y))
(funx0y : R => J (sg_op (- x0) y)) idmap
(funx0y : R => fst (p (sg_op (- x0) y))) r0))
(rng_quotient_map I y)) (rng_quotient_map I x)
R: Ring I, J: Ideal R p: (I ↔ J)%ideal y: R
forallx : R,
(funr : R / I =>
(funr0 : R / I =>
Quotient_functor
(funx0y : R => I (sg_op (- x0) y))
(funx0y : R => J (sg_op (- x0) y)) idmap
(funx0y : R => fst (p (sg_op (- x0) y)))
(sg_op r r0) =
sg_op
(Quotient_functor
(funx0y : R => I (sg_op (- x0) y))
(funx0y : R => J (sg_op (- x0) y)) idmap
(funx0y : R => fst (p (sg_op (- x0) y))) r)
(Quotient_functor
(funx0y : R => I (sg_op (- x0) y))
(funx0y : R => J (sg_op (- x0) y)) idmap
(funx0y : R => fst (p (sg_op (- x0) y))) r0))
(rng_quotient_map I y)) (rng_quotient_map I x)
R: Ring I, J: Ideal R p: (I ↔ J)%ideal y, x: R
J (sg_op (- sg_op x y) (sg_op x y))
R: Ring I, J: Ideal R p: (I ↔ J)%ideal y, x: R
J (sg_op (- (x * y)) (x * y))
R: Ring I, J: Ideal R p: (I ↔ J)%ideal y, x: R
J (- (x + y) + (x + y))
R: Ring I, J: Ideal R p: (I ↔ J)%ideal y, x: R
J (sg_op (- (x * y)) (x * y))
R: Ring I, J: Ideal R p: (I ↔ J)%ideal y, x: R
J (- (x + y) + (x + y))
R: Ring I, J: Ideal R p: (I ↔ J)%ideal y, x: R
J (- (x * y) + x * y)
R: Ring I, J: Ideal R p: (I ↔ J)%ideal y, x: R
J 0
R: Ring I, J: Ideal R p: (I ↔ J)%ideal y, x: R
J 0
1,2: apply ideal_in_zero.Defined.(** We phrase the first ring isomorphism theroem in a slightly differnt way so that it is easier to use. This form specifically asks for a surjective map *)
H: Funext A, B: Ring f: A $-> B issurj_f: ReflectiveSubuniverse.IsConnMap (Tr (-1)) f I: Ideal A p: (I ↔ ideal_kernel f)%ideal
A / I ≅ B
H: Funext A, B: Ring f: A $-> B issurj_f: ReflectiveSubuniverse.IsConnMap (Tr (-1)) f I: Ideal A p: (I ↔ ideal_kernel f)%ideal
A / I ≅ B
H: Funext A, B: Ring f: A $-> B issurj_f: ReflectiveSubuniverse.IsConnMap (Tr (-1)) f I: Ideal A p: (I ↔ ideal_kernel f)%ideal
A / I ≅ ?Goal
H: Funext A, B: Ring f: A $-> B issurj_f: ReflectiveSubuniverse.IsConnMap (Tr (-1)) f I: Ideal A p: (I ↔ ideal_kernel f)%ideal
?Goal ≅ B
H: Funext A, B: Ring f: A $-> B issurj_f: ReflectiveSubuniverse.IsConnMap (Tr (-1)) f I: Ideal A p: (I ↔ ideal_kernel f)%ideal
A / ideal_kernel f ≅ B
H: Funext A, B: Ring f: A $-> B issurj_f: ReflectiveSubuniverse.IsConnMap (Tr (-1)) f I: Ideal A p: (I ↔ ideal_kernel f)%ideal
A / ideal_kernel f ≅ ?Goal
H: Funext A, B: Ring f: A $-> B issurj_f: ReflectiveSubuniverse.IsConnMap (Tr (-1)) f I: Ideal A p: (I ↔ ideal_kernel f)%ideal
?Goal ≅ B
H: Funext A, B: Ring f: A $-> B issurj_f: ReflectiveSubuniverse.IsConnMap (Tr (-1)) f I: Ideal A p: (I ↔ ideal_kernel f)%ideal