Documentation

Mathlib.Algebra.RingQuot

Quotients of semirings #

In this file, we directly define the quotient of a semiring by any relation, by building a bigger relation that represents the ideal generated by that relation.

We prove the universal properties of the quotient, and recommend avoiding relying on the actual definition, which is made irreducible for this purpose.

Since everything runs in parallel for quotients of R-algebras, we do that case at the same time.

@[implicit_reducible]
instance RingCon.instAlgebraQuotient {S : Type uS} [CommSemiring S] {A : Type uA} [Semiring A] [Algebra S A] (c : RingCon A) :
def RingCon.mkₐ (S : Type uS) [CommSemiring S] {A : Type uA} [Semiring A] [Algebra S A] (c : RingCon A) :

The algebra morphism from A to the quotient by a ring congruence.

Instances For
    @[simp]
    theorem RingCon.mkₐ_apply (S : Type uS) [CommSemiring S] {A : Type uA} [Semiring A] [Algebra S A] (c : RingCon A) (r : A) :
    (mkₐ S c) r = r
    theorem RingCon.mkₐ_surjective {S : Type uS} [CommSemiring S] {A : Type uA} [Semiring A] [Algebra S A] (c : RingCon A) :
    Function.Surjective (mkₐ S c)
    @[simp]
    theorem RingCon.coe_algebraMap {S : Type uS} [CommSemiring S] {A : Type uA} [Semiring A] [Algebra S A] (c : RingCon A) (s : S) :
    ((algebraMap S A) s) = (algebraMap S c.Quotient) s
    inductive RingQuot.Rel {R : Type uR} [Semiring R] (r : RRProp) :
    RRProp

    Given an arbitrary relation r on a ring, we strengthen it to a relation Rel r, such that the equivalence relation generated by Rel r has x ~ y if and only if x - y is in the ideal generated by elements a - b such that r a b.

    • of {R : Type uR} [Semiring R] {r : RRProp} x y : R (h : r x y) : Rel r x y
    • add_left {R : Type uR} [Semiring R] {r : RRProp} a b c : R : Rel r a bRel r (a + c) (b + c)
    • mul_left {R : Type uR} [Semiring R] {r : RRProp} a b c : R : Rel r a bRel r (a * c) (b * c)
    • mul_right {R : Type uR} [Semiring R] {r : RRProp} a b c : R : Rel r b cRel r (a * b) (a * c)
    Instances For
      theorem RingQuot.Rel.add_right {R : Type uR} [Semiring R] {r : RRProp} a b c : R (h : Rel r b c) :
      Rel r (a + b) (a + c)
      theorem RingQuot.Rel.neg {R : Type uR} [Ring R] {r : RRProp} a b : R (h : Rel r a b) :
      Rel r (-a) (-b)
      theorem RingQuot.Rel.sub_left {R : Type uR} [Ring R] {r : RRProp} a b c : R (h : Rel r a b) :
      Rel r (a - c) (b - c)
      theorem RingQuot.Rel.sub_right {R : Type uR} [Ring R] {r : RRProp} a b c : R (h : Rel r b c) :
      Rel r (a - b) (a - c)
      theorem RingQuot.Rel.smul {S : Type uS} [CommSemiring S] {A : Type uA} [Semiring A] [Algebra S A] {r : AAProp} (k : S) a b : A (h : Rel r a b) :
      Rel r (k a) (k b)
      def RingQuot.ringCon {R : Type uR} [Semiring R] (r : RRProp) :

      EqvGen (RingQuot.Rel r) is a ring congruence.

      Instances For
        structure RingQuot {R : Type uR} [Semiring R] (r : RRProp) :
        Type uR

        The quotient of a ring by an arbitrary relation.

        • toQuot : Quot (Rel r)
        Instances For
          def RingQuot.natCast {R : Type uR} [Semiring R] (r : RRProp) (n : ) :

          The natCast function for RingQuot.

          Instances For
            @[implicit_reducible]
            instance RingQuot.instNatCast {R : Type uR} [Semiring R] (r : RRProp) :
            NatCast (RingQuot r)
            @[implicit_reducible]
            instance RingQuot.instZero {R : Type uR} [Semiring R] (r : RRProp) :
            Zero (RingQuot r)
            @[implicit_reducible]
            instance RingQuot.instOne {R : Type uR} [Semiring R] (r : RRProp) :
            One (RingQuot r)
            @[implicit_reducible]
            instance RingQuot.instAdd {R : Type uR} [Semiring R] (r : RRProp) :
            Add (RingQuot r)
            @[implicit_reducible]
            instance RingQuot.instMul {R : Type uR} [Semiring R] (r : RRProp) :
            Mul (RingQuot r)
            @[implicit_reducible]
            instance RingQuot.instNatPow {R : Type uR} [Semiring R] (r : RRProp) :
            NatPow (RingQuot r)
            @[implicit_reducible]
            instance RingQuot.instNeg {R : Type uR} [Ring R] (r : RRProp) :
            Neg (RingQuot r)
            @[implicit_reducible]
            instance RingQuot.instSub {R : Type uR} [Ring R] (r : RRProp) :
            Sub (RingQuot r)
            def RingQuot.smul {R : Type uR} [Semiring R] {S : Type uS} [CommSemiring S] (r : RRProp) [Algebra S R] (n : S) :

            The function for RingQuot.

            Instances For
              @[implicit_reducible]
              instance RingQuot.instSMulOfAlgebra {R : Type uR} [Semiring R] {S : Type uS} [CommSemiring S] (r : RRProp) [Algebra S R] :
              SMul S (RingQuot r)
              theorem RingQuot.zero_quot {R : Type uR} [Semiring R] (r : RRProp) :
              { toQuot := Quot.mk (Rel r) 0 } = 0
              theorem RingQuot.one_quot {R : Type uR} [Semiring R] (r : RRProp) :
              { toQuot := Quot.mk (Rel r) 1 } = 1
              theorem RingQuot.add_quot {R : Type uR} [Semiring R] (r : RRProp) {a b : R} :
              { toQuot := Quot.mk (Rel r) a } + { toQuot := Quot.mk (Rel r) b } = { toQuot := Quot.mk (Rel r) (a + b) }
              theorem RingQuot.mul_quot {R : Type uR} [Semiring R] (r : RRProp) {a b : R} :
              { toQuot := Quot.mk (Rel r) a } * { toQuot := Quot.mk (Rel r) b } = { toQuot := Quot.mk (Rel r) (a * b) }
              theorem RingQuot.pow_quot {R : Type uR} [Semiring R] (r : RRProp) {a : R} {n : } :
              { toQuot := Quot.mk (Rel r) a } ^ n = { toQuot := Quot.mk (Rel r) (a ^ n) }
              theorem RingQuot.neg_quot {R : Type uR} [Ring R] (r : RRProp) {a : R} :
              -{ toQuot := Quot.mk (Rel r) a } = { toQuot := Quot.mk (Rel r) (-a) }
              theorem RingQuot.sub_quot {R : Type uR} [Ring R] (r : RRProp) {a b : R} :
              { toQuot := Quot.mk (Rel r) a } - { toQuot := Quot.mk (Rel r) b } = { toQuot := Quot.mk (Rel r) (a - b) }
              theorem RingQuot.smul_quot {R : Type uR} [Semiring R] {S : Type uS} [CommSemiring S] (r : RRProp) [Algebra S R] {n : S} {a : R} :
              n { toQuot := Quot.mk (Rel r) a } = { toQuot := Quot.mk (Rel r) (n a) }
              instance RingQuot.instIsScalarTower {R : Type uR} [Semiring R] {S : Type uS} [CommSemiring S] {T : Type uT} (r : RRProp) [CommSemiring T] [SMul S T] [Algebra S R] [Algebra T R] [IsScalarTower S T R] :
              instance RingQuot.instSMulCommClass {R : Type uR} [Semiring R] {S : Type uS} [CommSemiring S] {T : Type uT} (r : RRProp) [CommSemiring T] [Algebra S R] [Algebra T R] [SMulCommClass S T R] :
              @[implicit_reducible]
              instance RingQuot.instAddCommMonoid {R : Type uR} [Semiring R] (r : RRProp) :
              @[implicit_reducible]
              instance RingQuot.instMonoidWithZero {R : Type uR} [Semiring R] (r : RRProp) :
              @[implicit_reducible]
              instance RingQuot.instSemiring {R : Type uR} [Semiring R] (r : RRProp) :
              def RingQuot.intCast {R : Type uR} [Ring R] (r : RRProp) (z : ) :

              The intCast function for RingQuot.

              Instances For
                @[implicit_reducible]
                instance RingQuot.instRing {R : Type uR} [Ring R] (r : RRProp) :
                @[implicit_reducible]
                instance RingQuot.instCommSemiring {R : Type uR} [CommSemiring R] (r : RRProp) :
                @[implicit_reducible]
                instance RingQuot.instCommRing {R : Type uR} [CommRing R] (r : RRProp) :
                @[implicit_reducible]
                instance RingQuot.instInhabited {R : Type uR} [Semiring R] (r : RRProp) :
                Inhabited (RingQuot r)
                @[implicit_reducible]
                instance RingQuot.instAlgebra {R : Type uR} [Semiring R] {S : Type uS} [CommSemiring S] [Algebra S R] (r : RRProp) :
                theorem RingQuot.mkRingHom_def {R : Type u_1} [Semiring R] (r : RRProp) :
                mkRingHom r = { toFun := fun (x : R) => { toQuot := Quot.mk (Rel r) x }, map_one' := , map_mul' := , map_zero' := , map_add' := }
                @[irreducible]
                def RingQuot.mkRingHom {R : Type u_1} [Semiring R] (r : RRProp) :

                The quotient map from a ring to its quotient, as a homomorphism of rings.

                Instances For
                  theorem RingQuot.mkRingHom_rel {R : Type uR} [Semiring R] {r : RRProp} {x y : R} (w : r x y) :
                  (mkRingHom r) x = (mkRingHom r) y
                  theorem RingQuot.mkRingHom_surjective {R : Type uR} [Semiring R] (r : RRProp) :
                  Function.Surjective (mkRingHom r)
                  theorem RingQuot.ringQuot_ext {R : Type uR} [Semiring R] {T : Type uT} [NonAssocSemiring T] {r : RRProp} (f g : RingQuot r →+* T) (w : f.comp (mkRingHom r) = g.comp (mkRingHom r)) :
                  f = g
                  theorem RingQuot.ringQuot_ext_iff {R : Type uR} [Semiring R] {T : Type uT} [NonAssocSemiring T] {r : RRProp} {f g : RingQuot r →+* T} :
                  f = g f.comp (mkRingHom r) = g.comp (mkRingHom r)
                  @[irreducible]
                  def RingQuot.preLift {R : Type u_1} [Semiring R] {T : Type u_2} [Semiring T] {r : RRProp} {f : R →+* T} (h : ∀ ⦃x y : R⦄, r x yf x = f y) :
                  Instances For
                    theorem RingQuot.preLift_def {R : Type u_1} [Semiring R] {T : Type u_2} [Semiring T] {r : RRProp} {f : R →+* T} (h : ∀ ⦃x y : R⦄, r x yf x = f y) :
                    preLift h = { toFun := fun (x : RingQuot r) => Quot.lift f x.toQuot, map_one' := , map_mul' := , map_zero' := , map_add' := }
                    @[irreducible]
                    def RingQuot.lift {R : Type u_1} [Semiring R] {T : Type u_2} [Semiring T] {r : RRProp} :
                    { f : R →+* T // ∀ ⦃x y : R⦄, r x yf x = f y } (RingQuot r →+* T)

                    Any ring homomorphism f : R →+* T which respects a relation r : R → R → Prop factors uniquely through a morphism RingQuot r →+* T.

                    Instances For
                      theorem RingQuot.lift_def {R : Type u_1} [Semiring R] {T : Type u_2} [Semiring T] {r : RRProp} :
                      lift = { toFun := fun (f : { f : R →+* T // ∀ ⦃x y : R⦄, r x yf x = f y }) => preLift , invFun := fun (F : RingQuot r →+* T) => F.comp (mkRingHom r), , left_inv := , right_inv := }
                      @[simp]
                      theorem RingQuot.lift_mkRingHom_apply {R : Type uR} [Semiring R] {T : Type uT} [Semiring T] (f : R →+* T) {r : RRProp} (w : ∀ ⦃x y : R⦄, r x yf x = f y) (x : R) :
                      (lift f, w) ((mkRingHom r) x) = f x
                      theorem RingQuot.lift_unique {R : Type uR} [Semiring R] {T : Type uT} [Semiring T] (f : R →+* T) {r : RRProp} (w : ∀ ⦃x y : R⦄, r x yf x = f y) (g : RingQuot r →+* T) (h : g.comp (mkRingHom r) = f) :
                      g = lift f, w
                      theorem RingQuot.eq_lift_comp_mkRingHom {R : Type uR} [Semiring R] {T : Type uT} [Semiring T] {r : RRProp} (f : RingQuot r →+* T) :
                      f = lift f.comp (mkRingHom r),

                      We now verify that in the case of a commutative ring, the RingQuot construction agrees with the quotient by the appropriate ideal.

                      The universal ring homomorphism from RingQuot r to B ⧸ Ideal.ofRel r.

                      Instances For

                        The universal ring homomorphism from B ⧸ Ideal.ofRel r to RingQuot r.

                        Instances For

                          The ring equivalence between RingQuot r and (Ideal.ofRel r).quotient

                          Instances For
                            @[irreducible]
                            def RingQuot.mkAlgHom (S : Type u_1) [CommSemiring S] {A : Type u_2} [Semiring A] [Algebra S A] (s : AAProp) :

                            The quotient map from an S-algebra to its quotient, as a homomorphism of S-algebras.

                            Instances For
                              theorem RingQuot.mkAlgHom_def (S : Type u_1) [CommSemiring S] {A : Type u_2} [Semiring A] [Algebra S A] (s : AAProp) :
                              mkAlgHom S s = let __src := mkRingHom s; { toRingHom := __src, commutes' := }
                              @[simp]
                              theorem RingQuot.mkAlgHom_coe (S : Type uS) [CommSemiring S] {A : Type uA} [Semiring A] [Algebra S A] (s : AAProp) :
                              (mkAlgHom S s) = mkRingHom s
                              theorem RingQuot.mkAlgHom_rel (S : Type uS) [CommSemiring S] {A : Type uA} [Semiring A] [Algebra S A] {s : AAProp} {x y : A} (w : s x y) :
                              (mkAlgHom S s) x = (mkAlgHom S s) y
                              theorem RingQuot.mkAlgHom_surjective (S : Type uS) [CommSemiring S] {A : Type uA} [Semiring A] [Algebra S A] (s : AAProp) :
                              Function.Surjective (mkAlgHom S s)
                              theorem RingQuot.ringQuot_ext' (S : Type uS) [CommSemiring S] {A : Type uA} [Semiring A] [Algebra S A] {B : Type u₄} [Semiring B] [Algebra S B] {s : AAProp} (f g : RingQuot s →ₐ[S] B) (w : f.comp (mkAlgHom S s) = g.comp (mkAlgHom S s)) :
                              f = g
                              theorem RingQuot.ringQuot_ext'_iff {S : Type uS} [CommSemiring S] {A : Type uA} [Semiring A] [Algebra S A] {B : Type u₄} [Semiring B] [Algebra S B] {s : AAProp} {f g : RingQuot s →ₐ[S] B} :
                              f = g f.comp (mkAlgHom S s) = g.comp (mkAlgHom S s)
                              @[irreducible]
                              def RingQuot.preLiftAlgHom (S : Type u_1) [CommSemiring S] {A : Type u_2} [Semiring A] [Algebra S A] {B : Type u_3} [Semiring B] [Algebra S B] {s : AAProp} {f : A →ₐ[S] B} (h : ∀ ⦃x y : A⦄, s x yf x = f y) :
                              Instances For
                                theorem RingQuot.preLiftAlgHom_def (S : Type u_1) [CommSemiring S] {A : Type u_2} [Semiring A] [Algebra S A] {B : Type u_3} [Semiring B] [Algebra S B] {s : AAProp} {f : A →ₐ[S] B} (h : ∀ ⦃x y : A⦄, s x yf x = f y) :
                                preLiftAlgHom S h = { toFun := fun (x : RingQuot s) => Quot.lift f x.toQuot, map_one' := , map_mul' := , map_zero' := , map_add' := , commutes' := }
                                theorem RingQuot.liftAlgHom_def (S : Type u_1) [CommSemiring S] {A : Type u_2} [Semiring A] [Algebra S A] {B : Type u_3} [Semiring B] [Algebra S B] {s : AAProp} :
                                liftAlgHom S = { toFun := fun (f' : { f : A →ₐ[S] B // ∀ ⦃x y : A⦄, s x yf x = f y }) => preLiftAlgHom S , invFun := fun (F : RingQuot s →ₐ[S] B) => F.comp (mkAlgHom S s), , left_inv := , right_inv := }
                                @[irreducible]
                                def RingQuot.liftAlgHom (S : Type u_1) [CommSemiring S] {A : Type u_2} [Semiring A] [Algebra S A] {B : Type u_3} [Semiring B] [Algebra S B] {s : AAProp} :
                                { f : A →ₐ[S] B // ∀ ⦃x y : A⦄, s x yf x = f y } (RingQuot s →ₐ[S] B)

                                Any S-algebra homomorphism f : A →ₐ[S] B which respects a relation s : A → A → Prop factors uniquely through a morphism RingQuot s →ₐ[S] B.

                                Instances For
                                  @[simp]
                                  theorem RingQuot.liftAlgHom_mkAlgHom_apply (S : Type uS) [CommSemiring S] {A : Type uA} [Semiring A] [Algebra S A] {B : Type u₄} [Semiring B] [Algebra S B] (f : A →ₐ[S] B) {s : AAProp} (w : ∀ ⦃x y : A⦄, s x yf x = f y) (x : A) :
                                  ((liftAlgHom S) f, w) ((mkAlgHom S s) x) = f x
                                  theorem RingQuot.liftAlgHom_unique (S : Type uS) [CommSemiring S] {A : Type uA} [Semiring A] [Algebra S A] {B : Type u₄} [Semiring B] [Algebra S B] (f : A →ₐ[S] B) {s : AAProp} (w : ∀ ⦃x y : A⦄, s x yf x = f y) (g : RingQuot s →ₐ[S] B) (h : g.comp (mkAlgHom S s) = f) :
                                  g = (liftAlgHom S) f, w
                                  theorem RingQuot.eq_liftAlgHom_comp_mkAlgHom (S : Type uS) [CommSemiring S] {A : Type uA} [Semiring A] [Algebra S A] {B : Type u₄} [Semiring B] [Algebra S B] {s : AAProp} (f : RingQuot s →ₐ[S] B) :
                                  f = (liftAlgHom S) f.comp (mkAlgHom S s),