module Cat.Bi.Equivalence where

Equivalences in a bicategory🔗

In any precategory, isomorphism acts as an internal proxy for “sameness” of objects.1 However, in a bicategory, isomorphism is usually too strict a notion, in the sense that requiring that a 1-cell has an inverse such that and is too strong, excluding cases where essentially acts like the identity despite not being equal to it. Instead, following the bicategorical ethos, we should require that these identities hold only up to 2-cell isomorphism.

In addition, we want the specified 2-cell isomorphisms to be compatible with the coherence data of the bicategory. Considering our prototypical bicategory we recall that an equivalence of categories is given by a pair of functors with natural isomorphisms and such that and satisfy the triangle identities of an adjunction.2 Generalizing this, we get the definition of equivalence in a bicategory.

  record is-equivalence {A B} (f : A  B) : Type (h  ) where
    open Adjointᵇ C
    field
      inv : B  A
      inv-adjoint : f  inv

    open _⊣_ inv-adjoint public

    field
      unit-iso   : CH.is-invertible η
      counit-iso : CH.is-invertible ε

In words, a 1-cell in is an equivalence if there is a 1-cell in the opposite direction such that is an inverse to up to chosen 2-cell isomorphisms satisfying the triangle equalities of an adjunction in

Pseudonatural equivalences🔗

We can use the notion of equivalence to relate lax functors between bicategories, similarly to how natural isomorphisms relate functors between categories.

If and are lax functors we define a pseudonatural equivalence to be a pseudonatural transformation which is a componentwise equivalence.

is-equivalenceᵖ : {F G : Lax-functor B C}  F =>ₚ G  Type _
is-equivalenceᵖ {C = C} α =  X  is-equivalence C (α .σ X)

TODO: Show that this definition coincides with an equivalence in the pseudofunctor category.

Equivalences in 🔗

We quickly verify that a bicategorical equivalence in is logically equivalent to an equivalence of categories.

  is-equivalenceᶜ→is-equivalence : is-equivalenceᶜ F  is-equivalence (Cat o h) F
  is-equivalenceᶜ→is-equivalence eqv .is-equivalence.inv = is-equivalenceᶜ.F⁻¹ eqv
  is-equivalenceᶜ→is-equivalence eqv .is-equivalence.inv-adjoint =
    adjointᶜ→adjoint (is-equivalenceᶜ.F⊣F⁻¹ eqv)
  is-equivalenceᶜ→is-equivalence eqv .is-equivalence.unit-iso =
    invertible→invertibleⁿ
      (is-equivalenceᶜ.F⊣F⁻¹ eqv ._⊣ᶜ_.unit) (is-equivalenceᶜ.unit-iso eqv)
  is-equivalenceᶜ→is-equivalence eqv .is-equivalence.counit-iso =
    invertible→invertibleⁿ
      (is-equivalenceᶜ.F⊣F⁻¹ eqv ._⊣ᶜ_.counit) (is-equivalenceᶜ.counit-iso eqv)

  is-equivalence→is-equivalenceᶜ : is-equivalence (Cat o h) F  is-equivalenceᶜ F
  is-equivalence→is-equivalenceᶜ eqv .is-equivalenceᶜ.F⁻¹   = is-equivalence.inv eqv
  is-equivalence→is-equivalenceᶜ eqv .is-equivalenceᶜ.F⊣F⁻¹ =
    adjoint→adjointᶜ (is-equivalence.inv-adjoint eqv)
  is-equivalence→is-equivalenceᶜ eqv .is-equivalenceᶜ.has-is-equivalence =
    record where
      unit-iso   = is-invertibleⁿ→is-invertible (is-equivalence.unit-iso eqv)
      counit-iso = is-invertibleⁿ→is-invertible (is-equivalence.counit-iso eqv)

  1. In a univalent category, this intuition is also technically precise.↩︎

  2. As we have shown, this notion also characterizes paths between univalent categories.↩︎