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.mono_iff {C : Type u₁} [Category.{v₁, u₁} C] {P : ObjectProperty C} (hP : P.IsSeparating) {X Y : C} (f : X Y) :
                  Mono f ∀ (G : C), P G∀ (g₁ g₂ : G X), CategoryStruct.comp g₁ f = CategoryStruct.comp g₂ fg₁ = g₂
                  theorem CategoryTheory.ObjectProperty.IsCoseparating.epi_iff {C : Type u₁} [Category.{v₁, u₁} C] {P : ObjectProperty C} (hP : P.IsCoseparating) {X Y : C} (f : X Y) :
                  Epi f ∀ (G : C), P G∀ (g₁ g₂ : Y G), CategoryStruct.comp f g₁ = CategoryStruct.comp f g₂g₁ = g₂
                  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

                                          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.