Skip to content

Commit ae9cb8b

Browse files
Merge pull request #2371 from jdchristensen/isconnmap_connected
Modalities: generalize OO_conn_map_isconnected and other results
2 parents ba70898 + 713809e commit ae9cb8b

4 files changed

Lines changed: 34 additions & 16 deletions

File tree

theories/Modalities/Descent.v

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ Definition equiv_path_OO `{O' <= Sep O}
215215
: O (x = y) <~> (to O' X x = to O' X y)
216216
:= Build_Equiv _ _ (path_OO x y) _.
217217

218-
(** [functor_hfiber] on a pair of [O']-equivalences is an [O]-equivalence. *)
218+
(** [functor_hfiber] on a pair of [O']-equivalences is an [O]-equivalence. Is this true when [h] is only assumed to be an [O]-equivalence? (See strengthened version of [OO_conn_map_isconnected] below.) *)
219219
#[export] Instance OO_inverts_functor_hfiber
220220
{A B C D : Type} {f : A -> B} {g : C -> D} {h : A -> C} {k : B -> D}
221221
(p : k o f == g o h) (b : B)
@@ -244,33 +244,41 @@ Definition equiv_OO_functor_hfiber_to_O
244244
: O (hfiber f x) <~> O (hfiber (O_functor O' f) (to O' X x))
245245
:= Build_Equiv _ _ _ (OO_inverts_functor_hfiber_to_O f x).
246246

247-
(** Theorem 3.1(iii) of RSS: any map between [O']-connected types is [O]-connected. (Part (ii) is just the version for dependent projections.) *)
247+
(** Any map from an [O]-connected type to an [O']-connected type is [O]-connected. Taking [O = O'] gives Theorem 3.1(iii) of RSS. (Part (ii) is just the version for dependent projections.) *)
248248
Definition OO_conn_map_isconnected
249-
{Y X : Type} `{IsConnected O' Y, IsConnected O' X} (f : Y -> X)
249+
{Y X : Type} `{IsConnected O Y, IsConnected O' X} (f : Y -> X)
250250
: IsConnMap O f.
251251
Proof.
252-
intros x; exact (contr_equiv' _ (equiv_OO_functor_hfiber_to_O f x)^-1).
252+
intros x; unfold IsConnected.
253+
rapply (contr_equiv' (O Y)).
254+
(* By the previous result, [O] of the fiber is equivalent to [O] of the fiber of [O_functor O' f]: *)
255+
rhs' napply (equiv_OO_functor_hfiber_to_O f x).
256+
(* And [O Y] is equivalent to [O (O' Y)]: *)
257+
lhs' rapply (equiv_O_functor_to_O_O_leq O O' Y).
258+
(* Finally, since [O' X] is contractible, the fiber is the same as the domain [O' Y]. *)
259+
apply equiv_O_functor.
260+
symmetry; rapply equiv_sigma_contr.
253261
Defined.
254262

255263
Definition OO_isconnected_hfiber
256-
{Y X : Type} `{IsConnected O' Y, IsConnected O' X} (f : Y -> X) (x : X)
264+
{Y X : Type} `{IsConnected O Y, IsConnected O' X} (f : Y -> X) (x : X)
257265
: IsConnected O (hfiber f x)
258266
:= OO_conn_map_isconnected f x.
259267

260-
(** Theorem 3.1(iv) of RSS: an [O]-modal map between [O']-connected types is an equivalence. *)
268+
(** An [O]-modal map from an [O]-connected type to an [O']-connected type is an equivalence. When [O = O'], this gives Theorem 3.1(iv) of RSS. *)
261269
Definition OO_isequiv_mapino_isconnected
262-
{Y X : Type} `{IsConnected O' Y, IsConnected O' X} (f : Y -> X) `{MapIn O _ _ f}
270+
{Y X : Type} `{IsConnected O Y, IsConnected O' X} (f : Y -> X) `{MapIn O _ _ f}
263271
: IsEquiv f.
264272
Proof.
265273
apply (isequiv_conn_ino_map O).
266274
- apply OO_conn_map_isconnected.
267275
- assumption.
268276
Defined.
269277

270-
(** Theorem 3.1(vi) of RSS (and part (v) is just the analogue for dependent projections). *)
278+
(** When [O = O'], this is Theorem 3.1(vi) of RSS. (Part (v) is just the analogue for dependent projections.) *)
271279
Definition OO_conn_map_functor_hfiber {A B C D : Type}
272280
{f : A -> B} {g : C -> D} {h : A -> C} {k : B -> D}
273-
`{IsConnMap O' _ _ h, IsConnMap O' _ _ k}
281+
`{IsConnMap O _ _ h, IsConnMap O' _ _ k}
274282
(p : k o f == g o h) (b : B)
275283
: IsConnMap O (functor_hfiber p b).
276284
Proof.

theories/Modalities/ReflectiveSubuniverse.v

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2038,6 +2038,12 @@ Proof.
20382038
apply (ooextendable_O_inverts O2); exact _.
20392039
Defined.
20402040

2041+
(** In particular, we get that [O1 A] is equivalent to [O1 (O2 A)]. *)
2042+
Definition equiv_O_functor_to_O_O_leq@{i1 i2}
2043+
(O1 : ReflectiveSubuniverse@{i1}) (O2 : ReflectiveSubuniverse@{i2}) `{O_leq@{i1 i2 i1} O1 O2}
2044+
(A : Type@{i1})
2045+
: O1 A <~> O1 (O2 A)
2046+
:= Build_Equiv _ _ _ (O_inverts_O_leq O1 O2 (to O2 A)).
20412047

20422048
(** ** Equality of (reflective) subuniverses *)
20432049

theories/Truncations/Connectedness.v

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ A handy benchmark: under our indexing, the map [S1 -> 1] is 0-connected but not
2929
3030
One reason for our choice is that this way, the n-truncated and n-connected maps are the modal and modally-connected maps for the n-truncation modality. Many of the basic lemmas about connected maps are in fact true for any modality, and can be found in [Modality.v]. Thus, here we consider mainly properties that involve the interaction of connectedness at different truncation levels. *)
3131

32+
(** ** Connectedness of maps between connected types *)
33+
34+
(** If [X] is n-connected and [Y] is (n+1)-connected, then any map [X -> Y] is n-connected. *)
35+
Definition isconnmap_isconnected `{Univalence} (n : trunc_index)
36+
(X Y : Type) `{IsConnected n X} `{IsConnected n.+1 Y} (f : X -> Y)
37+
: IsConnMap n f
38+
:= OO_conn_map_isconnected (Tr n.+1) (Tr n) f.
39+
3240
(** ** Truncatedness of the type of extensions *)
3341

3442
(** A key lemma on the interaction between connectedness and truncatedness: suppose one is trying to extend along an n-connected map, into a k-truncated family of types (k ≥ n). Then the space of possible extensions is (k–n–2)-truncated.
@@ -108,11 +116,8 @@ Defined.
108116

109117
Definition conn_point_incl `{Univalence} {n : trunc_index} {A : Type} (a0:A)
110118
`{IsConnected n.+1 A}
111-
: IsConnMap n (unit_name a0).
112-
Proof.
113-
rapply (OO_cancelL_conn_map (Tr n.+1) (Tr n) (unit_name a0) (const_tt A)).
114-
apply O_lex_leq_Tr.
115-
Defined.
119+
: IsConnMap n (unit_name a0)
120+
:= OO_cancelL_conn_map (Tr n.+1) (Tr n) (unit_name a0) (const_tt A).
116121

117122
(** [conn_point_incl] can be made an instance, but at the time of writing, this doesn't cause any additional goals to be solved compared to making it an immediate hint, so we do the latter. *)
118123
#[export] Hint Immediate conn_point_incl : typeclass_instances.

theories/Truncations/SeparatedTrunc.v

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ Proof.
3030
srapply O_strong_leq_trans_l.
3131
Defined.
3232

33-
(** For some reason, this causes typeclass search to spin. *)
34-
Local Instance O_lex_leq_Tr `{Univalence} (n : trunc_index)
33+
#[export] Instance O_lex_leq_Tr `{Univalence} (n : trunc_index)
3534
: Tr n <<< Tr n.+1.
3635
Proof.
3736
intros A; unshelve econstructor; intros P' P_inO;

0 commit comments

Comments
 (0)