Skip to content

Commit f08ef4b

Browse files
authored
Merge pull request #1845 from Alizter/ps/branch/pinch_map_of_suspension
pinch map of suspension
2 parents 0b9458a + 3f26a1a commit f08ef4b

File tree

1 file changed

+159
-6
lines changed

1 file changed

+159
-6
lines changed

theories/Homotopy/Wedge.v

Lines changed: 159 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
Require Import Basics Types.
2-
Require Import Pointed.Core.
2+
Require Import Pointed.Core Pointed.pSusp.
33
Require Import Colimits.Pushout.
44
Require Import WildCat.
5+
Require Import Homotopy.Suspension.
56

67
(* Here we define the Wedge sum of two pointed types *)
78

@@ -37,10 +38,15 @@ Proof.
3738
- snrapply Pushout_rec.
3839
+ exact f.
3940
+ exact g.
40-
+ by pelim f g.
41+
+ intro.
42+
exact (point_eq f @ (point_eq g)^).
4143
- exact (point_eq f).
4244
Defined.
4345

46+
Definition wedge_rec_beta_wglue {X Y Z : pType} (f : X $-> Z) (g : Y $-> Z)
47+
: ap (wedge_rec f g) wglue = point_eq f @ (point_eq g)^
48+
:= Pushout_rec_beta_pglue _ f g _ tt.
49+
4450
Definition wedge_pr1 {X Y : pType} : X \/ Y $-> X
4551
:= wedge_rec pmap_idmap pconst.
4652

@@ -51,7 +57,7 @@ Definition wedge_incl {X Y : pType} : X \/ Y -> X * Y
5157
:= pprod_corec _ wedge_pr1 wedge_pr2.
5258

5359
(** 1-universal property of wedge. *)
54-
(** TODO: remove rewrites. For some reason pelim is not able to immediately abstract the goal so some shuffling around is necessery. *)
60+
(** TODO: remove rewrites. For some reason pelim is not able to immediately abstract the goal so some shuffling around is necessary. *)
5561
Lemma wedge_up X Y Z (f g : X \/ Y $-> Z)
5662
: f $o wedge_inl $== g $o wedge_inl
5763
-> f $o wedge_inr $== g $o wedge_inr
@@ -101,15 +107,47 @@ Proof.
101107
apply moveL_pV.
102108
apply moveR_Vp.
103109
refine (Pushout_rec_beta_pglue _ f g _ _ @ _).
104-
simpl.
110+
simpl.
105111
by pelim f g.
106112
- intros Z f g p q.
107113
by apply wedge_up.
108114
Defined.
109115

116+
(** *** Lemmas about wedge functions *)
117+
118+
Lemma wedge_pr1_inl {X Y} : wedge_pr1 $o (@wedge_inl X Y) $== pmap_idmap.
119+
Proof.
120+
reflexivity.
121+
Defined.
122+
123+
Lemma wedge_pr1_inr {X Y} : wedge_pr1 $o (@wedge_inr X Y) $== pconst.
124+
Proof.
125+
snrapply Build_pHomotopy.
126+
1: reflexivity.
127+
rhs nrapply concat_p1.
128+
rhs nrapply concat_p1.
129+
rhs nrapply (ap_V _ wglue).
130+
exact (inverse2 (wedge_rec_beta_wglue pmap_idmap pconst)^).
131+
Defined.
132+
133+
Lemma wedge_pr2_inl {X Y} : wedge_pr2 $o (@wedge_inl X Y) $== pconst.
134+
Proof.
135+
reflexivity.
136+
Defined.
137+
138+
Lemma wedge_pr2_inr {X Y} : wedge_pr2 $o (@wedge_inr X Y) $== pmap_idmap.
139+
Proof.
140+
snrapply Build_pHomotopy.
141+
1: reflexivity.
142+
rhs nrapply concat_p1.
143+
rhs nrapply concat_p1.
144+
rhs nrapply (ap_V _ wglue).
145+
exact (inverse2 (wedge_rec_beta_wglue pconst pmap_idmap)^).
146+
Defined.
147+
110148
(** Wedge of an indexed family of pointed types *)
111149

112-
(** Note that the index type is not necesserily pointed. An empty wedge is the unit type which is the zero object in the category of pointed types. *)
150+
(** Note that the index type is not necessarily pointed. An empty wedge is the unit type which is the zero object in the category of pointed types. *)
113151
Definition FamilyWedge (I : Type) (X : I -> pType) : pType.
114152
Proof.
115153
snrapply Build_pType.
@@ -143,7 +181,7 @@ Proof.
143181
- exact idpath.
144182
Defined.
145183

146-
(** Wedge inclusions into the product can be defined if the indexing type has decidable paths. This is because we need to choose which factor a given wedge should land. This makes it somewhat awkward to work with, however in practice we typically only care about decidable index sets. *)
184+
(** Wedge inclusions into the product can be defined if the indexing type has decidable paths. This is because we need to choose which factor a given wedge should land. This makes it somewhat awkward to work with, however in practice we typically only care about decidable index sets. *)
147185
Definition fwedge_incl `{Funext} (I : Type) `(DecidablePaths I) (X : I -> pType)
148186
: FamilyWedge I X $-> pproduct X.
149187
Proof.
@@ -155,3 +193,118 @@ Proof.
155193
- destruct p; exact pmap_idmap.
156194
- exact pconst.
157195
Defined.
196+
197+
(** ** The pinch map on the suspension *)
198+
199+
(** Given a suspension, there is a natural map from the suspension to the wedge of the suspension with itself. This is known as the pinch map.
200+
201+
This is the image to keep in mind:
202+
<<
203+
*
204+
/|\
205+
/ | \
206+
Susp X / | \
207+
/ | \
208+
* * merid(x)*
209+
/|\ \ | /
210+
/ | \ \ | /
211+
/ | \ \ | /
212+
/ | \ Pinch \|/
213+
* merid(x)* ----------> *
214+
\ | / /|\
215+
\ | / / | \
216+
\ | / / | \
217+
\|/ / | \
218+
* * merid(x)*
219+
\ | /
220+
\ | /
221+
\ | /
222+
\|/
223+
*
224+
>>
225+
226+
Note that this is only a conceptual picture as we aren't working with "reduced suspensions". This means we have to track back along [merid pt] making this map a little trickier to imagine. *)
227+
228+
(** The pinch map for a suspension. *)
229+
Definition psusp_pinch (X : pType) : psusp X ->* psusp X \/ psusp X.
230+
Proof.
231+
refine (Build_pMap _ _ (Susp_rec pt pt _) idpath).
232+
intros x.
233+
refine (ap wedge_inl _ @ wglue @ ap wedge_inr _ @ wglue^).
234+
1,2: exact (loop_susp_unit X x).
235+
Defined.
236+
237+
(** It should compute when [ap]ed on a merid. *)
238+
Definition psusp_pinch_beta_merid {X : pType} (x : X)
239+
: ap (psusp_pinch X) (merid x)
240+
= ap wedge_inl (loop_susp_unit X x) @ wglue
241+
@ ap wedge_inr (loop_susp_unit X x) @ wglue^.
242+
Proof.
243+
rapply Susp_rec_beta_merid.
244+
Defined.
245+
246+
(** Doing wedge projections on the pinch map gives the identity. *)
247+
Definition wedge_pr1_psusp_pinch {X}
248+
: wedge_pr1 $o psusp_pinch X ==* Id (psusp X).
249+
Proof.
250+
snrapply Build_pHomotopy.
251+
- snrapply Susp_ind_FlFr.
252+
+ reflexivity.
253+
+ exact (merid pt).
254+
+ intros x.
255+
rhs nrapply concat_1p.
256+
rhs nrapply ap_idmap.
257+
apply moveR_pM.
258+
change (?t = _) with (t = loop_susp_unit X x).
259+
lhs nrapply (ap_compose (psusp_pinch X)).
260+
lhs nrapply (ap _ (psusp_pinch_beta_merid x)).
261+
lhs nrapply ap_pp.
262+
lhs nrapply (ap (fun x => _ @ x) (ap_V _ _)).
263+
apply moveR_pV.
264+
rhs nrapply (whiskerL _ (wedge_rec_beta_wglue _ _)).
265+
lhs nrapply ap_pp.
266+
lhs nrapply (ap (fun x => _ @ x)).
267+
{ lhs_V nrapply ap_compose.
268+
apply ap_const. }
269+
lhs nrapply concat_p1.
270+
lhs nrapply ap_pp.
271+
lhs nrapply (ap (fun x => _ @ x) (wedge_rec_beta_wglue _ _)).
272+
f_ap.
273+
lhs_V nrapply (ap_compose wedge_inl).
274+
apply ap_idmap.
275+
- reflexivity.
276+
Defined.
277+
278+
Definition wedge_pr2_psusp_pinch {X}
279+
: wedge_pr2 $o psusp_pinch X ==* Id (psusp X).
280+
Proof.
281+
snrapply Build_pHomotopy.
282+
- snrapply Susp_ind_FlFr.
283+
+ reflexivity.
284+
+ exact (merid pt).
285+
+ intros x.
286+
rhs nrapply concat_1p.
287+
rhs nrapply ap_idmap.
288+
apply moveR_pM.
289+
change (?t = _) with (t = loop_susp_unit X x).
290+
lhs nrapply (ap_compose (psusp_pinch X)).
291+
lhs nrapply (ap _ (psusp_pinch_beta_merid x)).
292+
lhs nrapply ap_pp.
293+
lhs nrapply (ap (fun x => _ @ x) (ap_V _ _)).
294+
apply moveR_pV.
295+
rhs nrapply (whiskerL _ (wedge_rec_beta_wglue _ _)).
296+
lhs nrapply ap_pp.
297+
lhs nrapply (ap (fun x => _ @ x) _).
298+
{ lhs_V nrapply ap_compose.
299+
apply ap_idmap. }
300+
rhs nrapply concat_p1.
301+
apply moveR_pM.
302+
lhs nrapply ap_pp.
303+
rhs nrapply concat_pV.
304+
lhs nrapply (ap _ (wedge_rec_beta_wglue _ _)).
305+
apply moveR_pM.
306+
lhs_V nrapply (ap_compose wedge_inl).
307+
rapply ap_const.
308+
- reflexivity.
309+
Defined.
310+

0 commit comments

Comments
 (0)