Library UniMath.CategoryTheory.Categories.KaroubiEnvelope.Core

1. The definition of a karoubi envelope


Definition karoubi_envelope_data
  (C : category)
  : UU
  := (D : category), C D.

Definition make_karoubi_envelope_data
  {C : category}
  (D : category)
  (F : C D)
  : karoubi_envelope_data C
  := D ,, F.

Coercion karoubi_envelope_data_category
  {C : category}
  (D : karoubi_envelope_data C)
  : category
  := pr1 D.

Definition karoubi_envelope_functor
  {C : category}
  (D : karoubi_envelope_data C)
  : C D
  := pr2 D.

Definition idempotents_split
  (D : category)
  : UU
  := (X : D) (f : idempotent X), is_split_idempotent f .

Definition objects_are_retracts
  {C D : category}
  (F : C D)
  : UU
  := (X : D), (Y : C), retraction X (F Y).

Definition is_karoubi_envelope
  {C : category}
  (D : karoubi_envelope_data C)
  : UU
  := idempotents_split D ×
    fully_faithful (karoubi_envelope_functor D) ×
    objects_are_retracts (karoubi_envelope_functor D).

Definition make_is_karoubi_envelope
  {C : category}
  {D : karoubi_envelope_data C}
  (H1 : idempotents_split D)
  (H2 : fully_faithful (karoubi_envelope_functor D))
  (H3 : objects_are_retracts (karoubi_envelope_functor D))
  : is_karoubi_envelope D
  := H1 ,, H2 ,, H3.

Definition karoubi_envelope
  (C : category)
  : UU
  := (D : karoubi_envelope_data C), is_karoubi_envelope D.

Definition make_karoubi_envelope
  {C : category}
  (D : karoubi_envelope_data C)
  (H : is_karoubi_envelope D)
  : karoubi_envelope C
  := D ,, H.

Coercion karoubi_envelope_to_data
  {C : category}
  (D : karoubi_envelope C)
  : karoubi_envelope_data C
  := pr1 D.

Definition karoubi_envelope_idempotents_split
  {C : category}
  (D : karoubi_envelope C)
  : idempotents_split D
  := pr12 D.

Definition karoubi_envelope_fully_faithful
  {C : category}
  (D : karoubi_envelope C)
  : fully_faithful (karoubi_envelope_functor D)
  := pr122 D.

Definition karoubi_envelope_objects_are_retracts
  {C : category}
  (D : karoubi_envelope C)
  : objects_are_retracts (karoubi_envelope_functor D)
  := pr222 D.

Definition univalent_karoubi_envelope
  (C : category)
  : UU
  := (D : karoubi_envelope C), is_univalent D.

Definition make_univalent_karoubi_envelope
  {C : category}
  (D : karoubi_envelope C)
  (H : is_univalent D)
  : univalent_karoubi_envelope C
  := D ,, H.

Coercion univalent_karoubi_envelope_to_karoubi_envelope
  {C : category}
  (D : univalent_karoubi_envelope C)
  : karoubi_envelope C
  := pr1 D.

Definition univalent_karoubi_envelope_is_univalent
  {C : category}
  (D : univalent_karoubi_envelope C)
  : is_univalent D
  := pr2 D.

Definition set_karoubi_envelope
  (C : category)
  : UU
  := (D : karoubi_envelope C), isaset D.

Definition make_set_karoubi_envelope
  {C : category}
  (D : karoubi_envelope C)
  (H : isaset D)
  : set_karoubi_envelope C
  := D ,, H.

Coercion set_karoubi_envelope_to_karoubi_envelope
  {C : category}
  (D : set_karoubi_envelope C)
  : karoubi_envelope C
  := pr1 D.

Definition set_karoubi_envelope_isaset
  {C : category}
  (D : set_karoubi_envelope C)
  : isaset D
  := pr2 D.

2. Functors on C are equivalent to functors on the setcategory Karoubi envelope


Section Functors.

  Context {C : category}.
  Context (D : karoubi_envelope C).
  Context (E : category).
  Context (HE : Colims E).

  Section Iso.

    Context (P : D E).
    Context (d : D).
    Context (c : C).
    Context (f : retraction d (karoubi_envelope_functor D c)).

    Definition karoubi_functor_iso_inv
      : E P d, lan_point HE (karoubi_envelope_functor D) (functor_compose (karoubi_envelope_functor D) P) d.
    Proof.
      refine (_ · colimIn _ ((
        (c ,, tt) ,, (f : _ --> _)
      ) : vertex (lan_comma _ _))).
      apply (#P).
      exact (retraction_section f).
    Defined.

    Lemma karoubi_functor_iso_is_inverse
      : is_inverse_in_precat
        ((counit_from_right_adjoint (is_right_adjoint_precomposition HE (karoubi_envelope_functor D)) P : _ _) d)
        karoubi_functor_iso_inv.
    Proof.
      split.
      - refine (assoc _ _ _ @ _).
        apply colim_mor_eq.
        intro v.
        refine (assoc _ _ _ @ _).
        refine (maponpaths (λ x, x · _) (assoc _ _ _) @ _).
        refine (maponpaths (λ x, x · _ · _) (lan_precomposition_counit_point_colimIn HE _ P d _ _ _) @ _).
        refine (!maponpaths (λ x, x · _) (functor_comp P _ _) @ _).
        refine (_ @ !id_right _).
        simple refine (_ @ colimInCommutes (lan_colim HE _ (pre_comp_functor _ P) _) v ((c ,, tt) ,, (f : _ --> _)) ((fully_faithful_inv_hom (karoubi_envelope_fully_faithful D) _ _ (pr2 v · retraction_section f) ,, pr2 iscontrunit _) ,, _)).
        + apply (maponpaths (λ x, #P x · _)).
          exact (!functor_on_fully_faithful_inv_hom _ _ _).
        + refine (_ @ !maponpaths (λ x, x · _) (functor_on_fully_faithful_inv_hom _ _ _)).
          refine (_ @ assoc _ _ _).
          apply maponpaths.
          exact (!retraction_is_retraction _).
      - refine (assoc' _ _ _ @ _).
        refine (maponpaths _ (lan_precomposition_counit_point_colimIn HE _ P d _ _ _) @ _).
        refine (!functor_comp _ _ _ @ _).
        refine (_ @ functor_id P _).
        apply maponpaths.
        apply retraction_is_retraction.
    Qed.

  End Iso.

  Definition karoubi_functor_iso
    (P : D E)
    : is_z_isomorphism (counit_from_right_adjoint (is_right_adjoint_precomposition HE (karoubi_envelope_functor D)) P).
  Proof.
    apply nat_trafo_z_iso_if_pointwise_z_iso.
    intro d.
    refine (factor_through_squash (isaprop_is_z_isomorphism _) _ (karoubi_envelope_objects_are_retracts D d)).
    intro c.
    refine (make_is_z_isomorphism _ _ (karoubi_functor_iso_is_inverse _ _ (pr1 c) (pr2 c))).
  Defined.

  Definition karoubi_pullback_equivalence
    : adj_equivalence_of_cats
      (pre_comp_functor (C := E) (karoubi_envelope_functor D)).
  Proof.
    use adj_equivalence_from_right_adjoint.
    - apply (is_right_adjoint_precomposition HE).
    - intro P.
      exact (z_iso_is_z_isomorphism (pre_comp_after_lan_iso _ (karoubi_envelope_fully_faithful D) _ HE P)).
    - exact karoubi_functor_iso.
  Defined.

End Functors.