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

Future work #

We say that 𝒒 is a separating set if the functors C(G, -) for 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 𝒒 is a coseparating set if the functors C(-, G) for G ∈ 𝒒 are collectively faithful, i.e., if f ≫ h = g ≫ h for all h with codomain in 𝒒 implies f = g.

    Equations
    Instances For
      def CategoryTheory.IsDetecting {C : Type u₁} [Category.{v₁, u₁} C] (𝒒 : Set C) :

      We say that 𝒒 is a detecting set if the functors C(G, -) collectively reflect isomorphisms, i.e., if any h with domain in 𝒒 uniquely factors through f, then f is an isomorphism.

      Equations
      Instances For

        We say that 𝒒 is a codetecting set if the functors C(-, G) collectively reflect isomorphisms, i.e., if any h with codomain in G uniquely factors through f, then f is an isomorphism.

        Equations
        Instances For
          theorem CategoryTheory.IsSeparating.of_equivalence {C : Type u₁} [Category.{v₁, u₁} C] {𝒒 : Set C} (h : IsSeparating 𝒒) {D : Type u_1} [Category.{u_2, u_1} D] (Ξ± : C β‰Œ D) :
          IsSeparating (Ξ±.functor.obj '' 𝒒)
          theorem CategoryTheory.IsCoseparating.of_equivalence {C : Type u₁} [Category.{v₁, u₁} C] {𝒒 : Set C} (h : IsCoseparating 𝒒) {D : Type u_1} [Category.{u_2, u_1} D] (Ξ± : C β‰Œ D) :
          IsCoseparating (Ξ±.functor.obj '' 𝒒)
          theorem CategoryTheory.isDetecting_op_iff {C : Type u₁} [Category.{v₁, u₁} C] (𝒒 : Set C) :
          IsDetecting 𝒒.op ↔ IsCodetecting 𝒒
          theorem CategoryTheory.IsDetecting.isSeparating {C : Type u₁} [Category.{v₁, u₁} C] [Limits.HasEqualizers C] {𝒒 : Set C} (h𝒒 : IsDetecting 𝒒) :
          IsSeparating 𝒒
          theorem CategoryTheory.IsSeparating.isDetecting {C : Type u₁} [Category.{v₁, u₁} C] [Balanced C] {𝒒 : Set C} (h𝒒 : IsSeparating 𝒒) :
          IsDetecting 𝒒
          theorem CategoryTheory.IsDetecting.isIso_iff_of_mono {C : Type u₁} [Category.{v₁, u₁} C] {𝒒 : Set C} (h𝒒 : IsDetecting 𝒒) {X Y : C} (f : X ⟢ Y) [Mono f] :
          IsIso f ↔ βˆ€ s ∈ 𝒒, Function.Surjective ((coyoneda.obj (Opposite.op s)).map f)
          theorem CategoryTheory.IsCodetecting.isIso_iff_of_epi {C : Type u₁} [Category.{v₁, u₁} C] {𝒒 : Set C} (h𝒒 : IsCodetecting 𝒒) {X Y : C} (f : X ⟢ Y) [Epi f] :
          IsIso f ↔ βˆ€ s ∈ 𝒒, Function.Surjective ((yoneda.obj s).map f.op)
          theorem CategoryTheory.IsCoseparating.isCodetecting {C : Type u₁} [Category.{v₁, u₁} C] [Balanced C] {𝒒 : Set C} :
          IsCoseparating 𝒒 β†’ IsCodetecting 𝒒
          theorem CategoryTheory.IsSeparating.mono {C : Type u₁} [Category.{v₁, u₁} C] {𝒒 : Set C} (h𝒒 : IsSeparating 𝒒) {β„‹ : Set C} (h𝒒ℋ : 𝒒 βŠ† β„‹) :
          theorem CategoryTheory.IsCoseparating.mono {C : Type u₁} [Category.{v₁, u₁} C] {𝒒 : Set C} (h𝒒 : IsCoseparating 𝒒) {β„‹ : Set C} (h𝒒ℋ : 𝒒 βŠ† β„‹) :
          theorem CategoryTheory.IsDetecting.mono {C : Type u₁} [Category.{v₁, u₁} C] {𝒒 : Set C} (h𝒒 : IsDetecting 𝒒) {β„‹ : Set C} (h𝒒ℋ : 𝒒 βŠ† β„‹) :
          theorem CategoryTheory.IsCodetecting.mono {C : Type u₁} [Category.{v₁, u₁} C] {𝒒 : Set C} (h𝒒 : IsCodetecting 𝒒) {β„‹ : Set C} (h𝒒ℋ : 𝒒 βŠ† β„‹) :
          theorem CategoryTheory.isSeparating_iff_epi {C : Type u₁} [Category.{v₁, u₁} C] (𝒒 : Set C) [βˆ€ (A : C), Limits.HasCoproduct fun (f : (G : ↑𝒒) Γ— (↑G ⟢ A)) => ↑f.fst] :
          IsSeparating 𝒒 ↔ βˆ€ (A : C), Epi (Limits.Sigma.desc Sigma.snd)
          theorem CategoryTheory.isCoseparating_iff_mono {C : Type u₁} [Category.{v₁, u₁} C] (𝒒 : Set C) [βˆ€ (A : C), Limits.HasProduct fun (f : (G : ↑𝒒) Γ— (A ⟢ ↑G)) => ↑f.fst] :
          IsCoseparating 𝒒 ↔ βˆ€ (A : C), Mono (Limits.Pi.lift Sigma.snd)

          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] {𝒒 : Set C} (h𝒒 : IsDetecting 𝒒) {X : C} (P Q : Subobject X) (h₁ : P ≀ Q) (hβ‚‚ : βˆ€ G ∈ 𝒒, βˆ€ {f : G ⟢ X}, Q.Factors f β†’ P.Factors f) :
          P = Q
          theorem CategoryTheory.Subobject.inf_eq_of_isDetecting {C : Type u₁} [Category.{v₁, u₁} C] [Limits.HasPullbacks C] {𝒒 : Set C} (h𝒒 : IsDetecting 𝒒) {X : C} (P Q : Subobject X) (h : βˆ€ G ∈ 𝒒, βˆ€ {f : G ⟢ X}, P.Factors f β†’ Q.Factors f) :
          P βŠ“ Q = P
          theorem CategoryTheory.Subobject.eq_of_isDetecting {C : Type u₁} [Category.{v₁, u₁} C] [Limits.HasPullbacks C] {𝒒 : Set C} (h𝒒 : IsDetecting 𝒒) {X : C} (P Q : Subobject X) (h : βˆ€ G ∈ 𝒒, βˆ€ {f : G ⟢ X}, P.Factors f ↔ Q.Factors f) :
          P = Q

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

          theorem CategoryTheory.StructuredArrow.isCoseparating_proj_preimage {C : Type u₁} [Category.{v₁, u₁} C] {D : Type uβ‚‚} [Category.{vβ‚‚, uβ‚‚} D] (S : D) (T : Functor C D) {𝒒 : Set C} (h𝒒 : IsCoseparating 𝒒) :
          theorem CategoryTheory.CostructuredArrow.isSeparating_proj_preimage {C : Type u₁} [Category.{v₁, u₁} C] {D : Type uβ‚‚} [Category.{vβ‚‚, uβ‚‚} D] (S : Functor C D) (T : D) {𝒒 : Set C} (h𝒒 : IsSeparating 𝒒) :
          IsSeparating ((proj S T).obj ⁻¹' 𝒒)

          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