Documentation

Mathlib.CategoryTheory.Bicategory.Functor.StrictlyUnitary

Strictly unitary lax functors and pseudofunctors #

In this file, we define strictly unitary Lax functors and strictly unitary pseudofunctors between bicategories.

A lax functor F is said to be strictly unitary (sometimes, they are also called normal) if there is an equality F.obj (𝟙 _) = 𝟙 (F.obj x) and if the unit 2-morphism F.obj (𝟙 _) → 𝟙 (F.obj _) is the identity 2-morphism induced by this equality.

A pseudofunctor is called strictly unitary (or a normal homomorphism) if it satisfies the same condition (i.e its "underlying" lax functor is strictly unitary).

References #

TODOs #

structure CategoryTheory.StrictlyUnitaryLaxFunctor (B : Type u₁) [Bicategory B] (C : Type u₂) [Bicategory C] extends CategoryTheory.LaxFunctor B C :
Type (max (max (max (max (max u₁ u₂) v₁) v₂) w₁) w₂)

A strictly unitary lax functor F between bicategories B and C is a lax functor F from B to C such that the structure 1-cell 𝟙 (obj X) ⟶ map (𝟙 X) is in fact an identity 1-cell for every X : B.

Instances For
    structure CategoryTheory.StrictlyUnitaryLaxFunctorCore (B : Type u₁) [Bicategory B] (C : Type u₂) [Bicategory C] :
    Type (max (max (max (max (max u₁ u₂) v₁) v₂) w₁) w₂)

    A helper structure that bundles the necessary data to construct a StrictlyUnitaryLaxFunctor without specifying the redundant field mapId.

    Instances For

      An alternate constructor for strictly unitary lax functors that does not require the mapId fields, and that adapts the map₂_leftUnitor and map₂_rightUnitor to the fact that the functor is strictly unitary.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        @[simp]
        theorem CategoryTheory.StrictlyUnitaryLaxFunctor.mk'_map₂ {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] (S : StrictlyUnitaryLaxFunctorCore B C) {a✝ b✝ : B} {f✝ g✝ : a✝ b✝} (a✝¹ : f✝ g✝) :
        (mk' S).map₂ a✝¹ = S.map₂ a✝¹
        @[simp]
        theorem CategoryTheory.StrictlyUnitaryLaxFunctor.mk'_map {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] (S : StrictlyUnitaryLaxFunctorCore B C) {X✝ Y✝ : B} (a✝ : X✝ Y✝) :
        (mk' S).map a✝ = S.map a✝
        @[simp]
        theorem CategoryTheory.StrictlyUnitaryLaxFunctor.mk'_mapComp {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] (S : StrictlyUnitaryLaxFunctorCore B C) {a✝ b✝ c✝ : B} (f : a✝ b✝) (g : b✝ c✝) :
        (mk' S).mapComp f g = S.mapComp f g
        @[simp]
        theorem CategoryTheory.StrictlyUnitaryLaxFunctor.mk'_obj {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] (S : StrictlyUnitaryLaxFunctorCore B C) (a✝ : B) :
        (mk' S).obj a✝ = S.obj a✝

        Promote the morphism F.mapId x : 𝟙 (F.obj x) ⟶ F.map (𝟙 x) to an isomorphism when F is strictly unitary.

        Equations
        Instances For

          The identity StrictlyUnitaryLaxFunctor.

          Equations
          Instances For
            @[simp]
            theorem CategoryTheory.StrictlyUnitaryLaxFunctor.id_mapComp (B : Type u₁) [Bicategory B] {a✝ b✝ c✝ : B} (f : a✝ b✝) (g : b✝ c✝) :
            @[simp]
            theorem CategoryTheory.StrictlyUnitaryLaxFunctor.id_map (B : Type u₁) [Bicategory B] {X✝ Y✝ : B} (f : X✝ Y✝) :
            (id B).map f = f
            @[simp]
            theorem CategoryTheory.StrictlyUnitaryLaxFunctor.id_map₂ (B : Type u₁) [Bicategory B] {a✝ b✝ : B} {f✝ g✝ : a✝ b✝} (η : f✝ g✝) :
            (id B).map₂ η = η
            @[simp]
            theorem CategoryTheory.StrictlyUnitaryLaxFunctor.id_obj (B : Type u₁) [Bicategory B] (X : B) :
            (id B).obj X = X

            Composition of StrictlyUnitaryLaxFunctor.

            Equations
            Instances For
              @[simp]
              theorem CategoryTheory.StrictlyUnitaryLaxFunctor.comp_mapComp {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] {D : Type u₃} [Bicategory D] (F : StrictlyUnitaryLaxFunctor B C) (G : StrictlyUnitaryLaxFunctor C D) {a✝ b✝ c✝ : B} (f : a✝ b✝) (g : b✝ c✝) :
              (F.comp G).mapComp f g = CategoryStruct.comp (G.mapComp (F.map f) (F.map g)) (G.map₂ (F.mapComp f g))
              @[simp]
              theorem CategoryTheory.StrictlyUnitaryLaxFunctor.comp_map₂ {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] {D : Type u₃} [Bicategory D] (F : StrictlyUnitaryLaxFunctor B C) (G : StrictlyUnitaryLaxFunctor C D) {a✝ b✝ : B} {f✝ g✝ : a✝ b✝} (η : f✝ g✝) :
              (F.comp G).map₂ η = G.map₂ (F.map₂ η)
              @[simp]
              @[simp]
              theorem CategoryTheory.StrictlyUnitaryLaxFunctor.comp_obj {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] {D : Type u₃} [Bicategory D] (F : StrictlyUnitaryLaxFunctor B C) (G : StrictlyUnitaryLaxFunctor C D) (X : B) :
              (F.comp G).obj X = G.obj (F.obj X)
              @[simp]
              theorem CategoryTheory.StrictlyUnitaryLaxFunctor.comp_map {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] {D : Type u₃} [Bicategory D] (F : StrictlyUnitaryLaxFunctor B C) (G : StrictlyUnitaryLaxFunctor C D) {X✝ Y✝ : B} (f : X✝ Y✝) :
              (F.comp G).map f = G.map (F.map f)
              theorem CategoryTheory.StrictlyUnitaryLaxFunctor.ext {B : Type u₁} {inst✝ : Bicategory B} {C : Type u₂} {inst✝¹ : Bicategory C} {x y : StrictlyUnitaryLaxFunctor B C} (obj : x.obj = y.obj) (map : @Prefunctor.map B inst✝.toQuiver C inst✝¹.toQuiver x.toPrefunctor @Prefunctor.map B inst✝.toQuiver C inst✝¹.toQuiver y.toPrefunctor) (map₂ : @PrelaxFunctorStruct.map₂ B inst✝.toQuiver (fun (a b : B) => (Bicategory.homCategory a b).toQuiver) C inst✝¹.toQuiver (fun (a b : C) => (Bicategory.homCategory a b).toQuiver) x.toPrelaxFunctorStruct @PrelaxFunctorStruct.map₂ B inst✝.toQuiver (fun (a b : B) => (Bicategory.homCategory a b).toQuiver) C inst✝¹.toQuiver (fun (a b : C) => (Bicategory.homCategory a b).toQuiver) y.toPrelaxFunctorStruct) (mapId : x.mapId y.mapId) (mapComp : @LaxFunctor.mapComp B inst✝ C inst✝¹ x.toLaxFunctor @LaxFunctor.mapComp B inst✝ C inst✝¹ y.toLaxFunctor) :
              x = y
              theorem CategoryTheory.StrictlyUnitaryLaxFunctor.ext_iff {B : Type u₁} {inst✝ : Bicategory B} {C : Type u₂} {inst✝¹ : Bicategory C} {x y : StrictlyUnitaryLaxFunctor B C} :
              x = y x.obj = y.obj @Prefunctor.map B inst✝.toQuiver C inst✝¹.toQuiver x.toPrefunctor @Prefunctor.map B inst✝.toQuiver C inst✝¹.toQuiver y.toPrefunctor @PrelaxFunctorStruct.map₂ B inst✝.toQuiver (fun (a b : B) => (Bicategory.homCategory a b).toQuiver) C inst✝¹.toQuiver (fun (a b : C) => (Bicategory.homCategory a b).toQuiver) x.toPrelaxFunctorStruct @PrelaxFunctorStruct.map₂ B inst✝.toQuiver (fun (a b : B) => (Bicategory.homCategory a b).toQuiver) C inst✝¹.toQuiver (fun (a b : C) => (Bicategory.homCategory a b).toQuiver) y.toPrelaxFunctorStruct x.mapId y.mapId @LaxFunctor.mapComp B inst✝ C inst✝¹ x.toLaxFunctor @LaxFunctor.mapComp B inst✝ C inst✝¹ y.toLaxFunctor

              Composition of StrictlyUnitaryLaxFunctor is strictly right unitary

              Composition of StrictlyUnitaryLaxFunctor is strictly left unitary

              Composition of StrictlyUnitaryLaxFunctor is strictly associative

              structure CategoryTheory.StrictlyUnitaryPseudofunctor (B : Type u₁) [Bicategory B] (C : Type u₂) [Bicategory C] extends CategoryTheory.Pseudofunctor B C :
              Type (max (max (max (max (max u₁ u₂) v₁) v₂) w₁) w₂)

              A strictly unitary pseudofunctor (sometimes called a "normal homomorphism) F between bicategories B and C is a lax functor F from B to C such that the structure isomorphism map (𝟙 X) ≅ 𝟙 (F.obj X) is in fact an identity 1-cell for every X : B (in particular, there is an equality F.map (𝟙 X) = 𝟙 (F.obj x)).

              Instances For
                structure CategoryTheory.StrictlyUnitaryPseudofunctorCore (B : Type u₁) [Bicategory B] (C : Type u₂) [Bicategory C] :
                Type (max (max (max (max (max u₁ u₂) v₁) v₂) w₁) w₂)

                A helper structure that bundles the necessary data to construct a StrictlyUnitaryPseudofunctor without specifying the redundant field mapId

                Instances For

                  An alternate constructor for strictly unitary lax functors that does not require the mapId fields, and that adapts the map₂_leftUnitor and map₂_rightUnitor to the fact that the functor is strictly unitary.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    @[simp]
                    theorem CategoryTheory.StrictlyUnitaryPseudofunctor.mk'_obj {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] (S : StrictlyUnitaryPseudofunctorCore B C) (a✝ : B) :
                    (mk' S).obj a✝ = S.obj a✝
                    @[simp]
                    theorem CategoryTheory.StrictlyUnitaryPseudofunctor.mk'_map₂ {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] (S : StrictlyUnitaryPseudofunctorCore B C) {a✝ b✝ : B} {f✝ g✝ : a✝ b✝} (a✝¹ : f✝ g✝) :
                    (mk' S).map₂ a✝¹ = S.map₂ a✝¹
                    @[simp]
                    theorem CategoryTheory.StrictlyUnitaryPseudofunctor.mk'_map {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] (S : StrictlyUnitaryPseudofunctorCore B C) {X✝ Y✝ : B} (a✝ : X✝ Y✝) :
                    (mk' S).map a✝ = S.map a✝
                    @[simp]
                    theorem CategoryTheory.StrictlyUnitaryPseudofunctor.mk'_mapComp {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] (S : StrictlyUnitaryPseudofunctorCore B C) {a✝ b✝ c✝ : B} (f : a✝ b✝) (g : b✝ c✝) :
                    (mk' S).mapComp f g = S.mapComp f g

                    By forgetting the inverse to mapComp, a StrictlyUnitaryPseudofunctor is a StrictlyUnitaryLaxFunctor.

                    Equations
                    Instances For
                      @[simp]
                      @[simp]
                      theorem CategoryTheory.StrictlyUnitaryPseudofunctor.id_map (B : Type u₁) [Bicategory B] {X✝ Y✝ : B} (f : X✝ Y✝) :
                      (id B).map f = f
                      @[simp]
                      theorem CategoryTheory.StrictlyUnitaryPseudofunctor.id_map₂ (B : Type u₁) [Bicategory B] {a✝ b✝ : B} {f✝ g✝ : a✝ b✝} (η : f✝ g✝) :
                      (id B).map₂ η = η
                      @[simp]
                      theorem CategoryTheory.StrictlyUnitaryPseudofunctor.id_mapComp_inv (B : Type u₁) [Bicategory B] {a✝ b✝ c✝ : B} (f : a✝ b✝) (g : b✝ c✝) :
                      @[simp]
                      theorem CategoryTheory.StrictlyUnitaryPseudofunctor.id_mapComp_hom (B : Type u₁) [Bicategory B] {a✝ b✝ c✝ : B} (f : a✝ b✝) (g : b✝ c✝) :

                      Composition of StrictlyUnitaryPseudofunctor.

                      Equations
                      Instances For
                        @[simp]
                        theorem CategoryTheory.StrictlyUnitaryPseudofunctor.comp_map {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] {D : Type u₃} [Bicategory D] (F : StrictlyUnitaryPseudofunctor B C) (G : StrictlyUnitaryPseudofunctor C D) {X✝ Y✝ : B} (f : X✝ Y✝) :
                        (F.comp G).map f = G.map (F.map f)
                        @[simp]
                        theorem CategoryTheory.StrictlyUnitaryPseudofunctor.comp_mapComp_inv {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] {D : Type u₃} [Bicategory D] (F : StrictlyUnitaryPseudofunctor B C) (G : StrictlyUnitaryPseudofunctor C D) {a✝ b✝ c✝ : B} (f : a✝ b✝) (g : b✝ c✝) :
                        ((F.comp G).mapComp f g).inv = CategoryStruct.comp (G.mapComp (F.map f) (F.map g)).inv (G.map₂ (F.mapComp f g).inv)
                        @[simp]
                        theorem CategoryTheory.StrictlyUnitaryPseudofunctor.comp_map₂ {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] {D : Type u₃} [Bicategory D] (F : StrictlyUnitaryPseudofunctor B C) (G : StrictlyUnitaryPseudofunctor C D) {a✝ b✝ : B} {f✝ g✝ : a✝ b✝} (η : f✝ g✝) :
                        (F.comp G).map₂ η = G.map₂ (F.map₂ η)
                        @[simp]
                        theorem CategoryTheory.StrictlyUnitaryPseudofunctor.comp_obj {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] {D : Type u₃} [Bicategory D] (F : StrictlyUnitaryPseudofunctor B C) (G : StrictlyUnitaryPseudofunctor C D) (X : B) :
                        (F.comp G).obj X = G.obj (F.obj X)
                        @[simp]
                        theorem CategoryTheory.StrictlyUnitaryPseudofunctor.comp_mapComp_hom {B : Type u₁} [Bicategory B] {C : Type u₂} [Bicategory C] {D : Type u₃} [Bicategory D] (F : StrictlyUnitaryPseudofunctor B C) (G : StrictlyUnitaryPseudofunctor C D) {a✝ b✝ c✝ : B} (f : a✝ b✝) (g : b✝ c✝) :
                        ((F.comp G).mapComp f g).hom = CategoryStruct.comp (G.map₂ (F.mapComp f g).hom) (G.mapComp (F.map f) (F.map g)).hom