Library UniMath.CategoryTheory.limits.cones
Require Import UniMath.Foundations.PartD.
Require Import UniMath.Foundations.Propositions.
Require Import UniMath.Foundations.Sets.
Require Import UniMath.MoreFoundations.PartA.
Require Import UniMath.CategoryTheory.Core.Categories.
Require Import UniMath.CategoryTheory.Core.Isos.
Require Import UniMath.CategoryTheory.Core.Univalence.
Require Import UniMath.CategoryTheory.Core.Functors.
Local Open Scope cat.
Section Cone.
Variables J : precategory.
Variable C : category.
Variable F : functor J C.
Definition ConeData : UU := ∑ a : C, ∏ j : J, a --> F j.
Definition ConeTop (a : ConeData) : C := pr1 a.
Definition ConeMor (a : ConeData) (j : J) : ConeTop a --> F j := (pr2 a) j.
Lemma eq_ConeData_eq (a b : ConeData) (p q : a = b) :
base_paths _ _ p = base_paths _ _ q -> p = q.
Show proof.
Definition ConeProp (a : ConeData) :=
∏ j j' (f : j --> j'), ConeMor a j · #F f = ConeMor a j'.
Lemma isaprop_ConeProp (a : ConeData) : isaprop (ConeProp a).
Show proof.
Definition Cone := total2 (λ a : ConeData, ConeProp a).
Definition ConeData_from_Cone : Cone -> ConeData := λ a, pr1 a.
Lemma eq_Cone_eq (a b : Cone) (p q : a = b) :
base_paths _ _ (base_paths _ _ p) =
base_paths _ _ (base_paths _ _ q) -> p = q.
Show proof.
Coercion ConeData_from_Cone : Cone >-> ConeData.
Definition ConeProp_from_Cone (a : Cone) : ConeProp a := pr2 a.
Coercion ConeProp_from_Cone : Cone >-> ConeProp.
Lemma cone_prop (a : Cone) :
∏ j j' (f : j --> j'), ConeMor a j · #F f = ConeMor a j'.
Show proof.
Definition Cone_eq (a b : Cone) : pr1 a = pr1 b -> a = b.
Show proof.
Definition Cone_Mor (M N : Cone) :=
total2 (fun f : ConeTop M --> ConeTop N =>
∏ j : J, f · ConeMor N j = ConeMor M j).
Lemma isaset_Cone_Mor (M N : Cone) : isaset (Cone_Mor M N).
Show proof.
Definition ConeConnect {M N : Cone} (f : Cone_Mor M N) :
ConeTop M --> ConeTop N := pr1 f.
Lemma Cone_Mor_eq (M N : Cone) (f g : Cone_Mor M N) :
ConeConnect f = ConeConnect g -> f = g.
Show proof.
Lemma cone_mor_prop M N (f : Cone_Mor M N) :
∏ j : J, ConeConnect f · ConeMor N j = ConeMor M j.
Show proof.
Definition Cone_id (A : Cone) : Cone_Mor A A.
Show proof.
Definition Cone_comp (A B D : Cone) (f : Cone_Mor A B)
(g : Cone_Mor B D) : Cone_Mor A D.
Show proof.
Definition Cone_precategory_ob_mor : precategory_ob_mor :=
make_precategory_ob_mor Cone
(λ a b, Cone_Mor a b).
Definition Cone_precategory_data : precategory_data.
Show proof.
Lemma is_precategory_Cone : is_precategory Cone_precategory_data.
Show proof.
Definition CONEpre : precategory := tpair _ _ is_precategory_Cone.
Lemma has_homsets_CONEpre : has_homsets CONEpre.
Show proof.
Definition CONE : category := CONEpre ,, has_homsets_CONEpre.
Definition iso_projects_from_CONE (a b : CONE) (f : z_iso a b) :
is_z_isomorphism (ConeConnect (pr1 f)).
Show proof.
Definition ConeConnectIso {a b : CONE} (f : z_iso a b) :
z_iso (ConeTop (pr1 a)) (ConeTop (pr1 b)) :=
tpair _ _ (iso_projects_from_CONE a b f).
Lemma ConeConnectIso_identity_iso (a : CONE) :
ConeConnectIso (identity_z_iso a) = identity_z_iso _ .
Show proof.
Lemma ConeConnectIso_inj (a b : CONE) (f g : z_iso a b) :
ConeConnectIso f = ConeConnectIso g -> f = g.
Show proof.
Lemma inv_from_iso_ConeConnectIso (a b : CONE) (f : z_iso a b):
pr1 (inv_from_z_iso f) = inv_from_z_iso (ConeConnectIso f).
Show proof.
End Cone.
Arguments CONE [J C].
Arguments ConeConnect [J C].
Section CONE_category.
Variable J : precategory.
Variable C : category.
Variable F : functor J C.
Hypothesis is_cat_C : is_univalent C.
Definition isotoid_CONE_pr1 (a b : CONE F) : z_iso a b -> pr1 a = pr1 b.
Show proof.
Definition isotoid_CONE {a b : CONE F} : z_iso a b -> a = b.
Show proof.
Lemma eq_CONE_pr1 (M N : CONE F) (p q : M = N) : base_paths _ _ p = base_paths _ _ q -> p = q.
Show proof.
Lemma base_paths_isotoid_CONE (M : CONE F):
base_paths (pr1 M) (pr1 M)
(base_paths M M (isotoid_CONE (identity_z_iso M))) =
base_paths (pr1 M) (pr1 M) (idpath (pr1 M)).
Show proof.
Lemma isotoid_CONE_idtoiso (M N : CONE F) : ∏ p : M = N, isotoid_CONE (idtoiso p) = p.
Show proof.
Lemma ConeConnect_idtoiso (M N : CONE F) (p : M = N):
ConeConnect _ _ _ (pr1 (idtoiso p)) = idtoiso ((base_paths _ _ (base_paths _ _ p))).
Show proof.
Lemma idtoiso_isotoid_CONE (M N : CONE F) : ∏ f : z_iso M N, idtoiso (isotoid_CONE f) = f.
Show proof.
Lemma is_univalent_CONE : is_univalent (CONE F).
Show proof.
End CONE_category.
Require Import UniMath.Foundations.Propositions.
Require Import UniMath.Foundations.Sets.
Require Import UniMath.MoreFoundations.PartA.
Require Import UniMath.CategoryTheory.Core.Categories.
Require Import UniMath.CategoryTheory.Core.Isos.
Require Import UniMath.CategoryTheory.Core.Univalence.
Require Import UniMath.CategoryTheory.Core.Functors.
Local Open Scope cat.
Section Cone.
Variables J : precategory.
Variable C : category.
Variable F : functor J C.
Definition ConeData : UU := ∑ a : C, ∏ j : J, a --> F j.
Definition ConeTop (a : ConeData) : C := pr1 a.
Definition ConeMor (a : ConeData) (j : J) : ConeTop a --> F j := (pr2 a) j.
Lemma eq_ConeData_eq (a b : ConeData) (p q : a = b) :
base_paths _ _ p = base_paths _ _ q -> p = q.
Show proof.
intro H.
apply (eq_equalities_between_pairs _ _ _ _ _ _ H).
apply uip.
apply (impred 2); intro j.
apply C.
apply (eq_equalities_between_pairs _ _ _ _ _ _ H).
apply uip.
apply (impred 2); intro j.
apply C.
Definition ConeProp (a : ConeData) :=
∏ j j' (f : j --> j'), ConeMor a j · #F f = ConeMor a j'.
Lemma isaprop_ConeProp (a : ConeData) : isaprop (ConeProp a).
Show proof.
Definition Cone := total2 (λ a : ConeData, ConeProp a).
Definition ConeData_from_Cone : Cone -> ConeData := λ a, pr1 a.
Lemma eq_Cone_eq (a b : Cone) (p q : a = b) :
base_paths _ _ (base_paths _ _ p) =
base_paths _ _ (base_paths _ _ q) -> p = q.
Show proof.
intro H.
assert (H2 : base_paths _ _ p = base_paths _ _ q).
apply eq_ConeData_eq.
apply H.
apply (eq_equalities_between_pairs _ _ _ _ _ _ H2).
apply uip.
apply isasetaprop.
apply isaprop_ConeProp.
assert (H2 : base_paths _ _ p = base_paths _ _ q).
apply eq_ConeData_eq.
apply H.
apply (eq_equalities_between_pairs _ _ _ _ _ _ H2).
apply uip.
apply isasetaprop.
apply isaprop_ConeProp.
Coercion ConeData_from_Cone : Cone >-> ConeData.
Definition ConeProp_from_Cone (a : Cone) : ConeProp a := pr2 a.
Coercion ConeProp_from_Cone : Cone >-> ConeProp.
Lemma cone_prop (a : Cone) :
∏ j j' (f : j --> j'), ConeMor a j · #F f = ConeMor a j'.
Show proof.
Definition Cone_eq (a b : Cone) : pr1 a = pr1 b -> a = b.
Show proof.
Definition Cone_Mor (M N : Cone) :=
total2 (fun f : ConeTop M --> ConeTop N =>
∏ j : J, f · ConeMor N j = ConeMor M j).
Lemma isaset_Cone_Mor (M N : Cone) : isaset (Cone_Mor M N).
Show proof.
Definition ConeConnect {M N : Cone} (f : Cone_Mor M N) :
ConeTop M --> ConeTop N := pr1 f.
Lemma Cone_Mor_eq (M N : Cone) (f g : Cone_Mor M N) :
ConeConnect f = ConeConnect g -> f = g.
Show proof.
Lemma cone_mor_prop M N (f : Cone_Mor M N) :
∏ j : J, ConeConnect f · ConeMor N j = ConeMor M j.
Show proof.
Definition Cone_id (A : Cone) : Cone_Mor A A.
Show proof.
Definition Cone_comp (A B D : Cone) (f : Cone_Mor A B)
(g : Cone_Mor B D) : Cone_Mor A D.
Show proof.
exists (ConeConnect f · ConeConnect g).
intro j.
rewrite <- assoc.
rewrite cone_mor_prop.
rewrite cone_mor_prop.
apply idpath.
intro j.
rewrite <- assoc.
rewrite cone_mor_prop.
rewrite cone_mor_prop.
apply idpath.
Definition Cone_precategory_ob_mor : precategory_ob_mor :=
make_precategory_ob_mor Cone
(λ a b, Cone_Mor a b).
Definition Cone_precategory_data : precategory_data.
Show proof.
Lemma is_precategory_Cone : is_precategory Cone_precategory_data.
Show proof.
repeat split; simpl.
intros;
apply Cone_Mor_eq;
simpl; apply id_left.
intros;
apply Cone_Mor_eq;
simpl; apply id_right.
intros;
apply Cone_Mor_eq;
simpl; apply assoc.
intros;
apply Cone_Mor_eq;
simpl; apply assoc'.
intros;
apply Cone_Mor_eq;
simpl; apply id_left.
intros;
apply Cone_Mor_eq;
simpl; apply id_right.
intros;
apply Cone_Mor_eq;
simpl; apply assoc.
intros;
apply Cone_Mor_eq;
simpl; apply assoc'.
Definition CONEpre : precategory := tpair _ _ is_precategory_Cone.
Lemma has_homsets_CONEpre : has_homsets CONEpre.
Show proof.
Definition CONE : category := CONEpre ,, has_homsets_CONEpre.
Definition iso_projects_from_CONE (a b : CONE) (f : z_iso a b) :
is_z_isomorphism (ConeConnect (pr1 f)).
Show proof.
set (T:=z_iso_inv_after_z_iso f).
set (T':=z_iso_after_z_iso_inv f).
exists (ConeConnect (inv_from_z_iso f)).
split; simpl.
- apply (base_paths _ _ T).
- apply (base_paths _ _ T').
set (T':=z_iso_after_z_iso_inv f).
exists (ConeConnect (inv_from_z_iso f)).
split; simpl.
- apply (base_paths _ _ T).
- apply (base_paths _ _ T').
Definition ConeConnectIso {a b : CONE} (f : z_iso a b) :
z_iso (ConeTop (pr1 a)) (ConeTop (pr1 b)) :=
tpair _ _ (iso_projects_from_CONE a b f).
Lemma ConeConnectIso_identity_iso (a : CONE) :
ConeConnectIso (identity_z_iso a) = identity_z_iso _ .
Show proof.
Lemma ConeConnectIso_inj (a b : CONE) (f g : z_iso a b) :
ConeConnectIso f = ConeConnectIso g -> f = g.
Show proof.
Lemma inv_from_iso_ConeConnectIso (a b : CONE) (f : z_iso a b):
pr1 (inv_from_z_iso f) = inv_from_z_iso (ConeConnectIso f).
Show proof.
End Cone.
Arguments CONE [J C].
Arguments ConeConnect [J C].
Section CONE_category.
Variable J : precategory.
Variable C : category.
Variable F : functor J C.
Hypothesis is_cat_C : is_univalent C.
Definition isotoid_CONE_pr1 (a b : CONE F) : z_iso a b -> pr1 a = pr1 b.
Show proof.
intro f.
apply (total2_paths_f (isotoid _ is_cat_C (ConeConnectIso _ _ _ f))).
intermediate_path ((λ c : J,
idtoiso (!isotoid C is_cat_C (ConeConnectIso _ _ _ f))· pr2 (pr1 a) c)).
apply transportf_isotoid_dep'.
apply funextsec.
intro t.
intermediate_path (idtoiso (isotoid C is_cat_C (z_iso_inv_from_z_iso (ConeConnectIso _ _ _ f)))·
pr2 (pr1 a) t).
apply cancel_postcomposition.
apply maponpaths. apply maponpaths.
apply inv_isotoid.
intermediate_path (z_iso_inv_from_z_iso (ConeConnectIso _ _ _ f)· pr2 (pr1 a) t).
apply cancel_postcomposition.
set (H := idtoiso_isotoid _ is_cat_C _ _ (z_iso_inv_from_z_iso (ConeConnectIso _ _ _ f))).
simpl in *.
apply (base_paths _ _ H).
simpl.
set (T':= inv_from_z_iso f).
set (T:=pr2 (inv_from_z_iso f) t).
simpl in *.
rewrite <- inv_from_iso_ConeConnectIso.
apply T.
apply (total2_paths_f (isotoid _ is_cat_C (ConeConnectIso _ _ _ f))).
intermediate_path ((λ c : J,
idtoiso (!isotoid C is_cat_C (ConeConnectIso _ _ _ f))· pr2 (pr1 a) c)).
apply transportf_isotoid_dep'.
apply funextsec.
intro t.
intermediate_path (idtoiso (isotoid C is_cat_C (z_iso_inv_from_z_iso (ConeConnectIso _ _ _ f)))·
pr2 (pr1 a) t).
apply cancel_postcomposition.
apply maponpaths. apply maponpaths.
apply inv_isotoid.
intermediate_path (z_iso_inv_from_z_iso (ConeConnectIso _ _ _ f)· pr2 (pr1 a) t).
apply cancel_postcomposition.
set (H := idtoiso_isotoid _ is_cat_C _ _ (z_iso_inv_from_z_iso (ConeConnectIso _ _ _ f))).
simpl in *.
apply (base_paths _ _ H).
simpl.
set (T':= inv_from_z_iso f).
set (T:=pr2 (inv_from_z_iso f) t).
simpl in *.
rewrite <- inv_from_iso_ConeConnectIso.
apply T.
Definition isotoid_CONE {a b : CONE F} : z_iso a b -> a = b.
Show proof.
Lemma eq_CONE_pr1 (M N : CONE F) (p q : M = N) : base_paths _ _ p = base_paths _ _ q -> p = q.
Show proof.
intro H.
simpl in *.
apply (eq_equalities_between_pairs _ _ _ _ _ _ H).
apply proofirrelevancecontr.
apply isaprop_ConeProp.
simpl in *.
apply (eq_equalities_between_pairs _ _ _ _ _ _ H).
apply proofirrelevancecontr.
apply isaprop_ConeProp.
Lemma base_paths_isotoid_CONE (M : CONE F):
base_paths (pr1 M) (pr1 M)
(base_paths M M (isotoid_CONE (identity_z_iso M))) =
base_paths (pr1 M) (pr1 M) (idpath (pr1 M)).
Show proof.
intermediate_path (base_paths (pr1 M) (pr1 M) (isotoid_CONE_pr1 M M (identity_z_iso M))).
unfold Cone_eq.
apply maponpaths.
apply base_total2_paths.
intermediate_path (isotoid C is_cat_C (ConeConnectIso _ _ _ (identity_z_iso M))).
unfold isotoid_CONE_pr1.
apply base_total2_paths.
intermediate_path (isotoid C is_cat_C (identity_z_iso (ConeTop _ _ _ (pr1 M)))).
apply maponpaths, ConeConnectIso_identity_iso.
apply isotoid_identity_iso.
unfold Cone_eq.
apply maponpaths.
apply base_total2_paths.
intermediate_path (isotoid C is_cat_C (ConeConnectIso _ _ _ (identity_z_iso M))).
unfold isotoid_CONE_pr1.
apply base_total2_paths.
intermediate_path (isotoid C is_cat_C (identity_z_iso (ConeTop _ _ _ (pr1 M)))).
apply maponpaths, ConeConnectIso_identity_iso.
apply isotoid_identity_iso.
Lemma isotoid_CONE_idtoiso (M N : CONE F) : ∏ p : M = N, isotoid_CONE (idtoiso p) = p.
Show proof.
Lemma ConeConnect_idtoiso (M N : CONE F) (p : M = N):
ConeConnect _ _ _ (pr1 (idtoiso p)) = idtoiso ((base_paths _ _ (base_paths _ _ p))).
Show proof.
Lemma idtoiso_isotoid_CONE (M N : CONE F) : ∏ f : z_iso M N, idtoiso (isotoid_CONE f) = f.
Show proof.
intro f.
apply z_iso_eq.
apply Cone_Mor_eq.
etrans; [apply ConeConnect_idtoiso |].
unfold isotoid_CONE.
unfold Cone_eq.
rewrite base_total2_paths.
unfold isotoid_CONE_pr1.
rewrite base_total2_paths.
simpl.
rewrite idtoiso_isotoid.
apply idpath.
apply z_iso_eq.
apply Cone_Mor_eq.
etrans; [apply ConeConnect_idtoiso |].
unfold isotoid_CONE.
unfold Cone_eq.
rewrite base_total2_paths.
unfold isotoid_CONE_pr1.
rewrite base_total2_paths.
simpl.
rewrite idtoiso_isotoid.
apply idpath.
Lemma is_univalent_CONE : is_univalent (CONE F).
Show proof.
intros a b.
apply (isweq_iso _ (@isotoid_CONE a b)).
apply isotoid_CONE_idtoiso.
apply idtoiso_isotoid_CONE.
apply (isweq_iso _ (@isotoid_CONE a b)).
apply isotoid_CONE_idtoiso.
apply idtoiso_isotoid_CONE.
End CONE_category.