Library UniMath.Folds.folds_pre_2_cat

Univalent FOLDS
Benedikt Ahrens, following notes by Michael Shulman
Contents of this file:
  • Definition: FOLDS pre-3-category
    • objects ob coerced, morphisms denoted by infix
    • predicates for identity I, composition T, equality E
    • E is a congruence for T and I, and E is an equivalence relation
    • usual categorical axioms
  • Definition: FOLDS pre-2-categoy
    • the fibers of I, T and E are hProps
  • Isomorphism between morphisms in a FOLDS pre-2-category
    • Definition: given by a family of equivalences
    • Lemma: Type of isos folds_2_iso f g is a proposition (because I, T, E are)
    • Definition: Map idtoiso2 from paths to isos
  • Lemma: In a FOLDS pre-2-category, folds_2_iso f g is equivalent to E f g
    • E_implies_folds_iso
    • folds_iso_implies_E
  • Definition: univalent FOLDS pre-2-category as special FOLDS pre-2-category
    • idtoiso2 is an equivalence
    • is_univalent_folds_2_precat is an hProp
  • Definition: FOLDS precategory as special FOLDS pre-2-category
    • predicate is_folds_precategory defined as
      • hom-types are sets
      • axioms of category modul = rather than E
  • Lemma: Logical equivalence between being a FOLDS precategory and being univalent
    • since both are hProps, this entails equivalence between the types of
      • univalent FOLDS pre-2-cats
      • FOLDS precats
    • Implications are called
      • is_univalent_implies_is_folds_precat and
      • is_folds_precat_implies_is_univalent

Require Import UniMath.Folds.UnicodeNotations.

Require Import UniMath.Foundations.PartD.
Require Import UniMath.Foundations.Propositions.
Require Import UniMath.Foundations.Sets.

Require Import UniMath.CategoryTheory.total2_paths.


Local Notation "p ## a" := (transportf _ p a) (at level 3, only parsing).

The definition of a FOLDS pre-3-category

Objects and a dependent type of morphisms


Definition folds_3_ob_mor := ∑ a : UU, aaUU.
Definition folds_3_ob_mor_pair (ob : UU)(mor : obobUU) : folds_3_ob_mor
  := tpair _ ob mor.

Definition ob (C : folds_3_ob_mor) : UU := @pr1 _ _ C.
Coercion ob : folds_3_ob_mor >-> UU.

Definition folds_3_morphisms {C : folds_3_ob_mor} : CCUU := pr2 C.
Local Notation "a ⇒ b" := (folds_3_morphisms a b).

Definition folds_double_transport {C : folds_3_ob_mor} {a a' b b' : ob C}
   (p : a = a') (q : b = b') (f : ab) : a'b' :=
  transportf (λ c, a'c) q (transportf (λ c, cb) p f).

Identity, composition, and equality, given through predicates

We do not assume those to be propositions.

Definition folds_3_id_comp_eq := ∑ C : folds_3_ob_mor,
 ( (∏ a : C, aaUU)
 × (∏ (a b c : C), (ab) → (bc) → (ac) → UU))
 × ∏ a b : C, ababUU.

Definition folds_ob_mor_from_folds_id_comp (C : folds_3_id_comp_eq) : folds_3_ob_mor := pr1 C.
Coercion folds_ob_mor_from_folds_id_comp : folds_3_id_comp_eq >-> folds_3_ob_mor.

Definition I {C : folds_3_id_comp_eq} : ∏ {a : C}, aaUU := pr1 (pr1 (pr2 C)).
Definition T {C : folds_3_id_comp_eq} :
      ∏ {a b c : C}, (ab) → (bc) → (ac) → UU := pr2 (pr1 (pr2 C)).
Definition E {C : folds_3_id_comp_eq} :
      ∏ {a b : C}, ababUU := pr2 (pr2 C).

E is an "equality", i.e. a congruence and equivalence


Definition E_is_good_to_I_and_T (C : folds_3_id_comp_eq) : UU :=
  (((∏ (a b : C) (f : ab), E f f)
 × (∏ (a b : C) (f g : ab), E f gE g f))
× (∏ (a b : C) (f g h : ab), E f gE g hE f h))
× ((∏ (a : C) (f g : aa), E f gI fI g)
× (∏ (a b c : C) (f f' : ab) (g g' : bc) (h h' : ac),
                      E f f'E g g'E h h'T f g hT f' g' h')).

The axioms for identity


Definition folds_ax_id (C : folds_3_id_comp_eq) :=
     (∏ a : C, ∥ ∑ f : aa, I f ∥ )
 × ((∏ (a b : C) (f : ab)(i : bb), I iT f i f)
  × (∏ (a b : C) (f : ab)(i : aa), I iT i f f)).

The axioms for composition


Definition folds_ax_comp (C : folds_3_id_comp_eq) :=
     (∏ {a b c : C} (f : ab) (g : bc), ∥ ∑ h : ac, T f g h ∥ )
                                                        
 × ( (∏ {a b c : C} {f : ab} {g : bc} {h k : ac}, T f g hT f g kE h k )
                                                        
  × (∏ {a b c d : C} (f : ab) (g : bc) (h : cd) (fg : ac)
                      (gh : bd) (fg_h : ad) (f_gh : ad),
       T f g fgT g h ghT fg h fg_hT f gh f_ghE f_gh fg_h)).

A FOLDS pre-3-category is a package of

  • identity I
  • composition T
  • equality E
satisfying the categorical axioms modulo E and E is an "equality"

Definition folds_pre_3_cat := ∑ C : folds_3_id_comp_eq,
     (folds_ax_id C
    × folds_ax_comp C)
    × E_is_good_to_I_and_T C.
Definition folds_id_comp_from_folds_precat (C : folds_pre_3_cat) : folds_3_id_comp_eq := pr1 C.
Coercion folds_id_comp_from_folds_precat : folds_pre_3_cat >-> folds_3_id_comp_eq.

FOLDS-2-precategories

they are 3-precategories such that T, I and E are hProps

Definition is_folds_pre_2_cat (C : folds_pre_3_cat) :=
   ( (∏ (a : C) (i : aa), isaprop (I i))
  × (∏ (a b c : C) (f : ab) (g : bc) (h : ac), isaprop (T f g h)))
 × (∏ (a b : C) (f g : ab), isaprop (E f g)).

Definition folds_pre_2_cat : UU := ∑ C, is_folds_pre_2_cat C.

Ltac folds_pre_2_cat_props C :=
     try apply (pr2 (pr1 (pr2 C)));
     try apply (pr1 (pr1 (pr2 C)));
     try apply (pr2 (pr2 C)).

Definition folds_3_from_folds_2 (C : folds_pre_2_cat) : folds_pre_3_cat := pr1 C.
Coercion folds_3_from_folds_2 : folds_pre_2_cat >-> folds_pre_3_cat.

FOLDS-2-isomorphisms


Definition folds_iso {C: folds_pre_3_cat} {a b : C} (f g : ab) : UU :=
(((∏ (x : C) (u : xa) (v : xb), T u f vT u g v)
  × (∏ (x : C) (u : ax) (v : xb), T u v fT u v g))
 × (∏ (x : C) (u : bx) (v : ax), T f u vT g u v))
× ((((∏ (u : ab) (p : b = a), T p ## f f uT p ## g g u)
     × (∏ (u : bb) (p : a = a), T (transportf (λ a, ab) p f) u f
                                   T (transportf (λ a, ab) p g) u g))
    × ((∏ (u : aa) (p : b = b), T u p ## f fT u p ## g g)
       × (∏ (p : a = a) (q : b = a) (r : b = b),
          T (folds_double_transport p q f) r ## f f
          ≃ T (folds_double_transport p q g) r ## g g)))
   × (((∏ p : b = a, I p ## fI p ## g) × (∏ u : ab, E f uE g u))
      × ((∏ u : ab, E u fE u g)
         × (∏ (p : a = a) (q : b = b),
            E (folds_double_transport p q f) fE (folds_double_transport p q g) g)))).

Lemma isaprop_folds_2_iso (C : folds_pre_2_cat) (a b : C) (f g : ab) :
  isaprop (folds_iso f g).
Show proof.
  repeat (apply isofhleveldirprod);
  repeat (apply impred; intro);
  apply isofhlevelsnweqtohlevelsn;
  folds_pre_2_cat_props C.

Definition folds_2_iso_id (C : folds_pre_3_cat) (a b : C) (f : ab) : folds_iso f f.
Show proof.
  repeat split;
    intros; apply idweq.

In FOLDS-2-precats, folds_iso f g <-> E f g


Lemma E_transport_source : ∏ (C : folds_pre_2_cat) (a a' b : C) (f g : ab) (p : a = a'),
          E f gE (transportf (λ c, cb) p f) (transportf (λ c, cb) p g).
Show proof.
  intros. destruct p.
  assumption.

Lemma E_transport_target : ∏ (C : folds_pre_2_cat) (a b b' : C) (f g : ab) (p : b = b'),
          E f gE (transportf (λ c, ac) p f) (transportf (λ c, ac) p g).
Show proof.
  intros. destruct p.
  assumption.

Lemma E_implies_folds_iso (C : folds_pre_2_cat) (a b : C) (f g : ab) : E f gfolds_iso f g.
Show proof.
  set (H' := pr2 (pr2 (pr1 C))). simpl in H'.
  destruct H' as [[[Erefl Esym] Etrans] [EI ET]].
  intro Efg.
  repeat split; intros; apply weqimplimpl; intro; folds_pre_2_cat_props C.
  - apply (ET _ _ _ u u f g v v); auto.
  - apply (ET _ _ _ u u g f v v) ; auto.
  - apply (ET _ _ _ u u v v f g); auto.
  - apply (ET _ _ _ u u v v g f); auto.
  - apply (ET _ _ _ f g u u v v); auto.
  - apply (ET _ _ _ g f u u v v); auto.
  - destruct p;
    apply (ET _ _ _ f g f g u u); auto.
  - destruct p;
    apply (ET _ _ _ g f g f u u); auto.
  - apply (ET _ _ _ (transportf (λ c, cb) p f) (p ## g) u u f g);
    try apply E_transport_source; auto.
  - apply (ET _ _ _ (transportf (λ c, cb) p g) (p ## f) u u g f);
    try apply E_transport_source; auto.
  - apply (ET _ _ _ u u (transportf (λ c, ac) p f) (p ## g) f g);
    try apply E_transport_target; auto.
  - apply (ET _ _ _ u u (transportf (λ c, ac) p g) (p ## f) g f);
    try apply E_transport_target; auto.
  - apply (ET _ _ _ (folds_double_transport p q f) (folds_double_transport p q g)
                          (transportf (λ c, ac) r f) (r ## g) f g);
    try apply E_transport_target; try apply E_transport_source; auto.
  - apply (ET _ _ _ (folds_double_transport p q g) (folds_double_transport p q f)
                          (transportf (λ c, ac) r g) (r ## f) g f);
    try apply E_transport_target; try apply E_transport_source; auto.
  - destruct p. apply (EI _ f); auto.
  - destruct p; apply (EI _ g); auto.
  - apply (Etrans _ _ g f u).
    + apply Esym; auto.
    + auto.
  - apply (Etrans _ _ f g u); auto.
  - apply (Etrans _ _ u f g); auto.
  - apply (Etrans _ _ u g f).
    + auto.
    + apply Esym; auto.
  - apply (Etrans _ _ (folds_double_transport p q g) (folds_double_transport p q f) g).
    + apply E_transport_target. apply E_transport_source. apply Esym; auto.
    + apply (Etrans _ _ (folds_double_transport p q f) f g); auto.
  - apply (Etrans _ _ (folds_double_transport p q f) (folds_double_transport p q g) f).
    + apply E_transport_target. apply E_transport_source. auto.
    + apply (Etrans _ _ (folds_double_transport p q g) g f); auto.

Lemma folds_iso_implies_E (C : folds_pre_2_cat) (a b : C) (f g : ab) : folds_iso f gE f g.
Show proof.
  intro Isofg.
  set (keytojoy := pr1 (pr2 (pr2 (pr2 Isofg)))).
  apply (keytojoy f).
  set (H' := pr2 (pr2 (pr1 C))). simpl in H'.
  destruct H' as [[[Erefl Esym] Etrans] [EI ET]].
  apply Erefl.

Univalent FOLDS-2-precategory

satisfies isweq (idtoiso2 f g) for any f and g

Definition idtoiso2 {C : folds_pre_2_cat} {a b : C} {f g : ab} : f = gfolds_iso f g.
Show proof.
  destruct 1.
  exact (folds_2_iso_id _ _ _ f).

Definition is_univalent_folds_pre_2_cat (C : folds_pre_2_cat) : UU :=
   ∏ (a b : C) (f g : ab), isweq (@idtoiso2 _ _ _ f g).

Lemma isaprop_is_univalent_folds_2_precat (C : folds_pre_2_cat) :
   isaprop (is_univalent_folds_pre_2_cat C).
Show proof.
  do 4 (apply impred; intro);
  apply isapropisweq.

Definition isotoid2 (C : folds_pre_2_cat) (H : is_univalent_folds_pre_2_cat C)
  (a b : C) (f g : ab) : folds_iso f gf = g :=
  invmap (weqpair _ (H a b f g)).

FOLDS precategories

We define them as special FOLDS pre-2-categories, namely such that
  • hom-types are sets
  • axioms of precategory modulo identity (rather than E)

Definition is_folds_precategory (C : folds_pre_2_cat) : UU :=
     (∏ a b : C, isaset (ab))
 × ((∏ {a b c : C} {f : ab} {g : bc} {h k : ac},
                  T f g hT f g kh = k )
  × (∏ {a b c d : C} (f : ab) (g : bc) (h : cd)
                  (fg : ac) (gh : bd) (fg_h : ad) (f_gh : ad),
               T f g fgT g h gh
                  T fg h fg_hT f gh f_ghf_gh = fg_h)).
Lemma isaprop_is_folds_precategory (C : folds_pre_2_cat) : isaprop (is_folds_precategory C).
Show proof.
  apply isofhlevelsn. intro H.
  repeat (apply isofhleveldirprod).
  - do 2 (apply impred; intro).
    apply isapropisaset.
  - do 9 (apply impred; intro).
    apply (pr1 H).
  - do 15 (apply impred; intro).
    apply H.

Univalent FOLDS pre-2-category is a FOLDS precategory


Section is_univalent_implies_folds_precat.

Variable C : folds_pre_2_cat.
Hypothesis H : is_univalent_folds_pre_2_cat C.

Lemma is_univalent_implies_is_folds_precat : is_folds_precategory C.
Show proof.
  apply dirprodpair.
  - intros a b f g.
    apply (isofhlevelweqb _ (weqpair _ (H a b f g))).
    apply isaprop_folds_2_iso.
  - apply dirprodpair.
    + intros. apply (isotoid2 _ H).
      apply E_implies_folds_iso.
      set (T_unique := pr1 (pr2 (pr2 (pr1 (pr2 (pr1 C)))))).
      apply (T_unique _ _ _ f g); auto.
    + intros. apply (isotoid2 _ H).
      apply E_implies_folds_iso.
      set (T_assoc := pr2 (pr2 (pr2 (pr1 (pr2 (pr1 C)))))). simpl in T_assoc.
      apply (T_assoc _ _ _ _ f g h fg gh fg_h f_gh); auto.

End is_univalent_implies_folds_precat.

FOLDS precategory implies univalence


Section folds_precat_implies_univalent.

Variable C : folds_pre_2_cat.

Hypothesis H : is_folds_precategory C.
Hypothesis standardness : ∏ (a b : C) (f g : ab), E f gf = g.

Lemma folds_2_iso_implies_identity (a b : C) (f g : ab) : folds_iso f gf = g.
Show proof.
  intro Isofg.
  apply standardness.
  apply folds_iso_implies_E.
  apply Isofg.

Lemma is_folds_precat_implies_is_univalent : is_univalent_folds_pre_2_cat C.
Show proof.
  intros a b f g.
  apply isweqimplimpl.
  - apply folds_2_iso_implies_identity.
  - apply (pr1 H).
  - apply isaprop_folds_2_iso.

End folds_precat_implies_univalent.