Documentation

Mathlib.CategoryTheory.Generator.Basic

Separating and detecting sets #

There are several non-equivalent notions of a generator of a category. Here, we consider two of them:

There are, of course, also the dual notions of coseparating and codetecting sets.

Main results #

We

Examples #

See the files CategoryTheory.Generator.Presheaf and CategoryTheory.Generator.Sheaf.

We say that P : ObjectProperty C is separating if the functors C(G, -) for G : C such that P G are collectively faithful, i.e., if h ≫ f = h ≫ g for all h with domain in 𝒢 implies f = g.

Equations
Instances For

    We say that P : ObjectProperty C is coseparating if the functors C(-, G) for G : C such that P G are collectively faithful, i.e., if f ≫ h = g ≫ h for all h with codomain in 𝒢 implies f = g.

    Equations
    Instances For

      We say that P : ObjectProperty C is detecting if the functors C(G, -) for G : C such that P G collectively reflect isomorphisms, i.e., if any h with domain G that P G uniquely factors through f, then f is an isomorphism.

      Equations
      Instances For

        We say that P : ObjectProperty C is codetecting if the functors C(-, G) for G : C such that P G collectively reflect isomorphisms, i.e., if any h with codomain G such that P G uniquely factors through f, then f is an isomorphism.

        Equations
        Instances For
          theorem CategoryTheory.ObjectProperty.IsSeparating.mk_of_exists_epi {C : Type u₁} [Category.{v₁, u₁} C] {P : ObjectProperty C} (hP : ∀ (X : C), ∃ (ι : Type w) (s : ιC) (_ : ∀ (i : ι), P (s i)) (c : Limits.Cofan s) (x : Limits.IsColimit c) (p : c.pt X), Epi p) :
          theorem CategoryTheory.ObjectProperty.IsCoseparating.mk_of_exists_mono {C : Type u₁} [Category.{v₁, u₁} C] {P : ObjectProperty C} (hP : ∀ (X : C), ∃ (ι : Type w) (s : ιC) (_ : ∀ (i : ι), P (s i)) (c : Limits.Fan s) (x : Limits.IsLimit c) (j : X c.pt), Mono j) :
          @[reducible, inline]

          Given P : ObjectProperty C and X : C, this is the map which sends i : CostructuredArrow P.ι X to i.left.obj : C. The coproduct of this family is the source of the morphism P.coproductFrom X.

          Equations
          Instances For
            @[reducible, inline]

            Given P : ObjectProperty C and X : C, this is the coproduct of all the morphisms Y ⟶ X such that P Y holds.

            Equations
            Instances For
              @[reducible, inline]
              noncomputable abbrev CategoryTheory.ObjectProperty.ιCoproductFrom {C : Type u₁} [Category.{v₁, u₁} C] (P : ObjectProperty C) {X : C} [Limits.HasCoproduct (P.coproductFromFamily X)] {Y : C} (f : Y X) (hY : P Y) :

              The inclusion morphisms to ∐ (P.coproductFromFamily X).

              Equations
              Instances For
                @[reducible, inline]

                Given P : ObjectProperty C and X : C, this is the map which sends i : StructuredArrow P.ι X to i.right.obj : C. The product of this family is the target of the morphism P.productTo X.

                Equations
                Instances For
                  @[reducible, inline]

                  Given P : ObjectProperty C and X : C, this is the product of all the morphisms X ⟶ Y such that P Y holds.

                  Equations
                  Instances For
                    @[reducible, inline]
                    noncomputable abbrev CategoryTheory.ObjectProperty.πProductTo {C : Type u₁} [Category.{v₁, u₁} C] (P : ObjectProperty C) {X : C} [Limits.HasProduct (P.productToFamily X)] {Y : C} (f : X Y) (hY : P Y) :

                    The projection morphisms from ∏ᶜ (P.productToFamily X).

                    Equations
                    Instances For

                      An ingredient of the proof of the Special Adjoint Functor Theorem: a complete well-powered category with a small coseparating set has an initial object.

                      In fact, it follows from the Special Adjoint Functor Theorem that C is already cocomplete, see hasColimits_of_hasLimits_of_isCoseparating.

                      An ingredient of the proof of the Special Adjoint Functor Theorem: a cocomplete well-copowered category with a small separating set has a terminal object.

                      In fact, it follows from the Special Adjoint Functor Theorem that C is already complete, see hasLimits_of_hasColimits_of_isSeparating.

                      theorem CategoryTheory.Subobject.eq_of_le_of_isDetecting {C : Type u₁} [Category.{v₁, u₁} C] {𝒢 : ObjectProperty C} (h𝒢 : 𝒢.IsDetecting) {X : C} (P Q : Subobject X) (h₁ : P Q) (h₂ : ∀ (G : C), 𝒢 G∀ {f : G X}, Q.Factors fP.Factors f) :
                      P = Q
                      theorem CategoryTheory.Subobject.inf_eq_of_isDetecting {C : Type u₁} [Category.{v₁, u₁} C] [Limits.HasPullbacks C] {𝒢 : ObjectProperty C} (h𝒢 : 𝒢.IsDetecting) {X : C} (P Q : Subobject X) (h : ∀ (G : C), 𝒢 G∀ {f : G X}, P.Factors fQ.Factors f) :
                      PQ = P
                      theorem CategoryTheory.Subobject.eq_of_isDetecting {C : Type u₁} [Category.{v₁, u₁} C] [Limits.HasPullbacks C] {𝒢 : ObjectProperty C} (h𝒢 : 𝒢.IsDetecting) {X : C} (P Q : Subobject X) (h : ∀ (G : C), 𝒢 G∀ {f : G X}, P.Factors f Q.Factors f) :
                      P = Q

                      A category with pullbacks and a small detecting set is well-powered.

                      We say that G is a separator if the functor C(G, -) is faithful.

                      Equations
                      Instances For

                        We say that G is a coseparator if the functor C(-, G) is faithful.

                        Equations
                        Instances For

                          We say that G is a detector if the functor C(G, -) reflects isomorphisms.

                          Equations
                          Instances For

                            We say that G is a codetector if the functor C(-, G) reflects isomorphisms.

                            Equations
                            Instances For
                              theorem CategoryTheory.isSeparator_def {C : Type u₁} [Category.{v₁, u₁} C] (G : C) :
                              IsSeparator G ∀ ⦃X Y : C⦄ (f g : X Y), (∀ (h : G X), CategoryStruct.comp h f = CategoryStruct.comp h g)f = g
                              theorem CategoryTheory.IsSeparator.def {C : Type u₁} [Category.{v₁, u₁} C] {G : C} :
                              IsSeparator G∀ ⦃X Y : C⦄ (f g : X Y), (∀ (h : G X), CategoryStruct.comp h f = CategoryStruct.comp h g)f = g
                              theorem CategoryTheory.isCoseparator_def {C : Type u₁} [Category.{v₁, u₁} C] (G : C) :
                              IsCoseparator G ∀ ⦃X Y : C⦄ (f g : X Y), (∀ (h : Y G), CategoryStruct.comp f h = CategoryStruct.comp g h)f = g
                              theorem CategoryTheory.IsCoseparator.def {C : Type u₁} [Category.{v₁, u₁} C] {G : C} :
                              IsCoseparator G∀ ⦃X Y : C⦄ (f g : X Y), (∀ (h : Y G), CategoryStruct.comp f h = CategoryStruct.comp g h)f = g
                              theorem CategoryTheory.isDetector_def {C : Type u₁} [Category.{v₁, u₁} C] (G : C) :
                              IsDetector G ∀ ⦃X Y : C⦄ (f : X Y), (∀ (h : G Y), ∃! h' : G X, CategoryStruct.comp h' f = h)IsIso f
                              theorem CategoryTheory.IsDetector.def {C : Type u₁} [Category.{v₁, u₁} C] {G : C} :
                              IsDetector G∀ ⦃X Y : C⦄ (f : X Y), (∀ (h : G Y), ∃! h' : G X, CategoryStruct.comp h' f = h)IsIso f
                              theorem CategoryTheory.isCodetector_def {C : Type u₁} [Category.{v₁, u₁} C] (G : C) :
                              IsCodetector G ∀ ⦃X Y : C⦄ (f : X Y), (∀ (h : X G), ∃! h' : Y G, CategoryStruct.comp f h' = h)IsIso f
                              theorem CategoryTheory.IsCodetector.def {C : Type u₁} [Category.{v₁, u₁} C] {G : C} :
                              IsCodetector G∀ ⦃X Y : C⦄ (f : X Y), (∀ (h : X G), ∃! h' : Y G, CategoryStruct.comp f h' = h)IsIso f
                              theorem CategoryTheory.isSeparator_iff_epi {C : Type u₁} [Category.{v₁, u₁} C] (G : C) [∀ (A : C), Limits.HasCoproduct fun (x : G A) => G] :
                              IsSeparator G ∀ (A : C), Epi (Limits.Sigma.desc fun (f : G A) => f)
                              theorem CategoryTheory.isCoseparator_iff_mono {C : Type u₁} [Category.{v₁, u₁} C] (G : C) [∀ (A : C), Limits.HasProduct fun (x : A G) => G] :
                              IsCoseparator G ∀ (A : C), Mono (Limits.Pi.lift fun (f : A G) => f)

                              For a category C and an object G : C, G is a separator of C if the functor C(G, -) is faithful.

                              While IsSeparator G : Prop is the proposition that G is a separator of C, an HasSeparator C : Prop is the proposition that such a separator exists. Note that HasSeparator C is a proposition. It does not designate a favored separator and merely asserts the existence of one.

                              Instances

                                For a category C and an object G : C, G is a coseparator of C if the functor C(-, G) is faithful.

                                While IsCoseparator G : Prop is the proposition that G is a coseparator of C, an HasCoseparator C : Prop is the proposition that such a coseparator exists. Note that HasCoseparator C is a proposition. It does not designate a favored coseparator and merely asserts the existence of one.

                                Instances

                                  For a category C and an object G : C, G is a detector of C if the functor C(G, -) reflects isomorphisms.

                                  While IsDetector G : Prop is the proposition that G is a detector of C, an HasDetector C : Prop is the proposition that such a detector exists. Note that HasDetector C is a proposition. It does not designate a favored detector and merely asserts the existence of one.

                                  Instances

                                    For a category C and an object G : C, G is a codetector of C if the functor C(-, G) reflects isomorphisms.

                                    While IsCodetector G : Prop is the proposition that G is a codetector of C, an HasCodetector C : Prop is the proposition that such a codetector exists. Note that HasCodetector C is a proposition. It does not designate a favored codetector and merely asserts the existence of one.

                                    Instances
                                      noncomputable def CategoryTheory.separator (C : Type u₁) [Category.{v₁, u₁} C] [HasSeparator C] :
                                      C

                                      Given a category C that has a separator (HasSeparator C), separator C is an arbitrarily chosen separator of C.

                                      Equations
                                      Instances For

                                        Given a category C that has a coseparator (HasCoseparator C), coseparator C is an arbitrarily chosen coseparator of C.

                                        Equations
                                        Instances For
                                          noncomputable def CategoryTheory.detector (C : Type u₁) [Category.{v₁, u₁} C] [HasDetector C] :
                                          C

                                          Given a category C that has a detector (HasDetector C), detector C is an arbitrarily chosen detector of C.

                                          Equations
                                          Instances For
                                            noncomputable def CategoryTheory.codetector (C : Type u₁) [Category.{v₁, u₁} C] [HasCodetector C] :
                                            C

                                            Given a category C that has a codetector (HasCodetector C), codetector C is an arbitrarily chosen codetector of C.

                                            Equations
                                            Instances For
                                              @[deprecated CategoryTheory.ObjectProperty.IsSeparating (since := "2025-10-06")]

                                              Alias of CategoryTheory.ObjectProperty.IsSeparating.


                                              We say that P : ObjectProperty C is separating if the functors C(G, -) for G : C such that P G are collectively faithful, i.e., if h ≫ f = h ≫ g for all h with domain in 𝒢 implies f = g.

                                              Equations
                                              Instances For
                                                @[deprecated CategoryTheory.ObjectProperty.IsCoseparating (since := "2025-10-06")]

                                                Alias of CategoryTheory.ObjectProperty.IsCoseparating.


                                                We say that P : ObjectProperty C is coseparating if the functors C(-, G) for G : C such that P G are collectively faithful, i.e., if f ≫ h = g ≫ h for all h with codomain in 𝒢 implies f = g.

                                                Equations
                                                Instances For
                                                  @[deprecated CategoryTheory.ObjectProperty.IsDetecting (since := "2025-10-06")]

                                                  Alias of CategoryTheory.ObjectProperty.IsDetecting.


                                                  We say that P : ObjectProperty C is detecting if the functors C(G, -) for G : C such that P G collectively reflect isomorphisms, i.e., if any h with domain G that P G uniquely factors through f, then f is an isomorphism.

                                                  Equations
                                                  Instances For
                                                    @[deprecated CategoryTheory.ObjectProperty.IsCodetecting (since := "2025-10-06")]

                                                    Alias of CategoryTheory.ObjectProperty.IsCodetecting.


                                                    We say that P : ObjectProperty C is codetecting if the functors C(-, G) for G : C such that P G collectively reflect isomorphisms, i.e., if any h with codomain G such that P G uniquely factors through f, then f is an isomorphism.

                                                    Equations
                                                    Instances For
                                                      @[deprecated CategoryTheory.ObjectProperty.IsSeparating.of_equivalence (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.IsSeparating.of_equivalence.

                                                      @[deprecated CategoryTheory.ObjectProperty.IsCoseparating.of_equivalence (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.IsCoseparating.of_equivalence.

                                                      @[deprecated CategoryTheory.ObjectProperty.isSeparating_op_iff (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isSeparating_op_iff.

                                                      @[deprecated CategoryTheory.ObjectProperty.isCoseparating_op_iff (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isCoseparating_op_iff.

                                                      @[deprecated CategoryTheory.ObjectProperty.isSeparating_op_iff (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isSeparating_op_iff.

                                                      @[deprecated CategoryTheory.ObjectProperty.isCoseparating_op_iff (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isCoseparating_op_iff.

                                                      @[deprecated CategoryTheory.ObjectProperty.isDetecting_op_iff (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isDetecting_op_iff.

                                                      @[deprecated CategoryTheory.ObjectProperty.isCodetecting_op_iff (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isCodetecting_op_iff.

                                                      @[deprecated CategoryTheory.ObjectProperty.isDetecting_op_iff (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isDetecting_op_iff.

                                                      @[deprecated CategoryTheory.ObjectProperty.isCodetecting_op_iff (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isCodetecting_op_iff.

                                                      @[deprecated CategoryTheory.ObjectProperty.IsDetecting.isSeparating (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.IsDetecting.isSeparating.

                                                      @[deprecated CategoryTheory.ObjectProperty.IsCodetecting.isCoseparating (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.IsCodetecting.isCoseparating.

                                                      @[deprecated CategoryTheory.ObjectProperty.IsSeparating.isDetecting (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.IsSeparating.isDetecting.

                                                      @[deprecated CategoryTheory.ObjectProperty.IsDetecting.isIso_iff_of_mono (since := "2025-10-06")]
                                                      theorem CategoryTheory.IsDetecting.isIso_iff_of_mono {C : Type u₁} [Category.{v₁, u₁} C] {P : ObjectProperty C} (hP : P.IsDetecting) {X Y : C} (f : X Y) [Mono f] :
                                                      IsIso f ∀ (G : C), P GFunction.Surjective ((coyoneda.obj (Opposite.op G)).map f)

                                                      Alias of CategoryTheory.ObjectProperty.IsDetecting.isIso_iff_of_mono.

                                                      @[deprecated CategoryTheory.ObjectProperty.IsCodetecting.isIso_iff_of_epi (since := "2025-10-06")]
                                                      theorem CategoryTheory.IsCodetecting.isIso_iff_of_epi {C : Type u₁} [Category.{v₁, u₁} C] {P : ObjectProperty C} (hP : P.IsCodetecting) {X Y : C} (f : X Y) [Epi f] :
                                                      IsIso f ∀ (G : C), P GFunction.Surjective ((yoneda.obj G).map f.op)

                                                      Alias of CategoryTheory.ObjectProperty.IsCodetecting.isIso_iff_of_epi.

                                                      @[deprecated CategoryTheory.ObjectProperty.IsCoseparating.isCodetecting (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.IsCoseparating.isCodetecting.

                                                      @[deprecated CategoryTheory.ObjectProperty.isDetecting_iff_isSeparating (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isDetecting_iff_isSeparating.

                                                      @[deprecated CategoryTheory.ObjectProperty.isCodetecting_iff_isCoseparating (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isCodetecting_iff_isCoseparating.

                                                      @[deprecated CategoryTheory.ObjectProperty.IsSeparating.of_le (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.IsSeparating.of_le.

                                                      @[deprecated CategoryTheory.ObjectProperty.IsCoseparating.of_le (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.IsCoseparating.of_le.

                                                      @[deprecated CategoryTheory.ObjectProperty.IsDetecting.of_le (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.IsDetecting.of_le.

                                                      @[deprecated CategoryTheory.ObjectProperty.IsCodetecting.of_le (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.IsCodetecting.of_le.

                                                      @[deprecated CategoryTheory.ObjectProperty.isThin_of_isSeparating_bot (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isThin_of_isSeparating_bot.

                                                      @[deprecated CategoryTheory.ObjectProperty.isSeparating_bot_of_isThin (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isSeparating_bot_of_isThin.

                                                      @[deprecated CategoryTheory.ObjectProperty.isThin_of_isCoseparating_bot (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isThin_of_isCoseparating_bot.

                                                      @[deprecated CategoryTheory.ObjectProperty.isCoseparating_bot_of_isThin (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isCoseparating_bot_of_isThin.

                                                      @[deprecated CategoryTheory.ObjectProperty.isGroupoid_of_isDetecting_bot (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isGroupoid_of_isDetecting_bot.

                                                      @[deprecated CategoryTheory.ObjectProperty.isDetecting_bot_of_isGroupoid (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isDetecting_bot_of_isGroupoid.

                                                      @[deprecated CategoryTheory.ObjectProperty.isGroupoid_of_isCodetecting_bot (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isGroupoid_of_isCodetecting_bot.

                                                      @[deprecated CategoryTheory.ObjectProperty.isCodetecting_bot_of_isGroupoid (since := "2025-10-06")]

                                                      Alias of CategoryTheory.ObjectProperty.isCodetecting_bot_of_isGroupoid.

                                                      @[deprecated CategoryTheory.ObjectProperty.isSeparating_iff_epi (since := "2025-10-07")]

                                                      Alias of CategoryTheory.ObjectProperty.isSeparating_iff_epi.

                                                      @[deprecated CategoryTheory.ObjectProperty.isCoseparating_iff_mono (since := "2025-10-07")]

                                                      Alias of CategoryTheory.ObjectProperty.isCoseparating_iff_mono.

                                                      @[deprecated CategoryTheory.ObjectProperty.IsSeparating.isSeparator_coproduct (since := "2025-10-07")]

                                                      Alias of CategoryTheory.ObjectProperty.IsSeparating.isSeparator_coproduct.

                                                      @[deprecated CategoryTheory.StructuredArrow.isCoseparating_inverseImage_proj (since := "2025-10-07")]

                                                      Alias of CategoryTheory.StructuredArrow.isCoseparating_inverseImage_proj.

                                                      @[deprecated CategoryTheory.CostructuredArrow.isSeparating_inverseImage_proj (since := "2025-10-07")]

                                                      Alias of CategoryTheory.CostructuredArrow.isSeparating_inverseImage_proj.