Documentation

Mathlib.CategoryTheory.ConcreteCategory.Forget

Forgetful functors #

A concrete category is a category C where the objects and morphisms correspond with types and (bundled) functions between these types, see the file Mathlib.CategoryTheory.ConcreteCategory.Basic

Each concrete category C comes with a canonical faithful functor forget C : C ⥤ Type*. We impose no restrictions on the category C, so Type has the identity forgetful functor.

We say that a concrete category C admits a forgetful functor to a concrete category D, if it has a functor forget₂ C D : C ⥤ D such that (forget₂ C D) ⋙ (forget D) = forget C, see class HasForget₂. Due to Faithful.div_comp, it suffices to verify that forget₂.obj and forget₂.map agree with the equality above; then forget₂ will satisfy the functor laws automatically, see HasForget₂.mk'.

We say that a concrete category C admits a forgetful functor to a concrete category D, if it has a functor forget₂ C D : C ⥤ D such that (forget₂ C D) ⋙ (forget D) = forget C, see class HasForget₂. Due to Faithful.div_comp, it suffices to verify that forget₂.obj and forget₂.map agree with the equality above; then forget₂ will satisfy the functor laws automatically, see HasForget₂.mk'.

References #

See Ahrens and Lumsdaine, Displayed Categories for related work.

def CategoryTheory.forget (C : Type u_1) [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] :

The forgetful functor from a concrete category to the category of types.

Equations
Instances For
    instance CategoryTheory.instFaithfulForget (C : Type u_1) [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] :
    @[simp]
    theorem CategoryTheory.ConcreteCategory.forget_map_eq_coe {C : Type u_1} [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] {X Y : C} (f : X Y) :
    (forget C).map f = (hom f)
    theorem CategoryTheory.forget_obj {C : Type u_1} [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] (X : C) :
    (forget C).obj X = ToType X
    theorem CategoryTheory.congr_fun {C : Type u_1} [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] {X Y : C} {f g : X Y} (h : f = g) (x : ToType X) :

    Analogue of congr_fun h x, when h : f = g is an equality between morphisms in a concrete category.

    theorem CategoryTheory.congr_arg {C : Type u_1} [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] {X Y : C} (f : X Y) {x x' : ToType X} (h : x = x') :

    Analogue of congr_arg f h, when h : x = x' is an equality between elements of objects in a concrete category.

    class CategoryTheory.HasForget₂ (C : Type u_1) [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] (D : Type u_3) [Category.{v_2, u_3} D] {FD : outParam (DDType u_4)} {CD : outParam (DType w)} [outParam ((X Y : D) → FunLike (FD X Y) (CD X) (CD Y))] [ConcreteCategory D FD] :
    Type (max (max (max u_1 u_3) v_1) v_2)

    HasForget₂ C D, where C and D are both concrete categories, provides a functor forget₂ C D : C ⥤ D and a proof that forget₂ ⋙ (forget D) = forget C.

    Instances
      @[reducible, inline]
      abbrev CategoryTheory.forget₂ (C : Type u_1) [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] (D : Type u_3) [Category.{v_2, u_3} D] {FD : outParam (DDType u_4)} {CD : outParam (DType w)} [outParam ((X Y : D) → FunLike (FD X Y) (CD X) (CD Y))] [ConcreteCategory D FD] [HasForget₂ C D] :

      The forgetful functor C ⥤ D between concrete categories for which we have an instance HasForget₂ C.

      Equations
      Instances For
        theorem CategoryTheory.forget₂_comp_apply {C : Type u_1} [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] {D : Type u_3} [Category.{v_2, u_3} D] {FD : outParam (DDType u_4)} {CD : outParam (DType w)} [outParam ((X Y : D) → FunLike (FD X Y) (CD X) (CD Y))] [ConcreteCategory D FD] [HasForget₂ C D] {X Y Z : C} (f : X Y) (g : Y Z) (x : ToType ((forget₂ C D).obj X)) :
        instance CategoryTheory.forget₂_faithful {C : Type u_1} [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] {D : Type u_3} [Category.{v_2, u_3} D] {FD : outParam (DDType u_4)} {CD : outParam (DType w)} [outParam ((X Y : D) → FunLike (FD X Y) (CD X) (CD Y))] [ConcreteCategory D FD] [HasForget₂ C D] :
        instance CategoryTheory.InducedCategory.hasForget₂ {C : Type u_1} {D : Type u_3} [Category.{v_2, u_3} D] {FD : outParam (DDType u_4)} {CD : outParam (DType w)} [outParam ((X Y : D) → FunLike (FD X Y) (CD X) (CD Y))] [ConcreteCategory D FD] (f : CD) :
        Equations
        instance CategoryTheory.FullSubcategory.hasForget₂ {C : Type u_1} [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] (P : ObjectProperty C) :
        Equations
        def CategoryTheory.HasForget₂.mk' {C : Type u_1} [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] {D : Type u_3} [Category.{v_2, u_3} D] {FD : outParam (DDType u_4)} {CD : outParam (DType w)} [outParam ((X Y : D) → FunLike (FD X Y) (CD X) (CD Y))] [ConcreteCategory D FD] (obj : CD) (h_obj : ∀ (X : C), (forget D).obj (obj X) = (forget C).obj X) (map : {X Y : C} → (X Y) → (obj X obj Y)) (h_map : ∀ {X Y : C} {f : X Y}, (forget D).map (map f) (forget C).map f) :

        In order to construct a “partially forgetting” functor, we do not need to verify functor laws; it suffices to ensure that compositions agree with forget₂ C D ⋙ forget D = forget C.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          @[reducible]
          def CategoryTheory.HasForget₂.trans (C : Type u_1) [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] (D : Type u_3) [Category.{v_2, u_3} D] {FD : outParam (DDType u_4)} {CD : outParam (DType w)} [outParam ((X Y : D) → FunLike (FD X Y) (CD X) (CD Y))] [ConcreteCategory D FD] (E : Type u_5) [Category.{v_3, u_5} E] {FE : outParam (EEType u_6)} {CE : outParam (EType w)} [outParam ((X Y : E) → FunLike (FE X Y) (CE X) (CE Y))] [ConcreteCategory E FE] [HasForget₂ C D] [HasForget₂ D E] :

          Composition of HasForget₂ instances.

          Equations
          Instances For
            theorem CategoryTheory.ConcreteCategory.forget₂_comp_apply {C : Type u_1} [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] {D : Type u_3} [Category.{v_2, u_3} D] {FD : outParam (DDType u_4)} {CD : outParam (DType w)} [outParam ((X Y : D) → FunLike (FD X Y) (CD X) (CD Y))] [ConcreteCategory D FD] [HasForget₂ C D] {X Y Z : C} (f : X Y) (g : Y Z) (x : ToType ((forget₂ C D).obj X)) :
            (hom ((forget₂ C D).map (CategoryStruct.comp f g))) x = (hom ((forget₂ C D).map g)) ((hom ((forget₂ C D).map f)) x)
            instance CategoryTheory.hom_isIso {C : Type u_1} [Category.{v_1, u_1} C] {FC : outParam (CCType u_2)} {CC : outParam (CType w)} [outParam ((X Y : C) → FunLike (FC X Y) (CC X) (CC Y))] [ConcreteCategory C FC] {X Y : C} (f : X Y) [IsIso f] :
            instance CategoryTheory.Types.instFunLike (X Y : Type u) :
            FunLike (X Y) X Y
            Equations
            Equations
            • One or more equations did not get rendered due to their size.
            @[simp]
            @[simp]
            theorem CategoryTheory.NatTrans.naturality_apply {C : Type u_1} [Category.{v_1, u_1} C] {D : Type u_3} [Category.{v_2, u_3} D] {FD : outParam (DDType u_4)} {CD : outParam (DType w)} [outParam ((X Y : D) → FunLike (FD X Y) (CD X) (CD Y))] [ConcreteCategory D FD] {F G : Functor C D} (φ : F G) {X Y : C} (f : X Y) (x : ToType (F.obj X)) :