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, it is also called normal) if there is an equality F.map (𝟙 X) = 𝟙 (F.obj X) and the unit 2-morphism 𝟙 (F.obj X) ⟶ F.map (𝟙 X) 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 2-morphism 𝟙 (obj X) ⟶ map (𝟙 X) is in fact an identity 2-morphism 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.

      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.

        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
          @[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 pseudofunctor F from B to C such that the structure isomorphism map (𝟙 X) ≅ 𝟙 (F.obj X) is in fact an identity 2-isomorphism 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 pseudofunctors 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.

              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
                @[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✝) :
                @[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