Documentation

Mathlib.CategoryTheory.Quotient

Quotient category #

Constructs the quotient of a category by an arbitrary family of relations on its hom-sets, by introducing a type synonym for the objects, and identifying homs as necessary.

This is analogous to 'the quotient of a group by the normal closure of a subset', rather than 'the quotient of a group by a normal subgroup'. When taking the quotient by a congruence relation, functor_map_eq_iff says that no unnecessary identifications have been made.

def HomRel (C : Type u_1) [Quiver C] :
Type (max u_1 u_2)

A HomRel on C consists of a relation on every hom-set.

Instances For
    @[implicit_reducible]
    instance instInhabitedHomRel (C : Type u_1) [Quiver C] :
    Inhabited (HomRel C)

    A functor induces a HomRel on its domain, relating those maps that have the same image.

    Instances For
      @[simp]
      theorem CategoryTheory.Functor.homRel_iff {C : Type u_1} {D : Type u_2} [Category.{v_1, u_1} C] [Category.{v_2, u_2} D] (F : Functor C D) {X Y : C} (f g : X ⟢ Y) :
      F.homRel f g ↔ F.map f = F.map g

      The condition that a HomRel is stable under precomposition.

      Instances

        The condition that a HomRel is stable under postcomposition.

        Instances

          Generates the closure of a family of relations w.r.t. composition from left and right.

          Instances For
            theorem CategoryTheory.HomRel.CompClosure.of {C : Type u_1} [Category.{v_1, u_1} C] {r : HomRel C} {a b : C} {m₁ mβ‚‚ : a ⟢ b} (h : r m₁ mβ‚‚) :
            CompClosure r m₁ mβ‚‚

            A HomRel is a congruence when it's an equivalence on every hom-set, and it can be composed from left and right.

            Instances
              @[deprecated CategoryTheory.HomRel.IsStableUnderPrecomp.comp_left (since := "2025-12-23")]
              theorem CategoryTheory.Congruence.compLeft {C : Type u_1} {inst✝ : Category.{v_1, u_1} C} {r : HomRel C} [self : HomRel.IsStableUnderPrecomp r] {X Y Z : C} (f : X ⟢ Y) {g g' : Y ⟢ Z} :
              r g g' β†’ r (CategoryStruct.comp f g) (CategoryStruct.comp f g')

              Alias of CategoryTheory.HomRel.IsStableUnderPrecomp.comp_left.

              @[deprecated CategoryTheory.HomRel.IsStableUnderPostcomp.comp_right (since := "2025-12-23")]
              theorem CategoryTheory.Congruence.compRight {C : Type u_1} {inst✝ : Category.{v_1, u_1} C} {r : HomRel C} [self : HomRel.IsStableUnderPostcomp r] {X Y Z : C} {f f' : X ⟢ Y} (g : Y ⟢ Z) :
              r f f' β†’ r (CategoryStruct.comp f g) (CategoryStruct.comp f' g)

              Alias of CategoryTheory.HomRel.IsStableUnderPostcomp.comp_right.

              For F : C β₯€ D, F.homRel is a congruence.

              structure CategoryTheory.Quotient {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) :
              Type u_1

              A type synonym for C, thought of as the objects of the quotient category.

              • as : C

                The object of C.

              Instances For
                theorem CategoryTheory.Quotient.ext {C : Type u_1} {inst✝ : Category.{v_1, u_1} C} {r : HomRel C} {x y : Quotient r} (as : x.as = y.as) :
                x = y
                theorem CategoryTheory.Quotient.ext_iff {C : Type u_1} {inst✝ : Category.{v_1, u_1} C} {r : HomRel C} {x y : Quotient r} :
                x = y ↔ x.as = y.as
                @[implicit_reducible]
                instance CategoryTheory.instInhabitedQuotient {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) [Inhabited C] :
                Inhabited (Quotient r)
                @[deprecated CategoryTheory.HomRel.CompClosure (since := "2025-12-23")]

                Alias of CategoryTheory.HomRel.CompClosure.


                Generates the closure of a family of relations w.r.t. composition from left and right.

                Instances For
                  @[deprecated CategoryTheory.HomRel.CompClosure.of (since := "2025-12-23")]
                  theorem CategoryTheory.Quotient.CompClosure.of {C : Type u_1} [Category.{v_1, u_1} C] {r : HomRel C} {a b : C} {m₁ mβ‚‚ : a ⟢ b} (h : r m₁ mβ‚‚) :
                  HomRel.CompClosure r m₁ mβ‚‚

                  Alias of CategoryTheory.HomRel.CompClosure.of.

                  @[deprecated CategoryTheory.HomRel.IsStableUnderPrecomp.comp_left (since := "2025-12-23")]
                  theorem CategoryTheory.Quotient.comp_left {C : Type u_1} {inst✝ : Category.{v_1, u_1} C} {r : HomRel C} [self : HomRel.IsStableUnderPrecomp r] {X Y Z : C} (f : X ⟢ Y) {g g' : Y ⟢ Z} :
                  r g g' β†’ r (CategoryStruct.comp f g) (CategoryStruct.comp f g')

                  Alias of CategoryTheory.HomRel.IsStableUnderPrecomp.comp_left.

                  @[deprecated CategoryTheory.HomRel.IsStableUnderPostcomp.comp_right (since := "2025-12-23")]
                  theorem CategoryTheory.Quotient.comp_right {C : Type u_1} {inst✝ : Category.{v_1, u_1} C} {r : HomRel C} [self : HomRel.IsStableUnderPostcomp r] {X Y Z : C} {f f' : X ⟢ Y} (g : Y ⟢ Z) :
                  r f f' β†’ r (CategoryStruct.comp f g) (CategoryStruct.comp f' g)

                  Alias of CategoryTheory.HomRel.IsStableUnderPostcomp.comp_right.

                  @[deprecated CategoryTheory.HomRel.compClosure_iff_self (since := "2025-12-23")]

                  Alias of CategoryTheory.HomRel.compClosure_iff_self.

                  @[deprecated CategoryTheory.HomRel.compClosure_eq_self (since := "2025-12-23")]

                  Alias of CategoryTheory.HomRel.compClosure_eq_self.

                  def CategoryTheory.Quotient.Hom {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) (s t : Quotient r) :
                  Type v_1

                  Hom-sets of the quotient category.

                  Instances For
                    @[implicit_reducible]
                    instance CategoryTheory.Quotient.instInhabitedHom {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) (a : Quotient r) :
                    Inhabited (Hom r a a)
                    def CategoryTheory.Quotient.comp {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) ⦃a b c : Quotient r⦄ :
                    Hom r a b β†’ Hom r b c β†’ Hom r a c

                    Composition in the quotient category.

                    Instances For
                      @[simp]
                      theorem CategoryTheory.Quotient.comp_mk {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {a b c : Quotient r} (f : a.as ⟢ b.as) (g : b.as ⟢ c.as) :
                      comp r (Quot.mk (HomRel.CompClosure r) f) (Quot.mk (HomRel.CompClosure r) g) = Quot.mk (HomRel.CompClosure r) (CategoryStruct.comp f g)

                      An equivalence between the type synonym for a quotient category and the type alias for the original category.

                      Instances For
                        def CategoryTheory.Quotient.inv {G : Type u_2} [Groupoid G] (r : HomRel G) {X Y : Quotient r} (f : X ⟢ Y) :
                        Y ⟢ X

                        Inverse of a map in the quotient category of a groupoid.

                        Instances For
                          @[simp]
                          theorem CategoryTheory.Quotient.inv_mk {G : Type u_2} [Groupoid G] (r : HomRel G) {X Y : Quotient r} (f : X.as ⟢ Y.as) :
                          @[implicit_reducible]

                          The quotient of a groupoid is a groupoid.

                          The functor from a category to its quotient.

                          Instances For
                            instance CategoryTheory.Quotient.instSubsingletonHom {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) [βˆ€ (x y : C), Subsingleton (x ⟢ y)] (x y : Quotient r) :
                            Subsingleton (x ⟢ y)
                            theorem CategoryTheory.Quotient.induction {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {P : {a b : Quotient r} β†’ (a ⟢ b) β†’ Prop} (h : βˆ€ {x y : C} (f : x ⟢ y), P ((functor r).map f)) {a b : Quotient r} (f : a ⟢ b) :
                            P f
                            theorem CategoryTheory.Quotient.sound {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {a b : C} {f₁ fβ‚‚ : a ⟢ b} (h : r f₁ fβ‚‚) :
                            (functor r).map f₁ = (functor r).map fβ‚‚
                            theorem CategoryTheory.Quotient.functor_map_eq_iff {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) [h : Congruence r] {X Y : C} (f f' : X ⟢ Y) :
                            (functor r).map f = (functor r).map f' ↔ r f f'
                            def CategoryTheory.Quotient.lift {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {D : Type u_2} [Category.{v_2, u_2} D] (F : Functor C D) (H : βˆ€ (x y : C) (f₁ fβ‚‚ : x ⟢ y), r f₁ fβ‚‚ β†’ F.map f₁ = F.map fβ‚‚) :

                            The induced functor on the quotient category.

                            Instances For
                              theorem CategoryTheory.Quotient.lift_spec {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {D : Type u_2} [Category.{v_2, u_2} D] (F : Functor C D) (H : βˆ€ (x y : C) (f₁ fβ‚‚ : x ⟢ y), r f₁ fβ‚‚ β†’ F.map f₁ = F.map fβ‚‚) :
                              (functor r).comp (lift r F H) = F
                              theorem CategoryTheory.Quotient.lift_unique {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {D : Type u_2} [Category.{v_2, u_2} D] (F : Functor C D) (H : βˆ€ (x y : C) (f₁ fβ‚‚ : x ⟢ y), r f₁ fβ‚‚ β†’ F.map f₁ = F.map fβ‚‚) (Ξ¦ : Functor (Quotient r) D) (hΞ¦ : (functor r).comp Ξ¦ = F) :
                              Ξ¦ = lift r F H
                              theorem CategoryTheory.Quotient.lift_unique' {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {D : Type u_2} [Category.{v_2, u_2} D] (F₁ Fβ‚‚ : Functor (Quotient r) D) (h : (functor r).comp F₁ = (functor r).comp Fβ‚‚) :
                              F₁ = Fβ‚‚
                              def CategoryTheory.Quotient.lift.isLift {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {D : Type u_2} [Category.{v_2, u_2} D] (F : Functor C D) (H : βˆ€ (x y : C) (f₁ fβ‚‚ : x ⟢ y), r f₁ fβ‚‚ β†’ F.map f₁ = F.map fβ‚‚) :
                              (functor r).comp (lift r F H) β‰… F

                              The original functor factors through the induced functor.

                              Instances For
                                @[simp]
                                theorem CategoryTheory.Quotient.lift.isLift_hom {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {D : Type u_2} [Category.{v_2, u_2} D] (F : Functor C D) (H : βˆ€ (x y : C) (f₁ fβ‚‚ : x ⟢ y), r f₁ fβ‚‚ β†’ F.map f₁ = F.map fβ‚‚) (X : C) :
                                (isLift r F H).hom.app X = CategoryStruct.id (F.obj X)
                                @[simp]
                                theorem CategoryTheory.Quotient.lift.isLift_inv {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {D : Type u_2} [Category.{v_2, u_2} D] (F : Functor C D) (H : βˆ€ (x y : C) (f₁ fβ‚‚ : x ⟢ y), r f₁ fβ‚‚ β†’ F.map f₁ = F.map fβ‚‚) (X : C) :
                                (isLift r F H).inv.app X = CategoryStruct.id (F.obj X)
                                theorem CategoryTheory.Quotient.lift_obj_functor_obj {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {D : Type u_2} [Category.{v_2, u_2} D] (F : Functor C D) (H : βˆ€ (x y : C) (f₁ fβ‚‚ : x ⟢ y), r f₁ fβ‚‚ β†’ F.map f₁ = F.map fβ‚‚) (X : C) :
                                (lift r F H).obj ((functor r).obj X) = F.obj X
                                theorem CategoryTheory.Quotient.lift_map_functor_map {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {D : Type u_2} [Category.{v_2, u_2} D] (F : Functor C D) (H : βˆ€ (x y : C) (f₁ fβ‚‚ : x ⟢ y), r f₁ fβ‚‚ β†’ F.map f₁ = F.map fβ‚‚) {X Y : C} (f : X ⟢ Y) :
                                (lift r F H).map ((functor r).map f) = F.map f
                                theorem CategoryTheory.Quotient.natTrans_ext {C : Type u_1} [Category.{v_1, u_1} C] {r : HomRel C} {D : Type u_2} [Category.{v_2, u_2} D] {F G : Functor (Quotient r) D} (τ₁ Ο„β‚‚ : F ⟢ G) (h : (functor r).whiskerLeft τ₁ = (functor r).whiskerLeft Ο„β‚‚) :
                                τ₁ = Ο„β‚‚
                                def CategoryTheory.Quotient.natTransLift {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {D : Type u_2} [Category.{v_2, u_2} D] {F G : Functor (Quotient r) D} (Ο„ : (functor r).comp F ⟢ (functor r).comp G) :
                                F ⟢ G

                                In order to define a natural transformation F ⟢ G with F G : Quotient r β₯€ D, it suffices to do so after precomposing with Quotient.functor r.

                                Instances For
                                  @[simp]
                                  theorem CategoryTheory.Quotient.natTransLift_app {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {D : Type u_2} [Category.{v_2, u_2} D] (F G : Functor (Quotient r) D) (Ο„ : (functor r).comp F ⟢ (functor r).comp G) (X : C) :
                                  (natTransLift r Ο„).app ((functor r).obj X) = Ο„.app X
                                  def CategoryTheory.Quotient.natIsoLift {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {D : Type u_2} [Category.{v_2, u_2} D] {F G : Functor (Quotient r) D} (Ο„ : (functor r).comp F β‰… (functor r).comp G) :
                                  F β‰… G

                                  In order to define a natural isomorphism F β‰… G with F G : Quotient r β₯€ D, it suffices to do so after precomposing with Quotient.functor r.

                                  Instances For
                                    @[simp]
                                    theorem CategoryTheory.Quotient.natIsoLift_hom {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {D : Type u_2} [Category.{v_2, u_2} D] {F G : Functor (Quotient r) D} (Ο„ : (functor r).comp F β‰… (functor r).comp G) :
                                    (natIsoLift r Ο„).hom = natTransLift r Ο„.hom
                                    @[simp]
                                    theorem CategoryTheory.Quotient.natIsoLift_inv {C : Type u_1} [Category.{v_1, u_1} C] (r : HomRel C) {D : Type u_2} [Category.{v_2, u_2} D] {F G : Functor (Quotient r) D} (Ο„ : (functor r).comp F β‰… (functor r).comp G) :
                                    (natIsoLift r Ο„).inv = natTransLift r Ο„.inv