Skip to content

Commit f961f5b

Browse files
Added access functions for discrete fibrations, and improved some proofs (though others got slightly worse)
1 parent 3b70463 commit f961f5b

File tree

2 files changed

+102
-98
lines changed

2 files changed

+102
-98
lines changed

TypeTheory/ALV2/SplitTypeCat_ComprehensionCat.v

Lines changed: 53 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ Require Import UniMath.MoreFoundations.PartA.
4141
Require Import UniMath.Foundations.Sets.
4242
Require Import TypeTheory.Auxiliary.CategoryTheoryImports.
4343

44+
Require Import UniMath.CategoryTheory.DisplayedCats.Core.
45+
Require Import UniMath.CategoryTheory.DisplayedCats.Auxiliary.
46+
Require Import UniMath.CategoryTheory.DisplayedCats.Fibrations.
47+
Require Import UniMath.CategoryTheory.DisplayedCats.Codomain.
48+
Require Import UniMath.CategoryTheory.DisplayedCats.ComprehensionC.
49+
4450
Require Import TypeTheory.Auxiliary.Auxiliary.
4551
Require Import TypeTheory.Auxiliary.CategoryTheory.
4652
Require Import TypeTheory.Auxiliary.DisplayedCategories.
@@ -50,12 +56,6 @@ Require Import TypeTheory.ALV1.TypeCat.
5056
Require Import TypeTheory.ALV2.FullyFaithfulDispFunctor.
5157
Require Import TypeTheory.ALV2.DiscreteComprehensionCat.
5258

53-
Require Import UniMath.CategoryTheory.DisplayedCats.Core.
54-
Require Import UniMath.CategoryTheory.DisplayedCats.Auxiliary.
55-
Require Import UniMath.CategoryTheory.DisplayedCats.Fibrations.
56-
Require Import UniMath.CategoryTheory.DisplayedCats.Codomain.
57-
Require Import UniMath.CategoryTheory.DisplayedCats.ComprehensionC.
58-
5959
Section DiscreteComprehensionCatWithDefaultMor.
6060

6161
Section From_SplitTypeCat.
@@ -393,7 +393,7 @@ Section SplitTypeCat_from_DiscreteComprehensionCat.
393393
Context (DC : discrete_comprehension_cat_structure C).
394394

395395
Let D := pr1 DC : disp_cat C.
396-
Let is_discrete_fibration_D := pr1 (pr2 DC) : is_discrete_fibration D.
396+
Let isdf_D := pr1 (pr2 DC) : is_discrete_fibration D.
397397
Let FF := pr1 (pr2 (pr2 DC)) : disp_functor (functor_identity C) D (disp_codomain C).
398398
Let is_cartesian_FF := pr2 (pr2 (pr2 DC)) : is_cartesian_disp_functor FF.
399399

@@ -402,80 +402,82 @@ Section SplitTypeCat_from_DiscreteComprehensionCat.
402402
Proof.
403403
exists D.
404404
use make_dirprod.
405-
- intros Γ A. exact (pr1 (disp_functor_on_objects FF A)).
405+
- intros Γ A. exact (pr1 (FF _ A)).
406406
- intros Γ A Γ' f.
407-
exact (pr1 (pr1 (pr1 is_discrete_fibration_D Γ Γ' f A))).
407+
exact (lift_source isdf_D f A).
408408
Defined.
409409

410410
Definition typecat_structure2_from_discrete_comprehension_cat_structure
411411
: typecat_structure2 typecat_structure1_from_discrete_comprehension_cat_structure.
412412
Proof.
413413
unfold typecat_structure2.
414414
repeat use tpair.
415-
- intros Γ A. exact (pr2 (disp_functor_on_objects FF A)).
415+
- intros Γ A. exact (pr2 (FF _ A)).
416416
- intros Γ A Γ' f.
417-
set (k := pr2 (pr1 (pr1 is_discrete_fibration_D Γ Γ' f A))
418-
: A {{f}} -->[f] A).
419-
apply (pr1 (disp_functor_on_morphisms FF k)).
417+
set (k := lift isdf_D f A : A {{f}} -->[f] A).
418+
apply (pr1 (# FF k)%mor_disp).
420419
- intros Γ A Γ' f. simpl.
421-
set (k := pr2 (pr1 (pr1 is_discrete_fibration_D Γ Γ' f A))
422-
: A {{f}} -->[f] A).
423-
apply (pr2 (disp_functor_on_morphisms FF k)).
420+
refine (pr2 (# FF _)%mor_disp).
424421
- simpl. intros Γ A Γ' f.
425422
apply is_symmetric_isPullback.
426423
use cartesian_isPullback_in_cod_disp.
427424
apply is_cartesian_FF.
428-
apply (unique_lift_is_cartesian (D := (_ ,, is_discrete_fibration_D)) f A).
425+
apply (unique_lift_is_cartesian (D := (_ ,, isdf_D)) f A).
429426
Defined.
430427

431428
Definition typecat_structure_from_discrete_comprehension_cat_structure
432429
: typecat_structure C
433430
:= (_ ,, typecat_structure2_from_discrete_comprehension_cat_structure).
434431

432+
Arguments unique_lift : simpl never. (* TODO: upstream *)
433+
435434
Definition is_split_typecat_from_discrete_comprehension_cat_structure
436435
: is_split_typecat typecat_structure_from_discrete_comprehension_cat_structure.
437436
Proof.
438437
repeat use make_dirprod.
439-
- apply (pr2 is_discrete_fibration_D).
438+
- apply (pr2 isdf_D).
440439
- use tpair.
441-
+ intros Γ A.
442-
set (p := pr2 (pr1 is_discrete_fibration_D Γ Γ (identity Γ) A)).
443-
apply (maponpaths pr1 (! p (A ,, id_disp A))).
444-
445-
+ intros Γ A. cbn.
446-
induction (! unique_lift_id is_discrete_fibration_D A).
447-
etrans. apply maponpaths, (disp_functor_id FF A). simpl.
440+
+ intros Γ A.
441+
set (p := unique_lift isdf_D (identity _) A).
442+
apply (maponpaths pr1 (! pr2 p (A ,, id_disp A))).
443+
+ unfold q_typecat; simpl.
444+
unfold reind_typecat, ext_typecat; simpl.
445+
unfold lift_source, lift.
446+
intros Γ A.
447+
set (e := ! unique_lift_id isdf_D A).
448+
set (p := unique_lift isdf_D (identity Γ) A) in *.
449+
induction e.
450+
etrans. { simpl. apply maponpaths, (disp_functor_id FF A). }
448451
apply pathsinv0.
449-
etrans. apply maponpaths, maponpaths, maponpaths, maponpaths, maponpaths.
450-
apply pathsinv0r. simpl.
452+
etrans. { cbn. do 5 (apply maponpaths).
453+
unfold pathssec2, pathssec1; cbn.
454+
etrans. { apply maponpaths_2, pathscomp0rid. }
455+
apply pathsinv0l. }
451456
apply idpath.
452-
453457
- use tpair.
454458
+ intros Γ A Γ' f Γ'' g.
455-
456-
set (A'ff := pr1 is_discrete_fibration_D _ _ f A).
457-
set (ff := pr2 (pr1 A'ff) : (A {{f}}) -->[f] A).
458-
set (A''gg := pr1 is_discrete_fibration_D _ _ g (A {{f}})).
459-
set (gg := pr2 (pr1 A''gg) : ((A {{f}}) {{g}}) -->[g] A {{f}}).
460-
461-
set (p := pr2 (pr1 is_discrete_fibration_D _ _ (g ;; f) A)).
462-
apply (maponpaths pr1 (! p ((A {{f}}) {{g}} ,, (gg ;; ff)%mor_disp))).
463-
459+
set (p := unique_lift isdf_D (g ;; f) A).
460+
set (ff := lift isdf_D f A : A {{f}} -->[f] A).
461+
set (gg := lift isdf_D g _ : (A {{f}}) {{g}} -->[g] A {{f}}).
462+
exact (maponpaths pr1 (! pr2 p ((A {{f}}) {{g}} ,, (gg ;; ff)%mor_disp))).
464463
+ intros Γ A Γ' f Γ'' g. cbn.
465-
induction (! unique_lift_comp is_discrete_fibration_D f g A).
466-
set (A'ff := pr1 (pr1 is_discrete_fibration_D _ _ f A)).
467-
set (A' := pr1 A'ff).
468-
set (ff := pr2 A'ff).
469-
set (gg := pr2 (pr1 (pr1 is_discrete_fibration_D _ _ g A'))).
470-
etrans. apply maponpaths, (disp_functor_comp FF gg ff).
471-
simpl.
472-
apply maponpaths_2.
473-
etrans. apply pathsinv0, id_left.
474-
apply maponpaths_2.
475-
476-
apply pathsinv0.
477-
etrans. apply maponpaths, maponpaths, maponpaths, maponpaths, maponpaths.
478-
apply pathsinv0r. simpl.
464+
unfold q_typecat; simpl.
465+
unfold reind_typecat, ext_typecat; simpl.
466+
unfold lift_source, lift.
467+
induction (! unique_lift_comp isdf_D f g A).
468+
cbn.
469+
set (ff := lift isdf_D f A : _ -->[f] A).
470+
set (fA := lift_source isdf_D f A) in *.
471+
set (gg := lift isdf_D g fA : _ -->[g] fA).
472+
set (gfA := lift_source isdf_D g fA) in *.
473+
etrans. { apply maponpaths, (disp_functor_comp FF gg ff). }
474+
cbn. apply maponpaths_2.
475+
etrans. { apply pathsinv0, id_left. }
476+
apply maponpaths_2, pathsinv0.
477+
etrans. { do 5 (apply maponpaths).
478+
unfold pathssec2, pathssec1; cbn.
479+
etrans. { apply maponpaths_2, pathscomp0rid. }
480+
apply pathsinv0l. }
479481
apply idpath.
480482
Defined.
481483

TypeTheory/Auxiliary/DisplayedCategories.v

Lines changed: 49 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -136,15 +136,44 @@ End Displayed_Equivalences.
136136

137137
Section Discrete_Fibrations.
138138

139+
(* Some access functions missing upstream *)
140+
Definition make_discrete_fibration {C} {D} (H : is_discrete_fibration D)
141+
: discrete_fibration C := (D,,H).
142+
143+
Coercion discrete_fibration_property {C} {D : discrete_fibration C}
144+
: is_discrete_fibration D := pr2 D.
145+
146+
(* arguments tweaked from upstream version, for easier applicability *)
147+
Definition unique_lift {C} {D : disp_cat C} (H_D : is_discrete_fibration D)
148+
{c c'} (f : c' --> c) (d : D c)
149+
: ∃! d' : D c', d' -->[f] d
150+
:= pr1 H_D c c' f d.
151+
152+
Definition lift_source {C} {D : disp_cat C} (H_D : is_discrete_fibration D)
153+
{c c'} (f : c' --> c) (d : D c)
154+
: D c'
155+
:= pr1 (iscontrpr1 (unique_lift H_D f d)).
156+
157+
Definition lift {C} {D : disp_cat C} (H_D : is_discrete_fibration D)
158+
{c c'} (f : c' --> c) (d : D c)
159+
: lift_source H_D f d -->[f] d
160+
:= pr2 (iscontrpr1 (unique_lift H_D f d)).
161+
162+
Definition isaset_fiber_is_discrete_fibration
163+
{C} {D : disp_cat C} (H_D : is_discrete_fibration D) (c : C)
164+
: isaset (D c)
165+
:= pr2 H_D c.
166+
139167
Definition unique_lift_is_cartesian
140168
{C : category}
141169
{D : discrete_fibration C} {c c'}
142170
(f : c' --> c) (d : D c)
143-
: is_cartesian (pr2 (pr1 (unique_lift f d))).
171+
: is_cartesian (pr2 (pr1 (unique_lift D f d))).
144172
Proof.
145-
apply (pr2 (pr2 (fibration_from_discrete_fibration _ D _ _ f d))).
173+
apply (pr2 (pr2 (fibration_from_discrete_fibration _ D _ _ _ _))).
146174
Defined.
147175

176+
(* useful for situations when a particularly canonical lift is known *)
148177
Definition unique_lift_explicit
149178
{C : category}
150179
{D : disp_cat C}
@@ -154,8 +183,7 @@ Section Discrete_Fibrations.
154183
Proof.
155184
exists (d' ,, ff).
156185
intros X.
157-
etrans. apply (pr2 (pr1 is_discrete_fibration_D _ _ f d)).
158-
apply pathsinv0, (pr2 (pr1 is_discrete_fibration_D _ _ f d)).
186+
apply isapropifcontr, unique_lift, is_discrete_fibration_D.
159187
Defined.
160188

161189
Definition unique_lift_explicit_eq
@@ -185,7 +213,7 @@ Section Discrete_Fibrations.
185213
{D : disp_cat C}
186214
(is_discrete_fibration_D : is_discrete_fibration D) {c}
187215
(d : D c)
188-
: pr1 is_discrete_fibration_D _ _ (identity c) d
216+
: unique_lift is_discrete_fibration_D (identity c) d
189217
= unique_lift_identity is_discrete_fibration_D d.
190218
Proof.
191219
apply isapropiscontr.
@@ -199,14 +227,8 @@ Section Discrete_Fibrations.
199227
(d : D c)
200228
: ∃! (d'' : D c''), d'' -->[g ;; f] d.
201229
Proof.
202-
set (d'ff := pr1 is_discrete_fibration_D _ _ f d).
203-
set (d' := pr1 (pr1 d'ff)).
204-
set (ff := pr2 (pr1 d'ff)).
205-
set (d''gg := pr1 is_discrete_fibration_D _ _ g d').
206-
set (d'' := pr1 (pr1 d''gg)).
207-
set (gg := pr2 (pr1 d''gg)).
208-
209-
use (unique_lift_explicit is_discrete_fibration_D d'' (gg ;; ff)%mor_disp).
230+
eapply unique_lift_explicit; try assumption.
231+
refine (_;;_)%mor_disp; apply (lift is_discrete_fibration_D).
210232
Defined.
211233

212234
Definition unique_lift_comp
@@ -215,7 +237,7 @@ Section Discrete_Fibrations.
215237
(is_discrete_fibration_D : is_discrete_fibration D) {c c' c''}
216238
(f : c' --> c) (g : c'' --> c')
217239
(d : D c)
218-
: pr1 is_discrete_fibration_D _ _ (g ;; f) d
240+
: unique_lift is_discrete_fibration_D (g ;; f) d
219241
= unique_lift_compose is_discrete_fibration_D f g d.
220242
Proof.
221243
apply isapropiscontr.
@@ -226,28 +248,23 @@ Section Discrete_Fibrations.
226248
{D : disp_cat C}
227249
(is_discrete_fibration_D : is_discrete_fibration D) {c c'}
228250
(f : c' --> c) (d : D c) (d' : D c')
229-
: (d' -->[f] d) ≃ (pr1 (pr1 (pr1 is_discrete_fibration_D c c' f d)) = d').
251+
: (d' -->[f] d) ≃ (lift_source is_discrete_fibration_D f d = d').
230252
Proof.
231-
set (uf := pr1 is_discrete_fibration_D c c' f d).
253+
set (uf := unique_lift is_discrete_fibration_D f d).
232254
use weq_iso.
233255
- intros ff. apply (maponpaths pr1 (! pr2 uf (d' ,, ff))).
234256
- intros p. apply (transportf _ p (pr2 (pr1 uf))).
235257
- intros ff. simpl.
236-
induction (! unique_lift_explicit_eq is_discrete_fibration_D d' ff
237-
: unique_lift_explicit _ d' ff = uf).
238-
simpl.
239-
etrans. apply maponpaths_2, maponpaths, maponpaths.
240-
apply pathsinv0r.
241-
apply idpath.
242-
- intros ?. apply (pr2 is_discrete_fibration_D).
258+
refine (@fiber_paths _ (λ d'', d'' -->[ f] d) _ (_,,_) _).
259+
- intros ?. apply isaset_fiber_is_discrete_fibration; assumption.
243260
Defined.
244261

245262
Definition discrete_fibration_mor
246263
{C : category}
247264
{D : disp_cat C}
248265
(is_discrete_fibration_D : is_discrete_fibration D) {c c'}
249266
(f : c' --> c) (d : D c) (d' : D c')
250-
: (d' -->[f] d) = (pr1 (pr1 (pr1 is_discrete_fibration_D c c' f d)) = d').
267+
: (d' -->[f] d) = (lift_source is_discrete_fibration_D f d = d').
251268
Proof.
252269
apply univalenceweq.
253270
apply discrete_fibration_mor_weq.
@@ -260,8 +277,8 @@ Section Discrete_Fibrations.
260277
(f : c' --> c) (d : D c) (d' : D c')
261278
: isaprop (d' -->[f] d).
262279
Proof.
263-
induction (! discrete_fibration_mor is_discrete_fibration_D f d d').
264-
apply (pr2 is_discrete_fibration_D).
280+
eapply isofhlevelweqb. { use discrete_fibration_mor_weq; assumption. }
281+
apply isaset_fiber_is_discrete_fibration; eassumption.
265282
Qed.
266283

267284
Definition isaprop_disp_id_comp_of_discrete_fibration
@@ -271,22 +288,10 @@ Section Discrete_Fibrations.
271288
: isaprop (disp_cat_id_comp C D).
272289
Proof.
273290
use isapropdirprod.
274-
- apply impred_isaprop. intros ?.
275-
apply impred_isaprop. intros ?.
276-
apply isaprop_mor_disp_of_discrete_fibration.
277-
apply is_discrete_fibration_D.
278-
- apply impred_isaprop. intros ?.
279-
apply impred_isaprop. intros ?.
280-
apply impred_isaprop. intros ?.
281-
apply impred_isaprop. intros ?.
282-
apply impred_isaprop. intros ?.
283-
apply impred_isaprop. intros ?.
284-
apply impred_isaprop. intros ?.
285-
apply impred_isaprop. intros ?.
286-
apply impred_isaprop. intros ?.
287-
apply impred_isaprop. intros ?.
288-
apply isaprop_mor_disp_of_discrete_fibration.
289-
apply is_discrete_fibration_D.
291+
- repeat (apply impred_isaprop; intro).
292+
apply isaprop_mor_disp_of_discrete_fibration; assumption.
293+
- repeat (apply impred_isaprop; intro).
294+
apply isaprop_mor_disp_of_discrete_fibration; assumption.
290295
Qed.
291296

292297
Definition isaprop_is_discrete_fibration
@@ -295,12 +300,9 @@ Section Discrete_Fibrations.
295300
: isaprop (is_discrete_fibration D).
296301
Proof.
297302
use isapropdirprod.
298-
- apply impred_isaprop. intros ?.
299-
apply impred_isaprop. intros ?.
300-
apply impred_isaprop. intros ?.
301-
apply impred_isaprop. intros ?.
303+
- repeat (apply impred_isaprop; intro).
302304
apply isapropiscontr.
303-
- apply impred_isaprop. intros ?.
305+
- apply impred_isaprop; intro.
304306
apply isapropisaset.
305307
Qed.
306308

0 commit comments

Comments
 (0)