Documentation

Mathlib.CategoryTheory.Limits.Final

Final and initial functors #

A functor F : C ⥤ D is final if for every d : D, the comma category of morphisms d ⟶ F.obj c is connected.

Dually, a functor F : C ⥤ D is initial if for every d : D, the comma category of morphisms F.obj c ⟶ d is connected.

We show that right adjoints are examples of final functors, while left adjoints are examples of initial functors.

For final functors, we prove that the following three statements are equivalent:

  1. F : C ⥤ D is final.
  2. Every functor G : D ⥤ E has a colimit if and only if F ⋙ G does, and these colimits are isomorphic via colimit.pre G F.
  3. colimit (F ⋙ coyoneda.obj (op d)) ≅ PUnit.

Starting at 1. we show (in coconesEquiv) that the categories of cocones over G : D ⥤ E and over F ⋙ G are equivalent. (In fact, via an equivalence which does not change the cocone point.) This readily implies 2., as comp_hasColimit, hasColimit_of_comp, and colimitIso.

From 2. we can specialize to G = coyoneda.obj (op d) to obtain 3., as colimitCompCoyonedaIso.

From 3., we prove 1. directly in final_of_colimit_comp_coyoneda_iso_pUnit.

Dually, we prove that if a functor F : C ⥤ D is initial, then any functor G : D ⥤ E has a limit if and only if F ⋙ G does, and these limits are isomorphic via limit.pre G F.

In the end of the file, we characterize the finality of some important induced functors on the (co)structured arrow category (StructuredArrow.pre and CostructuredArrow.pre) and on the Grothendieck construction (Grothendieck.pre and Grothendieck.map).

Naming #

There is some discrepancy in the literature about naming; some say 'cofinal' instead of 'final'. The explanation for this is that the 'co' prefix here is not the usual category-theoretic one indicating duality, but rather indicating the sense of "along with".

See also #

In CategoryTheory.Filtered.Final we give additional equivalent conditions in the case that C is filtered.

Future work #

Dualise condition 3 above and the implications 2 ⇒ 3 and 3 ⇒ 1 to initial functors.

References #

A functor F : C ⥤ D is final if for every d : D, the comma category of morphisms d ⟶ F.obj c is connected.

Stacks Tag 04E6

Instances

    A functor F : C ⥤ D is initial if for every d : D, the comma category of morphisms F.obj c ⟶ d is connected.

    Instances
      theorem CategoryTheory.Functor.final_of_adjunction {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {L : Functor C D} {R : Functor D C} (adj : L R) :

      If a functor R : D ⥤ C is a right adjoint, it is final.

      theorem CategoryTheory.Functor.initial_of_adjunction {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {L : Functor C D} {R : Functor D C} (adj : L R) :

      If a functor L : C ⥤ D is a left adjoint, it is initial.

      theorem CategoryTheory.Functor.final_of_natIso {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F F' : Functor C D} [F.Final] (i : F F') :
      def CategoryTheory.Functor.Final.lift {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) [F.Final] (d : D) :
      C

      When F : C ⥤ D is final, we denote by lift F d an arbitrary choice of object in C such that there exists a morphism d ⟶ F.obj (lift F d).

      Equations
      Instances For
        def CategoryTheory.Functor.Final.homToLift {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) [F.Final] (d : D) :
        d F.obj (lift F d)

        When F : C ⥤ D is final, we denote by homToLift an arbitrary choice of morphism d ⟶ F.obj (lift F d).

        Equations
        Instances For
          def CategoryTheory.Functor.Final.induction {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) [F.Final] {d : D} (Z : (X : C) → (d F.obj X) → Sort u_1) (h₁ : (X₁ X₂ : C) → (k₁ : d F.obj X₁) → (k₂ : d F.obj X₂) → (f : X₁ X₂) → CategoryStruct.comp k₁ (F.map f) = k₂Z X₁ k₁Z X₂ k₂) (h₂ : (X₁ X₂ : C) → (k₁ : d F.obj X₁) → (k₂ : d F.obj X₂) → (f : X₁ X₂) → CategoryStruct.comp k₁ (F.map f) = k₂Z X₂ k₂Z X₁ k₁) {X₀ : C} {k₀ : d F.obj X₀} (z : Z X₀ k₀) :
          Z (lift F d) (homToLift F d)

          We provide an induction principle for reasoning about lift and homToLift. We want to perform some construction (usually just a proof) about the particular choices lift F d and homToLift F d, it suffices to perform that construction for some other pair of choices (denoted X₀ : C and k₀ : d ⟶ F.obj X₀ below), and to show how to transport such a construction both directions along a morphism between such choices.

          Equations
          Instances For

            Given a cocone over F ⋙ G, we can construct a Cocone G with the same cocone point.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              @[simp]
              @[simp]
              theorem CategoryTheory.Functor.Final.extendCocone_map_hom {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F : Functor C D} [F.Final] {E : Type u₃} [Category.{v₃, u₃} E] {G : Functor D E} {X✝ Y✝ : Limits.Cocone (F.comp G)} (f : X✝ Y✝) :
              theorem CategoryTheory.Functor.Final.extendCocone_obj_ι_app' {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F : Functor C D} [F.Final] {E : Type u₃} [Category.{v₃, u₃} E] {G : Functor D E} (c : Limits.Cocone (F.comp G)) {X : D} {Y : C} (f : X F.obj Y) :

              Alternative equational lemma for (extendCocone c).ι.app in case a lift of the object is given explicitly.

              @[simp]
              theorem CategoryTheory.Functor.Final.colimit_cocone_comp_aux {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F : Functor C D} [F.Final] {E : Type u₃} [Category.{v₃, u₃} E] {G : Functor D E} (s : Limits.Cocone (F.comp G)) (j : C) :
              CategoryStruct.comp (G.map (homToLift F (F.obj j))) (s.ι.app (lift F (F.obj j))) = s.ι.app j

              If F is final, the category of cocones on F ⋙ G is equivalent to the category of cocones on G, for any G : D ⥤ E.

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For

                When F : C ⥤ D is final, and t : Cocone G for some G : D ⥤ E, t.whisker F is a colimit cocone exactly when t is.

                Equations
                Instances For

                  When F is final, and t : Cocone (F ⋙ G), extendCocone.obj t is a colimit cocone exactly when t is.

                  Equations
                  Instances For

                    Given a colimit cocone over G : D ⥤ E we can construct a colimit cocone over F ⋙ G.

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      @[instance 100]
                      Equations
                      • One or more equations did not get rendered due to their size.

                      When F : C ⥤ D is final, and G : D ⥤ E has a colimit, then F ⋙ G has a colimit also and colimit (F ⋙ G) ≅ colimit G.

                      Stacks Tag 04E7

                      Equations
                      Instances For

                        A pointfree version of colimitIso, stating that whiskering by F followed by taking the colimit is isomorpic to taking the colimit on the codomain of F.

                        Equations
                        Instances For

                          Given a colimit cocone over F ⋙ G we can construct a colimit cocone over G.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For

                            When F is final, and F ⋙ G has a colimit, then G has a colimit also.

                            We can't make this an instance, because F is not determined by the goal. (Even if this weren't a problem, it would cause a loop with comp_hasColimit.)

                            If F is final and F ⋙ G creates colimits of H, then so does G.

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For

                              If H creates colimits of shape C and F : C ⥤ D is final, then H creates colimits of shape D.

                              Equations
                              Instances For

                                If colimit (F ⋙ coyoneda.obj (op d)) ≅ PUnit for all d : D, then F is final.

                                A variant of final_of_colimit_comp_coyoneda_iso_pUnit where we bind the various claims about colimit (F ⋙ coyoneda.obj (Opposite.op d)) for each d : D into a single claim about the presheaf colimit (F ⋙ yoneda).

                                If the universal morphism colimit (F ⋙ coyoneda.obj (op d)) ⟶ colimit (coyoneda.obj (op d)) is an isomorphism (as it always is when F is final), then colimit (F ⋙ coyoneda.obj (op d)) ≅ PUnit (simply because colimit (coyoneda.obj (op d)) ≅ PUnit).

                                Equations
                                • One or more equations did not get rendered due to their size.
                                Instances For

                                  When F : C ⥤ D is initial, we denote by lift F d an arbitrary choice of object in C such that there exists a morphism F.obj (lift F d) ⟶ d.

                                  Equations
                                  Instances For
                                    def CategoryTheory.Functor.Initial.homToLift {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) [F.Initial] (d : D) :
                                    F.obj (lift F d) d

                                    When F : C ⥤ D is initial, we denote by homToLift an arbitrary choice of morphism F.obj (lift F d) ⟶ d.

                                    Equations
                                    Instances For
                                      def CategoryTheory.Functor.Initial.induction {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor C D) [F.Initial] {d : D} (Z : (X : C) → (F.obj X d) → Sort u_1) (h₁ : (X₁ X₂ : C) → (k₁ : F.obj X₁ d) → (k₂ : F.obj X₂ d) → (f : X₁ X₂) → CategoryStruct.comp (F.map f) k₂ = k₁Z X₁ k₁Z X₂ k₂) (h₂ : (X₁ X₂ : C) → (k₁ : F.obj X₁ d) → (k₂ : F.obj X₂ d) → (f : X₁ X₂) → CategoryStruct.comp (F.map f) k₂ = k₁Z X₂ k₂Z X₁ k₁) {X₀ : C} {k₀ : F.obj X₀ d} (z : Z X₀ k₀) :
                                      Z (lift F d) (homToLift F d)

                                      We provide an induction principle for reasoning about lift and homToLift. We want to perform some construction (usually just a proof) about the particular choices lift F d and homToLift F d, it suffices to perform that construction for some other pair of choices (denoted X₀ : C and k₀ : F.obj X₀ ⟶ d below), and to show how to transport such a construction both directions along a morphism between such choices.

                                      Equations
                                      Instances For

                                        Given a cone over F ⋙ G, we can construct a Cone G with the same cocone point.

                                        Equations
                                        • One or more equations did not get rendered due to their size.
                                        Instances For
                                          @[simp]
                                          theorem CategoryTheory.Functor.Initial.extendCone_map_hom {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F : Functor C D} [F.Initial] {E : Type u₃} [Category.{v₃, u₃} E] {G : Functor D E} {X✝ Y✝ : Limits.Cone (F.comp G)} (f : X✝ Y✝) :
                                          @[simp]
                                          theorem CategoryTheory.Functor.Initial.extendCone_obj_π_app' {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F : Functor C D} [F.Initial] {E : Type u₃} [Category.{v₃, u₃} E] {G : Functor D E} (c : Limits.Cone (F.comp G)) {X : C} {Y : D} (f : F.obj X Y) :

                                          Alternative equational lemma for (extendCone c).π.app in case a lift of the object is given explicitly.

                                          @[simp]
                                          theorem CategoryTheory.Functor.Initial.limit_cone_comp_aux {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {F : Functor C D} [F.Initial] {E : Type u₃} [Category.{v₃, u₃} E] {G : Functor D E} (s : Limits.Cone (F.comp G)) (j : C) :
                                          CategoryStruct.comp (s.π.app (lift F (F.obj j))) (G.map (homToLift F (F.obj j))) = s.π.app j

                                          If F is initial, the category of cones on F ⋙ G is equivalent to the category of cones on G, for any G : D ⥤ E.

                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For

                                            When F : C ⥤ D is initial, and t : Cone G for some G : D ⥤ E, t.whisker F is a limit cone exactly when t is.

                                            Equations
                                            Instances For

                                              When F is initial, and t : Cone (F ⋙ G), extendCone.obj t is a limit cone exactly when t is.

                                              Equations
                                              Instances For

                                                Given a limit cone over G : D ⥤ E we can construct a limit cone over F ⋙ G.

                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Instances For
                                                  @[instance 100]
                                                  Equations
                                                  • One or more equations did not get rendered due to their size.

                                                  When F : C ⥤ D is initial, and G : D ⥤ E has a limit, then F ⋙ G has a limit also and limit (F ⋙ G) ≅ limit G.

                                                  Stacks Tag 04E7

                                                  Equations
                                                  Instances For

                                                    A pointfree version of limitIso, stating that whiskering by F followed by taking the limit is isomorpic to taking the limit on the codomain of F.

                                                    Equations
                                                    Instances For

                                                      Given a limit cone over F ⋙ G we can construct a limit cone over G.

                                                      Equations
                                                      • One or more equations did not get rendered due to their size.
                                                      Instances For

                                                        When F is initial, and F ⋙ G has a limit, then G has a limit also.

                                                        We can't make this an instance, because F is not determined by the goal. (Even if this weren't a problem, it would cause a loop with comp_hasLimit.)

                                                        If F is initial and F ⋙ G creates limits of H, then so does G.

                                                        Equations
                                                        • One or more equations did not get rendered due to their size.
                                                        Instances For

                                                          If H creates limits of shape C and F : C ⥤ D is initial, then H creates limits of shape D.

                                                          Equations
                                                          Instances For

                                                            The hypotheses also imply that G is final, see final_of_comp_full_faithful'.

                                                            The hypotheses also imply that G is initial, see initial_of_comp_full_faithful'.

                                                            See also the strictly more general final_comp below.

                                                            See also the strictly more general initial_comp below.

                                                            See also the strictly more general final_comp below.

                                                            See also the strictly more general initial_comp below.

                                                            See also the strictly more general final_of_final_comp below.

                                                            See also the strictly more general initial_of_initial_comp below.

                                                            See also the strictly more general final_iff_comp_final_full_faithful below.

                                                            See also the strictly more general final_iff_final_comp below.

                                                            See also the strictly more general initial_iff_initial_comp below.

                                                            instance CategoryTheory.Functor.final_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (F : Functor C D) (G : Functor D E) [hF : F.Final] [hG : G.Final] :
                                                            (F.comp G).Final
                                                            theorem CategoryTheory.Functor.final_of_final_comp {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (F : Functor C D) (G : Functor D E) [hF : F.Final] [hFG : (F.comp G).Final] :

                                                            The hypotheses also imply that F is final, see final_of_comp_full_faithful.

                                                            The hypotheses also imply that F is initial, see initial_of_comp_full_faithful.

                                                            Final functors preserve filteredness.

                                                            This can be seen as a generalization of IsFiltered.of_right_adjoint (which states that right adjoints preserve filteredness), as right adjoints are always final, see final_of_adjunction.

                                                            Final functors preserve filteredness.

                                                            This can be seen as a generalization of IsFiltered.of_right_adjoint (which states that right adjoints preserve filteredness), as right adjoints are always final, see final_of_adjunction.

                                                            Initial functors preserve cofilteredness.

                                                            This can be seen as a generalization of IsCofiltered.of_left_adjoint (which states that left adjoints preserve cofilteredness), as right adjoints are always initial, see initial_of_adjunction.

                                                            Initial functors preserve cofilteredness.

                                                            This can be seen as a generalization of IsCofiltered.of_left_adjoint (which states that left adjoints preserve cofilteredness), as right adjoints are always initial, see initial_of_adjunction.

                                                            instance CategoryTheory.StructuredArrow.final_pre {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (T : Functor C D) [T.Final] (S : Functor D E) (X : E) :
                                                            (pre X T S).Final

                                                            The functor StructuredArrow.pre X T S is final if T is final.

                                                            instance CategoryTheory.CostructuredArrow.initial_pre {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {E : Type u₃} [Category.{v₃, u₃} E] (T : Functor C D) [T.Initial] (S : Functor D E) (X : E) :
                                                            (pre T S X).Initial

                                                            The functor CostructuredArrow.pre X T S is initial if T is initial.

                                                            def CategoryTheory.Grothendieck.structuredArrowToStructuredArrowPre {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor D Cat) (G : Functor C D) (d : D) (f : (F.obj d)) :
                                                            StructuredArrow d G ⥤q StructuredArrow { base := d, fiber := f } (pre F G)

                                                            A prefunctor mapping structured arrows on G to structured arrows on pre F G with their action on fibers being the identity.

                                                            Equations
                                                            • One or more equations did not get rendered due to their size.
                                                            Instances For
                                                              instance CategoryTheory.Grothendieck.final_pre {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] (F : Functor D Cat) (G : Functor C D) [hG : G.Final] :
                                                              (pre F G).Final

                                                              A natural transformation α : F ⟶ G between functors F G : C ⥤ Cat which is is final on each fiber (α.app X) induces an equivalence of fiberwise colimits of map α ⋙ H and H for each functor H : Grothendieck G ⥤ Type.

                                                              Equations
                                                              • One or more equations did not get rendered due to their size.
                                                              Instances For
                                                                theorem CategoryTheory.Grothendieck.final_map {C : Type u₁} [Category.{v₁, u₁} C] {F G : Functor C Cat} (α : F G) [hα : ∀ (X : C), Functor.Final (α.app X)] :
                                                                (map α).Final

                                                                The functor Grothendieck.map α for a natural transformation α : F ⟶ G, with F G : C ⥤ Cat, is final if for each X : C, the functor α.app X is final.

                                                                instance CategoryTheory.instFinalProdProd {C : Type u₁} [Category.{v₁, u₁} C] {D : Type u₂} [Category.{v₂, u₂} D] {C' : Type u₃} [Category.{v₃, u₃} C'] {D' : Type u₄} [Category.{v₄, u₄} D'] (F : Functor C D) (G : Functor C' D') [F.Final] [G.Final] :
                                                                (F.prod G).Final