Documentation

Mathlib.CategoryTheory.Bicategory.Functor.Oplax

Oplax functors #

An oplax functor F between bicategories B and C consists of

Main definitions #

Future work #

There are two types of functors between bicategories, called lax and oplax functors, depending on the directions of mapId and mapComp. We may need both in mathlib in the future, but for now we only define oplax functors.

structure CategoryTheory.PrelaxFunctor (B : Type u₁) [Quiver B] [(a b : B) → Quiver (a b)] (C : Type u₂) [Quiver C] [(a b : C) → Quiver (a b)] extends Prefunctor :
Type (max (max (max (max (max u₁ u₂) v₁) v₂) w₁) w₂)

A prelax functor between bicategories consists of functions between objects, 1-morphisms, and 2-morphisms. This structure will be extended to define OplaxFunctor.

  • obj : BC
  • map : {X Y : B} → (X Y)((self).obj X (self).obj Y)
  • map₂ : {a b : B} → {f g : a b} → (f g)((self).map f (self).map g)

    The action of a prelax functor on 2-morphisms.

Instances For
    instance CategoryTheory.PrelaxFunctor.hasCoeToPrefunctor {B : Type u₁} [Quiver B] [(a b : B) → Quiver (a b)] {C : Type u₂} [Quiver C] [(a b : C) → Quiver (a b)] :
    Equations
    • CategoryTheory.PrelaxFunctor.hasCoeToPrefunctor = { coe := CategoryTheory.PrelaxFunctor.toPrefunctor }
    @[simp]
    theorem CategoryTheory.PrelaxFunctor.id_map₂ (B : Type u₁) [Quiver B] [(a b : B) → Quiver (a b)] :
    ∀ {a b : B} {f g : a b} (η : f g), (CategoryTheory.PrelaxFunctor.id B).map₂ η = η

    The identity prelax functor.

    Equations
    Instances For
      Equations
      @[simp]
      theorem CategoryTheory.PrelaxFunctor.comp_toPrefunctor {B : Type u₁} [Quiver B] [(a b : B) → Quiver (a b)] {C : Type u₂} [Quiver C] [(a b : C) → Quiver (a b)] {D : Type u₃} [Quiver D] [(a b : D) → Quiver (a b)] (F : CategoryTheory.PrelaxFunctor B C) (G : CategoryTheory.PrelaxFunctor C D) :
      (F.comp G) = F ⋙q G
      @[simp]
      theorem CategoryTheory.PrelaxFunctor.comp_map₂ {B : Type u₁} [Quiver B] [(a b : B) → Quiver (a b)] {C : Type u₂} [Quiver C] [(a b : C) → Quiver (a b)] {D : Type u₃} [Quiver D] [(a b : D) → Quiver (a b)] (F : CategoryTheory.PrelaxFunctor B C) (G : CategoryTheory.PrelaxFunctor C D) :
      ∀ {a b : B} {f g : a b} (η : f g), (F.comp G).map₂ η = G.map₂ (F.map₂ η)
      def CategoryTheory.PrelaxFunctor.comp {B : Type u₁} [Quiver B] [(a b : B) → Quiver (a b)] {C : Type u₂} [Quiver C] [(a b : C) → Quiver (a b)] {D : Type u₃} [Quiver D] [(a b : D) → Quiver (a b)] (F : CategoryTheory.PrelaxFunctor B C) (G : CategoryTheory.PrelaxFunctor C D) :

      Composition of prelax functors.

      Equations
      • F.comp G = let __src := F ⋙q G; { toPrefunctor := __src, map₂ := fun {a b : B} {f g : a b} (η : f g) => G.map₂ (F.map₂ η) }
      Instances For
        structure CategoryTheory.OplaxFunctor (B : Type u₁) [CategoryTheory.Bicategory B] (C : Type u₂) [CategoryTheory.Bicategory C] extends CategoryTheory.PrelaxFunctor :
        Type (max (max (max (max (max u₁ u₂) v₁) v₂) w₁) w₂)

        An oplax functor F between bicategories B and C consists of a function between objects F.obj, a function between 1-morphisms F.map, and a function between 2-morphisms F.map₂.

        Unlike functors between categories, F.map do not need to strictly commute with the composition, and do not need to strictly preserve the identity. Instead, there are specified 2-morphisms F.map (𝟙 a) ⟶ 𝟙 (F.obj a) and F.map (f ≫ g) ⟶ F.map f ≫ F.map g.

        F.map₂ strictly commute with compositions and preserve the identity. They also preserve the associator, the left unitor, and the right unitor modulo some adjustments of domains and codomains of 2-morphisms.

        Instances For
          @[simp]
          theorem CategoryTheory.OplaxFunctor.mapComp_naturality_left {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (self : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {c : B} {f : a b} {f' : a b} (η : f f') (g : b c) :
          CategoryTheory.CategoryStruct.comp (self.map₂ (CategoryTheory.Bicategory.whiskerRight η g)) (self.mapComp f' g) = CategoryTheory.CategoryStruct.comp (self.mapComp f g) (CategoryTheory.Bicategory.whiskerRight (self.map₂ η) ((self.toPrelaxFunctor).map g))
          @[simp]
          theorem CategoryTheory.OplaxFunctor.mapComp_naturality_right {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (self : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {c : B} (f : a b) {g : b c} {g' : b c} (η : g g') :
          CategoryTheory.CategoryStruct.comp (self.map₂ (CategoryTheory.Bicategory.whiskerLeft f η)) (self.mapComp f g') = CategoryTheory.CategoryStruct.comp (self.mapComp f g) (CategoryTheory.Bicategory.whiskerLeft ((self.toPrelaxFunctor).map f) (self.map₂ η))
          @[simp]
          theorem CategoryTheory.OplaxFunctor.map₂_id {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (self : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} (f : a b) :
          self.map₂ (CategoryTheory.CategoryStruct.id f) = CategoryTheory.CategoryStruct.id ((self.toPrelaxFunctor).map f)
          @[simp]
          theorem CategoryTheory.OplaxFunctor.map₂_comp {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (self : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {f : a b} {g : a b} {h : a b} (η : f g) (θ : g h) :
          self.map₂ (CategoryTheory.CategoryStruct.comp η θ) = CategoryTheory.CategoryStruct.comp (self.map₂ η) (self.map₂ θ)
          @[simp]
          theorem CategoryTheory.OplaxFunctor.map₂_associator {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (self : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {c : B} {d : B} (f : a b) (g : b c) (h : c d) :
          CategoryTheory.CategoryStruct.comp (self.map₂ (CategoryTheory.Bicategory.associator f g h).hom) (CategoryTheory.CategoryStruct.comp (self.mapComp f (CategoryTheory.CategoryStruct.comp g h)) (CategoryTheory.Bicategory.whiskerLeft ((self.toPrelaxFunctor).map f) (self.mapComp g h))) = CategoryTheory.CategoryStruct.comp (self.mapComp (CategoryTheory.CategoryStruct.comp f g) h) (CategoryTheory.CategoryStruct.comp (CategoryTheory.Bicategory.whiskerRight (self.mapComp f g) ((self.toPrelaxFunctor).map h)) (CategoryTheory.Bicategory.associator ((self.toPrelaxFunctor).map f) ((self.toPrelaxFunctor).map g) ((self.toPrelaxFunctor).map h)).hom)
          @[simp]
          theorem CategoryTheory.OplaxFunctor.mapComp_naturality_right_assoc {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (self : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {c : B} (f : a b) {g : b c} {g' : b c} (η : g g') {Z : (self.toPrelaxFunctor).obj a (self.toPrelaxFunctor).obj c} (h : CategoryTheory.CategoryStruct.comp ((self.toPrelaxFunctor).map f) ((self.toPrelaxFunctor).map g') Z) :
          @[simp]
          theorem CategoryTheory.OplaxFunctor.mapComp_naturality_left_assoc {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (self : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {c : B} {f : a b} {f' : a b} (η : f f') (g : b c) {Z : (self.toPrelaxFunctor).obj a (self.toPrelaxFunctor).obj c} (h : CategoryTheory.CategoryStruct.comp ((self.toPrelaxFunctor).map f') ((self.toPrelaxFunctor).map g) Z) :
          @[simp]
          theorem CategoryTheory.OplaxFunctor.map₂_associator_assoc {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (self : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {c : B} {d : B} (f : a b) (g : b c) (h : c d) {Z : (self.toPrelaxFunctor).obj a (self.toPrelaxFunctor).obj d} (h : CategoryTheory.CategoryStruct.comp ((self.toPrelaxFunctor).map f) (CategoryTheory.CategoryStruct.comp ((self.toPrelaxFunctor).map g) ((self.toPrelaxFunctor).map h✝)) Z) :
          CategoryTheory.CategoryStruct.comp (self.map₂ (CategoryTheory.Bicategory.associator f g h✝).hom) (CategoryTheory.CategoryStruct.comp (self.mapComp f (CategoryTheory.CategoryStruct.comp g h✝)) (CategoryTheory.CategoryStruct.comp (CategoryTheory.Bicategory.whiskerLeft ((self.toPrelaxFunctor).map f) (self.mapComp g h✝)) h)) = CategoryTheory.CategoryStruct.comp (self.mapComp (CategoryTheory.CategoryStruct.comp f g) h✝) (CategoryTheory.CategoryStruct.comp (CategoryTheory.Bicategory.whiskerRight (self.mapComp f g) ((self.toPrelaxFunctor).map h✝)) (CategoryTheory.CategoryStruct.comp (CategoryTheory.Bicategory.associator ((self.toPrelaxFunctor).map f) ((self.toPrelaxFunctor).map g) ((self.toPrelaxFunctor).map h✝)).hom h))
          theorem CategoryTheory.OplaxFunctor.map₂_comp_assoc {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (self : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {f : a b} {g : a b} {h : a b} (η : f g) (θ : g h✝) {Z : (self.toPrelaxFunctor).obj a (self.toPrelaxFunctor).obj b} (h : (self.toPrelaxFunctor).map h✝ Z) :
          theorem CategoryTheory.OplaxFunctor.map₂_leftUnitor_assoc {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (self : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} (f : a b) {Z : (self.toPrelaxFunctor).obj a (self.toPrelaxFunctor).obj b} (h : (self.toPrelaxFunctor).map f Z) :
          theorem CategoryTheory.OplaxFunctor.map₂_rightUnitor_assoc {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (self : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} (f : a b) {Z : (self.toPrelaxFunctor).obj a (self.toPrelaxFunctor).obj b} (h : (self.toPrelaxFunctor).map f Z) :
          Equations
          • CategoryTheory.OplaxFunctor.hasCoeToPrelax = { coe := CategoryTheory.OplaxFunctor.toPrelaxFunctor }
          @[simp]
          theorem CategoryTheory.OplaxFunctor.mapFunctor_obj {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (F : CategoryTheory.OplaxFunctor B C) (a : B) (b : B) (f : a b) :
          (F.mapFunctor a b).obj f = (F.toPrelaxFunctor).map f
          @[simp]
          theorem CategoryTheory.OplaxFunctor.mapFunctor_map {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (F : CategoryTheory.OplaxFunctor B C) (a : B) (b : B) :
          ∀ {X Y : a b} (η : X Y), (F.mapFunctor a b).map η = F.map₂ η
          def CategoryTheory.OplaxFunctor.mapFunctor {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (F : CategoryTheory.OplaxFunctor B C) (a : B) (b : B) :
          CategoryTheory.Functor (a b) ((F.toPrelaxFunctor).obj a (F.toPrelaxFunctor).obj b)

          Function between 1-morphisms as a functor.

          Equations
          • F.mapFunctor a b = { obj := fun (f : a b) => (F.toPrelaxFunctor).map f, map := fun {X Y : a b} (η : X Y) => F.map₂ η, map_id := , map_comp := }
          Instances For
            @[simp]
            theorem CategoryTheory.OplaxFunctor.map₂Iso_hom {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (F : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {f : a b} {g : a b} (η : f g) :
            (F.map₂Iso η).hom = F.map₂ η.hom
            @[simp]
            theorem CategoryTheory.OplaxFunctor.map₂Iso_inv {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (F : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {f : a b} {g : a b} (η : f g) :
            (F.map₂Iso η).inv = F.map₂ η.inv
            @[reducible, inline]
            abbrev CategoryTheory.OplaxFunctor.map₂Iso {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (F : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {f : a b} {g : a b} (η : f g) :
            (F.toPrelaxFunctor).map f (F.toPrelaxFunctor).map g

            An oplax functor F : B ⥤ C sends 2-isomorphisms η : f ≅ f to 2-isomorphisms F.map f ≅ F.map g

            Equations
            • F.map₂Iso η = (F.mapFunctor a b).mapIso η
            Instances For
              instance CategoryTheory.OplaxFunctor.map₂_isIso {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (F : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {f : a b} {g : a b} (η : f g) [CategoryTheory.IsIso η] :
              CategoryTheory.IsIso (F.map₂ η)
              Equations
              • =
              @[simp]
              theorem CategoryTheory.OplaxFunctor.map₂_inv {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (F : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {f : a b} {g : a b} (η : f g) [CategoryTheory.IsIso η] :
              F.map₂ (CategoryTheory.inv η) = CategoryTheory.inv (F.map₂ η)
              theorem CategoryTheory.OplaxFunctor.map₂_hom_inv_assoc {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (F : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {f : a b} {g : a b} (η : f g) [CategoryTheory.IsIso η] {Z : (F.toPrelaxFunctor).obj a (F.toPrelaxFunctor).obj b} (h : (F.toPrelaxFunctor).map f Z) :
              theorem CategoryTheory.OplaxFunctor.map₂_hom_inv {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (F : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {f : a b} {g : a b} (η : f g) [CategoryTheory.IsIso η] :
              CategoryTheory.CategoryStruct.comp (F.map₂ η) (F.map₂ (CategoryTheory.inv η)) = CategoryTheory.CategoryStruct.id ((F.toPrelaxFunctor).map f)
              theorem CategoryTheory.OplaxFunctor.map₂_inv_hom_assoc {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (F : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {f : a b} {g : a b} (η : f g) [CategoryTheory.IsIso η] {Z : (F.toPrelaxFunctor).obj a (F.toPrelaxFunctor).obj b} (h : (F.toPrelaxFunctor).map g Z) :
              theorem CategoryTheory.OplaxFunctor.map₂_inv_hom {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] (F : CategoryTheory.OplaxFunctor B C) {a : B} {b : B} {f : a b} {g : a b} (η : f g) [CategoryTheory.IsIso η] :
              CategoryTheory.CategoryStruct.comp (F.map₂ (CategoryTheory.inv η)) (F.map₂ η) = CategoryTheory.CategoryStruct.id ((F.toPrelaxFunctor).map g)

              The identity oplax functor.

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

                Composition of oplax functors.

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

                  A structure on an oplax functor that promotes an oplax functor to a pseudofunctor. See Pseudofunctor.mkOfOplax.

                  Instances For
                    @[simp]
                    theorem CategoryTheory.OplaxFunctor.PseudoCore.mapIdIso_hom {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] {F : CategoryTheory.OplaxFunctor B C} (self : F.PseudoCore) {a : B} :
                    (self.mapIdIso a).hom = F.mapId a
                    @[simp]
                    theorem CategoryTheory.OplaxFunctor.PseudoCore.mapCompIso_hom {B : Type u₁} [CategoryTheory.Bicategory B] {C : Type u₂} [CategoryTheory.Bicategory C] {F : CategoryTheory.OplaxFunctor B C} (self : F.PseudoCore) {a : B} {b : B} {c : B} (f : a b) (g : b c) :
                    (self.mapCompIso f g).hom = F.mapComp f g