Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Pointed.Core Pointed.pSusp.Require Import Colimits.Pushout.Require Import WildCat.Coproducts WildCat.Products.Require Import Homotopy.Suspension.Require Import Truncations.Core Truncations.Connectedness.Require Import Extensions Modalities.ReflectiveSubuniverse.(** * Wedge sums *)LocalOpen Scope pointed_scope.DefinitionWedge@{i j k | i <= k, j <= k} (X : pType@{i}) (Y : pType@{j}) : pType@{k}
:= [Pushout@{Set i j k} (fun_ : Unit => point X) (fun_ => point Y), pushl (point X)].Notation"X \/ Y" := (Wedge X Y) : pointed_scope.Definitionwglue {XY : pType}
: pushl (point X) = (pushr (point Y)) :> (X \/ Y) := pglue tt.Definitionwedge_inl {XY : pType} : X ->* X \/ Y
:= Build_pMap pushl 1.Definitionwedge_inr {XY : pType} : Y ->* X \/ Y
:= Build_pMap pushr wglue^.(** Wedge recursion into an unpointed type. *)Definitionwedge_rec' {XY : pType} {Z : Type}
(f : X -> Z) (g : Y -> Z) (w : f pt = g pt)
: Wedge X Y -> Z
:= Pushout_rec Z f g (fun_ => w).Definitionwedge_rec {XY : pType} {Z : pType} (f : X ->* Z) (g : Y ->* Z)
: X \/ Y ->* Z
:= Build_pMap (wedge_rec' f g (point_eq f @ (point_eq g)^)) (point_eq f).Definitionwedge_rec_beta_wglue {XYZ : pType} (f : X ->* Z) (g : Y ->* Z)
: ap (wedge_rec f g) wglue = point_eq f @ (point_eq g)^
:= Pushout_rec_beta_pglue _ f g _ tt.
X, Y, Z: pType f: X ->* Z g: Y ->* Z
wedge_rec f g o* wedge_inl ==* f
X, Y, Z: pType f: X ->* Z g: Y ->* Z
wedge_rec f g o* wedge_inl ==* f
X, Y, Z: pType f: X ->* Z g: Y ->* Z
wedge_rec f g o* wedge_inl == f
X, Y, Z: pType f: X ->* Z g: Y ->* Z
?p pt =
dpoint_eq (wedge_rec f g o* wedge_inl) @
(dpoint_eq f)^
X, Y, Z: pType f: X ->* Z g: Y ->* Z
(funx0 : X => 1) pt =
dpoint_eq (wedge_rec f g o* wedge_inl) @
(dpoint_eq f)^
X, Y, Z: pType f: X ->* Z g: Y ->* Z
dpoint_eq (wedge_rec f g o* wedge_inl) @
(dpoint_eq f)^ = 1
exact (concat_pp_V 1 (point_eq f)).Defined.
X, Y, Z: pType f: X ->* Z g: Y ->* Z
wedge_rec f g o* wedge_inr ==* g
X, Y, Z: pType f: X ->* Z g: Y ->* Z
wedge_rec f g o* wedge_inr ==* g
X, Y, Z: pType f: X ->* Z g: Y ->* Z
wedge_rec f g o* wedge_inr == g
X, Y, Z: pType f: X ->* Z g: Y ->* Z
?p pt =
dpoint_eq (wedge_rec f g o* wedge_inr) @
(dpoint_eq g)^
X, Y, Z: pType f: X ->* Z g: Y ->* Z
(funx0 : Y => 1) pt =
dpoint_eq (wedge_rec f g o* wedge_inr) @
(dpoint_eq g)^
X, Y, Z: pType f: X ->* Z g: Y ->* Z
1 =
(ap (wedge_rec f g) wglue^ @ point_eq (wedge_rec f g)) @
(dpoint_eq g)^
X, Y, Z: pType f: X ->* Z g: Y ->* Z
1 =
ap (wedge_rec f g) wglue^ @
(point_eq (wedge_rec f g) @ (dpoint_eq g)^)
X, Y, Z: pType f: X ->* Z g: Y ->* Z
1 =
(ap (wedge_rec f g) wglue)^ @
(point_eq (wedge_rec f g) @ (dpoint_eq g)^)
X, Y, Z: pType f: X ->* Z g: Y ->* Z
ap (wedge_rec f g) wglue @ 1 =
point_eq (wedge_rec f g) @ (dpoint_eq g)^
X, Y, Z: pType f: X ->* Z g: Y ->* Z
ap (wedge_rec f g) wglue =
point_eq (wedge_rec f g) @ (dpoint_eq g)^
napply wedge_rec_beta_wglue.Defined.Definitionwedge_pr1 {XY : pType} : X \/ Y ->* X
:= wedge_rec pmap_idmap pconst.Definitionwedge_pr2 {XY : pType} : X \/ Y ->* Y
:= wedge_rec pconst pmap_idmap.Definitionwedge_incl (XY : pType) : X \/ Y ->* X * Y
:= pprod_corec _ wedge_pr1 wedge_pr2.
X, Y: pType
ap (wedge_incl X Y) wglue = 1
X, Y: pType
ap (wedge_incl X Y) wglue = 1
X, Y: pType
path_prod (wedge_incl X Y (pushl pt))
(wedge_incl X Y (pushr pt))
(ap fst (ap (wedge_incl X Y) wglue))
(ap snd (ap (wedge_incl X Y) wglue)) = 1
X, Y: pType
ap fst (ap (wedge_incl X Y) wglue) = 1
X, Y: pType
ap snd (ap (wedge_incl X Y) wglue) = 1
X, Y: pType
ap fst (ap (wedge_incl X Y) wglue) = 1
X, Y: pType
ap (funx : X \/ Y => fst (wedge_incl X Y x)) wglue =
1
napply wedge_rec_beta_wglue.
X, Y: pType
ap snd (ap (wedge_incl X Y) wglue) = 1
X, Y: pType
ap (funx : X \/ Y => snd (wedge_incl X Y x)) wglue =
1
napply wedge_rec_beta_wglue.Defined.
X, Y: pType P: X \/ Y -> Type f: forallx : X, P (wedge_inl x) g: forally : Y, P (wedge_inr y) w: transport P wglue (f pt) = g pt
forallxy : X \/ Y, P xy
X, Y: pType P: X \/ Y -> Type f: forallx : X, P (wedge_inl x) g: forally : Y, P (wedge_inr y) w: transport P wglue (f pt) = g pt
forallxy : X \/ Y, P xy
X, Y: pType P: X \/ Y -> Type f: forallx : X, P (wedge_inl x) g: forally : Y, P (wedge_inr y) w: transport P wglue (f pt) = g pt
foralla : Unit, transport P (pglue a) (f pt) = g pt
X, Y: pType P: X \/ Y -> Type f: forallx : X, P (wedge_inl x) g: forally : Y, P (wedge_inr y) w: transport P wglue (f pt) = g pt
transport P (pglue tt) (f pt) = g pt
exact w.Defined.Definitionwedge_ind_beta_wglue {XY : pType} (P : X \/ Y -> Type)
(f : forallx, P (wedge_inl x)) (g : forally, P (wedge_inr y))
(w : wglue # f pt = g pt)
: apD (wedge_ind P f g w) wglue = w
:= Pushout_ind_beta_pglue P _ _ _ _.
X, Y, Z: pType f, g: X \/ Y -> Z l: f o wedge_inl == g o wedge_inl r: f o wedge_inr == g o wedge_inr w: ap f wglue @ r pt = l pt @ ap g wglue
f == g
X, Y, Z: pType f, g: X \/ Y -> Z l: f o wedge_inl == g o wedge_inl r: f o wedge_inr == g o wedge_inr w: ap f wglue @ r pt = l pt @ ap g wglue
f == g
X, Y, Z: pType f, g: X \/ Y -> Z l: f o wedge_inl == g o wedge_inl r: f o wedge_inr == g o wedge_inr w: ap f wglue @ r pt = l pt @ ap g wglue
transport (funxy : X \/ Y => f xy = g xy) wglue
(l pt) = r pt
X, Y, Z: pType f, g: X \/ Y -> Z l: f o wedge_inl == g o wedge_inl r: f o wedge_inr == g o wedge_inr w: ap f wglue @ r pt = l pt @ ap g wglue
ap f wglue @ r pt = l pt @ ap g wglue
exact w.Defined.
X, Y, Z, W: pType f: X \/ Y -> Z g: Z -> W y: W l: forallx : X, g (f (wedge_inl x)) = y r: forallx : Y, g (f (wedge_inr x)) = y w: l pt = ap g (ap f wglue) @ r pt
forallx : X \/ Y, g (f x) = y
X, Y, Z, W: pType f: X \/ Y -> Z g: Z -> W y: W l: forallx : X, g (f (wedge_inl x)) = y r: forallx : Y, g (f (wedge_inr x)) = y w: l pt = ap g (ap f wglue) @ r pt
forallx : X \/ Y, g (f x) = y
X, Y, Z, W: pType f: X \/ Y -> Z g: Z -> W y: W l: forallx : X, g (f (wedge_inl x)) = y r: forallx : Y, g (f (wedge_inr x)) = y w: l pt = ap g (ap f wglue) @ r pt
transport
(funxy : Pushout (unit_name pt) (unit_name pt) =>
g (f xy) = y) wglue (l pt) = r pt
X, Y, Z, W: pType f: X \/ Y -> Z g: Z -> W y: W l: forallx : X, g (f (wedge_inl x)) = y r: forallx : Y, g (f (wedge_inr x)) = y w: l pt = ap g (ap f wglue) @ r pt
l pt = ap g (ap f wglue) @ r pt
exact w.Defined.
X, Y, Z: pType f: X \/ Y -> Z g: Z -> X \/ Y l: g o f o wedge_inl == wedge_inl r: g o f o wedge_inr == wedge_inr w: ap g (ap f wglue) @ r pt = l pt @ wglue
g o f == idmap
X, Y, Z: pType f: X \/ Y -> Z g: Z -> X \/ Y l: g o f o wedge_inl == wedge_inl r: g o f o wedge_inr == wedge_inr w: ap g (ap f wglue) @ r pt = l pt @ wglue
g o f == idmap
X, Y, Z: pType f: X \/ Y -> Z g: Z -> X \/ Y l: g o f o wedge_inl == wedge_inl r: g o f o wedge_inr == wedge_inr w: ap g (ap f wglue) @ r pt = l pt @ wglue
transport
(funxy : Pushout (unit_name pt) (unit_name pt) =>
g (f xy) = xy) wglue (l pt) = r pt
X, Y, Z: pType f: X \/ Y -> Z g: Z -> X \/ Y l: g o f o wedge_inl == wedge_inl r: g o f o wedge_inr == wedge_inr w: ap g (ap f wglue) @ r pt = l pt @ wglue
ap g (ap f wglue) @ r pt = l pt @ wglue
exact w.Defined.(** 1-universal property of wedge. *)
X, Y, Z: pType f, g: X \/ Y ->* Z p: f o* wedge_inl ==* g o* wedge_inl q: f o* wedge_inr ==* g o* wedge_inr
f ==* g
X, Y, Z: pType f, g: X \/ Y ->* Z p: f o* wedge_inl ==* g o* wedge_inl q: f o* wedge_inr ==* g o* wedge_inr
f ==* g
X, Y, Z: pType f, g: X \/ Y ->* Z p: f o* wedge_inl ==* g o* wedge_inl q: f o* wedge_inr ==* g o* wedge_inr
f == g
X, Y, Z: pType f, g: X \/ Y ->* Z p: f o* wedge_inl ==* g o* wedge_inl q: f o* wedge_inr ==* g o* wedge_inr
?p pt = dpoint_eq f @ (dpoint_eq g)^
X, Y, Z: pType f, g: X \/ Y ->* Z p: f o* wedge_inl ==* g o* wedge_inl q: f o* wedge_inr ==* g o* wedge_inr
f == g
X, Y, Z: pType f, g: X \/ Y ->* Z p: f o* wedge_inl ==* g o* wedge_inl q: f o* wedge_inr ==* g o* wedge_inr
ap f wglue @ q pt = p pt @ ap g wglue
X, Y, Z: pType f, g: X \/ Y ->* Z p: f o* wedge_inl ==* g o* wedge_inl q: f o* wedge_inr ==* g o* wedge_inr
ap f wglue @
dpoint
(pfam_phomotopy (f o* wedge_inr) (g o* wedge_inr)) =
p pt @ ap g wglue
X, Y, Z: pType f, g: X \/ Y ->* Z p: f o* wedge_inl ==* g o* wedge_inl q: f o* wedge_inr ==* g o* wedge_inr
ap f wglue @
dpoint
(pfam_phomotopy (f o* wedge_inr) (g o* wedge_inr)) =
dpoint
(pfam_phomotopy (f o* wedge_inl) (g o* wedge_inl)) @
ap g wglue
X, Y, Z: pType f, g: X \/ Y ->* Z
ap f wglue @
((ap f wglue^ @ point_eq f) @
(ap g wglue^ @ point_eq g)^) =
((1 @ point_eq f) @ (1 @ point_eq g)^) @ ap g wglue
X, Y, Z: pType f, g: X \/ Y ->* Z
ap f wglue @
((ap f wglue^ @ point_eq f) @
(ap g wglue^ @ point_eq g)^) =
(point_eq f @ (point_eq g)^) @ ap g wglue
X, Y, Z: pType f, g: X \/ Y ->* Z
(ap f wglue @ (ap f wglue^ @ point_eq f)) @
(ap g wglue^ @ point_eq g)^ =
(point_eq f @ (point_eq g)^) @ ap g wglue
X, Y, Z: pType f, g: X \/ Y ->* Z
ap f wglue @ (ap f wglue^ @ point_eq f) =
((point_eq f @ (point_eq g)^) @ ap g wglue) @
(ap g wglue^ @ point_eq g)
X, Y, Z: pType f, g: X \/ Y ->* Z
ap f wglue @ ((ap f wglue)^ @ point_eq f) =
((point_eq f @ (point_eq g)^) @ ap g wglue) @
(ap g wglue^ @ point_eq g)
X, Y, Z: pType f, g: X \/ Y ->* Z
point_eq f =
((point_eq f @ (point_eq g)^) @ ap g wglue) @
(ap g wglue^ @ point_eq g)
X, Y, Z: pType f, g: X \/ Y ->* Z
point_eq f =
(((point_eq f @ (point_eq g)^) @ ap g wglue) @
ap g wglue^) @ point_eq g
X, Y, Z: pType f, g: X \/ Y ->* Z
point_eq f =
(((point_eq f @ (point_eq g)^) @ ap g wglue) @
(ap g wglue)^) @ point_eq g
X, Y, Z: pType f, g: X \/ Y ->* Z
point_eq f = (point_eq f @ (point_eq g)^) @ point_eq g
byapply moveL_pM.
X, Y, Z: pType f, g: X \/ Y ->* Z p: f o* wedge_inl ==* g o* wedge_inl q: f o* wedge_inr ==* g o* wedge_inr
wedge_ind_FlFr p q
((1 @@ dpoint_eq q) @
(((concat_p_pp (ap f wglue)
(ap f wglue^ @ point_eq f)
(ap g wglue^ @ point_eq g)^ @
moveR_pV (ap g wglue^ @ point_eq g)
((point_eq f @ (point_eq g)^) @ ap g wglue)
(ap f wglue @ (ap f wglue^ @ point_eq f))
((1 @@ (ap_V f wglue @@ 1)) @
(concat_p_Vp (ap f wglue) (point_eq f) @
(((moveL_pM (point_eq g) (point_eq f)
(point_eq f @ (point_eq g)^) 1 @
(concat_pp_V (... @ ...^) (ap g wglue) @@
1)^) @ ((1 @@ ap_V g wglue) @@ 1)^) @
(concat_p_pp
((point_eq f @ (point_eq g)^) @
ap g wglue) (ap g wglue^) (point_eq g))^)))) @
((concat_1p (point_eq f) @@
ap inverse (concat_1p (point_eq g))) @@ 1)^
:
ap f wglue @
dpoint
(pfam_phomotopy (f o* wedge_inr)
(g o* wedge_inr)) =
dpoint
(pfam_phomotopy (f o* wedge_inl)
(g o* wedge_inl)) @ ap g wglue) @
(dpoint_eq p @@ 1)^)) pt =
dpoint_eq f @ (dpoint_eq g)^
X, Y, Z: pType f, g: X \/ Y ->* Z p: f o* wedge_inl ==* g o* wedge_inl q: f o* wedge_inr ==* g o* wedge_inr
p pt = dpoint_eq f @ (dpoint_eq g)^
X, Y, Z: pType f, g: X \/ Y ->* Z p: f o* wedge_inl ==* g o* wedge_inl q: f o* wedge_inr ==* g o* wedge_inr
exact (concat_1p _ @@ ap inverse (concat_1p _)).Defined.
HasBinaryCoproducts pType
HasBinaryCoproducts pType
X, Y: pType
BinaryCoproduct X Y
X, Y: pType
pType
X, Y: pType
Core.Hom X ?cat_coprod
X, Y: pType
Core.Hom Y ?cat_coprod
X, Y: pType
forallz : pType,
Core.Hom X z -> Core.Hom Y z -> Core.Hom ?cat_coprod z
X, Y: pType
forall (z : pType) (f : Core.Hom X z)
(g : Core.Hom Y z),
Core.GpdHom
(Core.cat_comp (?cat_coprod_rec z f g) ?cat_inl) f
X, Y: pType
forall (z : pType) (f : Core.Hom X z)
(g : Core.Hom Y z),
Core.GpdHom
(Core.cat_comp (?cat_coprod_rec z f g) ?cat_inr) g
X, Y: pType
forall (z : pType) (fg : Core.Hom ?cat_coprod z),
Core.GpdHom (Core.cat_comp f ?cat_inl)
(Core.cat_comp g ?cat_inl) ->
Core.GpdHom (Core.cat_comp f ?cat_inr)
(Core.cat_comp g ?cat_inr) -> Core.GpdHom f g
X, Y: pType
pType
exact (X \/ Y).
X, Y: pType
Core.Hom X (X \/ Y)
exact wedge_inl.
X, Y: pType
Core.Hom Y (X \/ Y)
exact wedge_inr.
X, Y: pType
forallz : pType,
Core.Hom X z -> Core.Hom Y z -> Core.Hom (X \/ Y) z
exact (@wedge_rec X Y).
X, Y: pType
forall (z : pType) (f : Core.Hom X z)
(g : Core.Hom Y z),
Core.GpdHom (Core.cat_comp (wedge_rec f g) wedge_inl)
f
exact (@wedge_rec_beta_inl X Y).
X, Y: pType
forall (z : pType) (f : Core.Hom X z)
(g : Core.Hom Y z),
Core.GpdHom (Core.cat_comp (wedge_rec f g) wedge_inr)
g
exact (@wedge_rec_beta_inr X Y).
X, Y: pType
forall (z : pType) (fg : Core.Hom (X \/ Y) z),
Core.GpdHom (Core.cat_comp f wedge_inl)
(Core.cat_comp g wedge_inl) ->
Core.GpdHom (Core.cat_comp f wedge_inr)
(Core.cat_comp g wedge_inr) -> Core.GpdHom f g
exact (wedge_up X Y).Defined.(** *** Lemmas about wedge functions *)
(ap (wedge_rec' (fun_ : X => pt) idmap 1) wglue^ @ 1) @
1 = 1
X, Y: pType
ap (wedge_rec' (fun_ : X => pt) idmap 1) wglue^ = 1
X, Y: pType
(ap (wedge_rec' (fun_ : X => pt) idmap 1) wglue)^ = 1
exact (inverse2 (wedge_rec_beta_wglue pconst pmap_idmap)).Defined.(** Wedge of an indexed family of pointed types *)(** 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. *)
I: Type X: I -> pType
pType
I: Type X: I -> pType
pType
I: Type X: I -> pType
Type
I: Type X: I -> pType
IsPointed ?pointed_type
I: Type X: I -> pType
Type
I: Type X: I -> pType
I -> {x : I & X x}
I: Type X: I -> pType
I -> pUnit
I: Type X: I -> pType
I -> {x : I & X x}
exact (funi => (i; pt)).
I: Type X: I -> pType
I -> pUnit
exact (fun_ => pt).
I: Type X: I -> pType
IsPointed
(Pushout (funi : I => (i; pt)) (fun_ : I => pt))
I: Type X: I -> pType
pUnit
exact pt.Defined.Definitionfwedge_in' (I : Type) (X : I -> pType)
: foralli, X i ->* FamilyWedge I X
:= funi => Build_pMap (funx => pushl (i; x)) (pglue i).(** We have an inclusion map [pushl : sig X -> FamilyWedge X]. When [I] is pointed, so is [sig X], and then this inclusion map is pointed. *)Definitionfwedge_in (I : pType) (X : I -> pType)
: psigma (pointed_fam X) ->* FamilyWedge I X
:= Build_pMap pushl (pglue pt).(** Recursion principle for the wedge of an indexed family of pointed types. *)
I: Type X: I -> pType Z: pType f: foralli : I, X i ->* Z
FamilyWedge I X ->* Z
I: Type X: I -> pType Z: pType f: foralli : I, X i ->* Z
FamilyWedge I X ->* Z
I: Type X: I -> pType Z: pType f: foralli : I, X i ->* Z
FamilyWedge I X -> Z
I: Type X: I -> pType Z: pType f: foralli : I, X i ->* Z
?f pt = pt
I: Type X: I -> pType Z: pType f: foralli : I, X i ->* Z
FamilyWedge I X -> Z
I: Type X: I -> pType Z: pType f: foralli : I, X i ->* Z
{x : I & X x} -> Z
I: Type X: I -> pType Z: pType f: foralli : I, X i ->* Z
pUnit -> Z
I: Type X: I -> pType Z: pType f: foralli : I, X i ->* Z
foralla : I,
?pushb ((funi : I => (i; pt)) a) =
?pushc ((fun_ : I => pt) a)
I: Type X: I -> pType Z: pType f: foralli : I, X i ->* Z
{x : I & X x} -> Z
exact (sig_rec f).
I: Type X: I -> pType Z: pType f: foralli : I, X i ->* Z
pUnit -> Z
exact pconst.
I: Type X: I -> pType Z: pType f: foralli : I, X i ->* Z
foralla : I,
sig_rec (funi : I => f i) ((funi : I => (i; pt)) a) =
pconst ((fun_ : I => pt) a)
I: Type X: I -> pType Z: pType f: foralli : I, X i ->* Z i: I
sig_rec (funi : I => f i) ((funi : I => (i; pt)) i) =
pconst ((fun_ : I => pt) i)
exact (point_eq (f i)).
I: Type X: I -> pType Z: pType f: foralli : I, X i ->* Z
Pushout_rec Z (sig_rec (funi : I => f i)) pconst
(funi : I => point_eq (f i)) pt = pt
exact idpath.Defined.
HasAllCoproducts pType
HasAllCoproducts pType
I: Type X: I -> pType
Coproduct I X
I: Type X: I -> pType
pType
I: Type X: I -> pType
foralli : I, Core.Hom (X i) ?cat_coprod
I: Type X: I -> pType
forallz : pType,
(foralli : I, Core.Hom (X i) z) ->
Core.Hom ?cat_coprod z
I: Type X: I -> pType
forall (z : pType)
(f : foralli : I, Core.Hom (X i) z) (i : I),
Core.GpdHom
(Core.cat_comp (?cat_coprod_rec z f) (?cat_in i))
(f i)
I: Type X: I -> pType
forall (z : pType) (fg : Core.Hom ?cat_coprod z),
(foralli : I,
Core.GpdHom (Core.cat_comp f (?cat_in i))
(Core.cat_comp g (?cat_in i))) -> Core.GpdHom f g
I: Type X: I -> pType
pType
exact (FamilyWedge I X).
I: Type X: I -> pType
foralli : I, Core.Hom (X i) (FamilyWedge I X)
exact (fwedge_in' I X).
I: Type X: I -> pType
forallz : pType,
(foralli : I, Core.Hom (X i) z) ->
Core.Hom (FamilyWedge I X) z
exact (fwedge_rec I X).
I: Type X: I -> pType
forall (z : pType)
(f : foralli : I, Core.Hom (X i) z) (i : I),
Core.GpdHom
(Core.cat_comp (fwedge_rec I X z f)
(fwedge_in' I X i)) (f i)
I: Type X: I -> pType Z: pType f: foralli : I, Core.Hom (X i) Z i: I
Core.GpdHom
(Core.cat_comp (fwedge_rec I X Z f)
(fwedge_in' I X i)) (f i)
I: Type X: I -> pType Z: pType f: foralli : I, Core.Hom (X i) Z i: I
Core.cat_comp (fwedge_rec I X Z f) (fwedge_in' I X i) ==
f i
I: Type X: I -> pType Z: pType f: foralli : I, Core.Hom (X i) Z i: I
?p pt =
dpoint_eq
(Core.cat_comp (fwedge_rec I X Z f)
(fwedge_in' I X i)) @ (dpoint_eq (f i))^
I: Type X: I -> pType Z: pType f: foralli : I, Core.Hom (X i) Z i: I
(funx0 : X i => 1) pt =
dpoint_eq
(Core.cat_comp (fwedge_rec I X Z f)
(fwedge_in' I X i)) @ (dpoint_eq (f i))^
I: Type X: I -> pType Z: pType f: foralli : I, Core.Hom (X i) Z i: I
1 =
(ap
(Pushout_rec Z (sig_rec (funi : I => f i))
(unit_name pt) (funi : I => point_eq (f i)))
(pglue i) @ 1) @ (dpoint_eq (f i))^
I: Type X: I -> pType Z: pType f: foralli : I, Core.Hom (X i) Z i: I
1 @ dpoint_eq (f i) =
ap
(Pushout_rec Z (sig_rec (funi : I => f i))
(unit_name pt) (funi : I => point_eq (f i)))
(pglue i) @ 1
I: Type X: I -> pType Z: pType f: foralli : I, Core.Hom (X i) Z i: I
dpoint_eq (f i) =
ap
(Pushout_rec Z (sig_rec (funi : I => f i))
(unit_name pt) (funi : I => point_eq (f i)))
(pglue i)
I: Type X: I -> pType Z: pType f: foralli : I, Core.Hom (X i) Z i: I
ap
(Pushout_rec Z (sig_rec (funi : I => f i))
(unit_name pt) (funi : I => point_eq (f i)))
(pglue i) = dpoint_eq (f i)
forall (z : pType)
(fg : Core.Hom (FamilyWedge I X) z),
(foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i))) ->
Core.GpdHom f g
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i))
Core.GpdHom f g
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i))
f == g
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i))
?p pt = dpoint_eq f @ (dpoint_eq g)^
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i))
f == g
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i))
forallb : {x : I & X x},
(funw : Pushout (funi : I => (i; pt))
(fun_ : I => pt) => f w = g w) (pushl b)
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i))
forallc : pUnit,
(funw : Pushout (funi : I => (i; pt))
(fun_ : I => pt) => f w = g w) (pushr c)
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i))
foralla : I,
transport
(funw : Pushout (funi : I => (i; pt))
(fun_ : I => pt) => f w = g w) (pglue a)
(?pushb ((funi : I => (i; pt)) a)) =
?pushc ((fun_ : I => pt) a)
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i))
forallb : {x : I & X x},
(funw : Pushout (funi : I => (i; pt))
(fun_ : I => pt) => f w = g w) (pushl b)
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i)) i: I x: X i
f (pushl (i; x)) = g (pushl (i; x))
napply h.
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i))
forallc : pUnit,
(funw : Pushout (funi : I => (i; pt))
(fun_ : I => pt) => f w = g w) (pushr c)
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i))
f (pushr tt) = g (pushr tt)
exact (point_eq _ @ (point_eq _)^).
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i))
foralla : I,
transport
(funw : Pushout (funi : I => (i; pt))
(fun_ : I => pt) => f w = g w) (pglue a)
((funb : {x : I & X x} =>
(fun (i : I) (x : X i) => h i x) b.1 b.2)
((funi : I => (i; pt)) a)) =
(func : pUnit =>
match c as u return (f (pushr u) = g (pushr u)) with
| tt => point_eq f @ (point_eq g)^
end) ((fun_ : I => pt) a)
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i)) i: I
transport
(funw : Pushout (funi : I => (i; pt))
(fun_ : I => pt) => f w = g w) (pglue i)
(h i pt) = point_eq f @ (point_eq g)^
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i)) i: I
ap f (pglue i) @ (point_eq f @ (point_eq g)^) =
h i pt @ ap g (pglue i)
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i)) i: I
(ap f (pglue i) @ point_eq f) @ (point_eq g)^ =
h i pt @ ap g (pglue i)
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i)) i: I
ap f (pglue i) @ point_eq f =
(h i pt @ ap g (pglue i)) @ point_eq g
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i)) i: I
ap f (pglue i) @ point_eq f =
h i pt @ (ap g (pglue i) @ point_eq g)
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i)) i: I
(ap f (pglue i) @ point_eq f) @
(ap g (pglue i) @ point_eq g)^ = h i pt
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i)) i: I
h i pt =
(ap f (pglue i) @ point_eq f) @
(ap g (pglue i) @ point_eq g)^
exact (dpoint_eq (h i)).
I: Type X: I -> pType Z: pType f, g: Core.Hom (FamilyWedge I X) Z h: foralli : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i))
(Core.cat_comp g (fwedge_in' I X i))
Pushout_ind
(funw : Pushout (funi : I => (i; pt))
(fun_ : I => pt) => f w = g w)
(funb : {x : I & X x} =>
(fun (i : I) (x : X i) => h i x) b.1 b.2)
(func : pUnit =>
match
c as u return (f (pushr u) = g (pushr u))
with
| tt => point_eq f @ (point_eq g)^
end)
(funi : I =>
transport_paths_FlFr (pglue i) (h i pt) @
moveR_Vp_p_inv (ap f (pglue i)) (h i pt)
(ap g (pglue i)) (point_eq f @ (point_eq g)^)
(concat_p_pp (ap f (pglue i)) (point_eq f)
(point_eq g)^ @
moveR_pV (point_eq g) (h i pt @ ap g (pglue i))
(ap f (pglue i) @ point_eq f)
(moveL_pM (ap g (pglue i) @ point_eq g)
(ap f (pglue i) @ point_eq f) (h i pt)
(dpoint_eq (h i))^ @
(concat_pp_p (h i pt) (ap g (pglue i))
(point_eq g))^))
:
transport
(funw : Pushout (funi0 : I => (i0; pt))
(fun_ : I => pt) => f w = g w)
(pglue i)
((funb : {x : I & X x} =>
(fun (i0 : I) (x : X i0) => h i0 x) b.1 b.2)
((funi0 : I => (i0; pt)) i)) =
(func : pUnit =>
match
c as u return (f (pushr u) = g (pushr u))
with
| tt => point_eq f @ (point_eq g)^
end) ((fun_ : I => pt) i)) pt =
dpoint_eq f @ (dpoint_eq g)^
reflexivity.Defined.(** 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 summand should land in. *)Definitionfwedge_incl `{Funext} (I : Type) `(DecidablePaths I) (X : I -> pType)
: FamilyWedge I X ->* pproduct X
:= cat_coprod_prod X.(** ** The pinch map on the suspension *)(** 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.This is the image to keep in mind:<< * /|\ / | \ Susp X / | \ / | \ * * merid(x)* /|\ \ | / / | \ \ | / / | \ \ | / / | \ Pinch \|/ * merid(x)* ----------> * \ | / /|\ \ | / / | \ \ | / / | \ \|/ / | \ * * merid(x)* \ | / \ | / \ | / \|/ *>>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. *)(** The pinch map for a suspension. *)
X: pType
psusp X ->* psusp X \/ psusp X
X: pType
psusp X ->* psusp X \/ psusp X
X: pType
X -> pt = pt
X: pType x: X
pt = pt
X: pType x: X
pt = pt
X: pType x: X
pt = pt
1,2: exact (loop_susp_unit X x).Defined.(** It should compute when [ap]ed on a merid. *)
X: pType x: X
ap (psusp_pinch X) (merid x) =
((ap wedge_inl (loop_susp_unit X x) @ wglue) @
ap wedge_inr (loop_susp_unit X x)) @ wglue^
X: pType x: X
ap (psusp_pinch X) (merid x) =
((ap wedge_inl (loop_susp_unit X x) @ wglue) @
ap wedge_inr (loop_susp_unit X x)) @ wglue^
rapply Susp_rec_beta_merid.Defined.(** Doing wedge projections on the pinch map gives the identity. *)
(wedge_pr1 o* psusp_pinch X) North = pmap_idmap North
X: pType
(wedge_pr1 o* psusp_pinch X) South = pmap_idmap South
X: pType
forallx : X,
ap (wedge_pr1 o* psusp_pinch X) (merid x) @ ?HS =
?HN @ ap pmap_idmap (merid x)
X: pType
(wedge_pr1 o* psusp_pinch X) North = pmap_idmap North
reflexivity.
X: pType
(wedge_pr1 o* psusp_pinch X) South = pmap_idmap South
exact (merid pt).
X: pType
forallx : X,
ap (wedge_pr1 o* psusp_pinch X) (merid x) @ merid pt =
1 @ ap pmap_idmap (merid x)
X: pType x: X
ap (wedge_pr1 o* psusp_pinch X) (merid x) @ merid pt =
1 @ ap pmap_idmap (merid x)
X: pType x: X
ap (wedge_pr1 o* psusp_pinch X) (merid x) @ merid pt =
ap pmap_idmap (merid x)
X: pType x: X
ap (wedge_pr1 o* psusp_pinch X) (merid x) @ merid pt =
merid x
X: pType x: X
ap (wedge_pr1 o* psusp_pinch X) (merid x) =
merid x @ (merid pt)^
X: pType x: X
ap (wedge_pr1 o* psusp_pinch X) (merid x) =
loop_susp_unit X x
X: pType x: X
ap wedge_pr1 (ap (psusp_pinch X) (merid x)) =
loop_susp_unit X x
X: pType x: X
ap wedge_pr1
(((ap wedge_inl (loop_susp_unit X x) @ wglue) @
ap wedge_inr (loop_susp_unit X x)) @ wglue^) =
loop_susp_unit X x
X: pType x: X
ap wedge_pr1
((ap wedge_inl (loop_susp_unit X x) @ wglue) @
ap wedge_inr (loop_susp_unit X x)) @
(ap wedge_pr1 wglue)^ = loop_susp_unit X x
X: pType x: X
ap wedge_pr1
((ap wedge_inl (loop_susp_unit X x) @ wglue) @
ap wedge_inr (loop_susp_unit X x)) =
loop_susp_unit X x @ ap wedge_pr1 wglue
X: pType x: X
ap wedge_pr1
((ap wedge_inl (loop_susp_unit X x) @ wglue) @
ap wedge_inr (loop_susp_unit X x)) =
loop_susp_unit X x @
(point_eq pmap_idmap @ (point_eq pconst)^)
X: pType x: X
ap wedge_pr1
(ap wedge_inl (loop_susp_unit X x) @ wglue) @
ap wedge_pr1 (ap wedge_inr (loop_susp_unit X x)) =
loop_susp_unit X x @
(point_eq pmap_idmap @ (point_eq pconst)^)
X: pType x: X
ap wedge_pr1 (ap wedge_inr (loop_susp_unit X x)) =
?Goal
X: pType x: X
ap wedge_pr1
(ap wedge_inl (loop_susp_unit X x) @ wglue) @ ?Goal =
loop_susp_unit X x @
(point_eq pmap_idmap @ (point_eq pconst)^)
X: pType x: X
ap wedge_pr1 (ap wedge_inr (loop_susp_unit X x)) =
?Goal
X: pType x: X
ap (funx : psusp X => wedge_pr1 (pushr x))
(loop_susp_unit X x) = ?Goal
apply ap_const.
X: pType x: X
ap wedge_pr1
(ap wedge_inl (loop_susp_unit X x) @ wglue) @ 1 =
loop_susp_unit X x @
(point_eq pmap_idmap @ (point_eq pconst)^)
X: pType x: X
ap wedge_pr1
(ap wedge_inl (loop_susp_unit X x) @ wglue) =
loop_susp_unit X x @
(point_eq pmap_idmap @ (point_eq pconst)^)
X: pType x: X
ap wedge_pr1 (ap wedge_inl (loop_susp_unit X x)) @
ap wedge_pr1 wglue =
loop_susp_unit X x @
(point_eq pmap_idmap @ (point_eq pconst)^)
X: pType x: X
ap wedge_pr1 (ap wedge_inl (loop_susp_unit X x)) @
(point_eq pmap_idmap @ (point_eq pconst)^) =
loop_susp_unit X x @
(point_eq pmap_idmap @ (point_eq pconst)^)
X: pType x: X
ap wedge_pr1 (ap wedge_inl (loop_susp_unit X x)) =
loop_susp_unit X x
X: pType x: X
ap (funx : psusp X => wedge_pr1 (wedge_inl x))
(loop_susp_unit X x) = loop_susp_unit X x
apply ap_idmap.
X: pType
Susp_ind_FlFr (wedge_pr1 o* psusp_pinch X) pmap_idmap
1 (merid pt)
(funx : X =>
(moveR_pM (merid pt) (merid x)
(ap (wedge_pr1 o* psusp_pinch X) (merid x))
(ap_compose (psusp_pinch X) wedge_pr1 (merid x) @
(ap (ap wedge_pr1) (psusp_pinch_beta_merid x) @
(ap_pV wedge_pr1
((ap wedge_inl (loop_susp_unit X x) @ wglue) @
ap wedge_inr (loop_susp_unit X x)) wglue @
moveR_pV (ap wedge_pr1 wglue)
(loop_susp_unit X x)
(ap wedge_pr1
((ap wedge_inl (loop_susp_unit X x) @
wglue) @
ap wedge_inr (loop_susp_unit X x)))
((ap_pp wedge_pr1
(ap wedge_inl (loop_susp_unit X x) @
wglue)
(ap wedge_inr (loop_susp_unit X x)) @
(ap
(funx0 : ... = ... =>
ap wedge_pr1 (...) @ x0)
((ap_compose pushr wedge_pr1 (...))^ @
ap_const (loop_susp_unit X x)
(wedge_pr1 ...)) @
(concat_p1 (ap wedge_pr1 (...)) @
(ap_pp wedge_pr1 (...) wglue @
(... @ ...))))) @
(whiskerL (loop_susp_unit X x)
(wedge_rec_beta_wglue pmap_idmap pconst))^)))) @
(ap_idmap (merid x))^) @
(concat_1p (ap pmap_idmap (merid x)))^) pt =
dpoint_eq (wedge_pr1 o* psusp_pinch X) @
(dpoint_eq pmap_idmap)^
(wedge_pr2 o* psusp_pinch X) North = pmap_idmap North
X: pType
(wedge_pr2 o* psusp_pinch X) South = pmap_idmap South
X: pType
forallx : X,
ap (wedge_pr2 o* psusp_pinch X) (merid x) @ ?HS =
?HN @ ap pmap_idmap (merid x)
X: pType
(wedge_pr2 o* psusp_pinch X) North = pmap_idmap North
reflexivity.
X: pType
(wedge_pr2 o* psusp_pinch X) South = pmap_idmap South
exact (merid pt).
X: pType
forallx : X,
ap (wedge_pr2 o* psusp_pinch X) (merid x) @ merid pt =
1 @ ap pmap_idmap (merid x)
X: pType x: X
ap (wedge_pr2 o* psusp_pinch X) (merid x) @ merid pt =
1 @ ap pmap_idmap (merid x)
X: pType x: X
ap (wedge_pr2 o* psusp_pinch X) (merid x) @ merid pt =
ap pmap_idmap (merid x)
X: pType x: X
ap (wedge_pr2 o* psusp_pinch X) (merid x) @ merid pt =
merid x
X: pType x: X
ap (wedge_pr2 o* psusp_pinch X) (merid x) =
merid x @ (merid pt)^
X: pType x: X
ap (wedge_pr2 o* psusp_pinch X) (merid x) =
loop_susp_unit X x
X: pType x: X
ap wedge_pr2 (ap (psusp_pinch X) (merid x)) =
loop_susp_unit X x
X: pType x: X
ap wedge_pr2
(((ap wedge_inl (loop_susp_unit X x) @ wglue) @
ap wedge_inr (loop_susp_unit X x)) @ wglue^) =
loop_susp_unit X x
X: pType x: X
ap wedge_pr2
((ap wedge_inl (loop_susp_unit X x) @ wglue) @
ap wedge_inr (loop_susp_unit X x)) @
(ap wedge_pr2 wglue)^ = loop_susp_unit X x
X: pType x: X
ap wedge_pr2
((ap wedge_inl (loop_susp_unit X x) @ wglue) @
ap wedge_inr (loop_susp_unit X x)) =
loop_susp_unit X x @ ap wedge_pr2 wglue
X: pType x: X
ap wedge_pr2
((ap wedge_inl (loop_susp_unit X x) @ wglue) @
ap wedge_inr (loop_susp_unit X x)) =
loop_susp_unit X x @
(point_eq pconst @ (point_eq pmap_idmap)^)
X: pType x: X
ap wedge_pr2
(ap wedge_inl (loop_susp_unit X x) @ wglue) @
ap wedge_pr2 (ap wedge_inr (loop_susp_unit X x)) =
loop_susp_unit X x @
(point_eq pconst @ (point_eq pmap_idmap)^)
X: pType x: X
ap wedge_pr2 (ap wedge_inr (loop_susp_unit X x)) =
?Goal
X: pType x: X
ap wedge_pr2
(ap wedge_inl (loop_susp_unit X x) @ wglue) @ ?Goal =
loop_susp_unit X x @
(point_eq pconst @ (point_eq pmap_idmap)^)
X: pType x: X
ap wedge_pr2 (ap wedge_inr (loop_susp_unit X x)) =
?Goal
X: pType x: X
ap (funx : psusp X => wedge_pr2 (pushr x))
(loop_susp_unit X x) = ?Goal
apply ap_idmap.
X: pType x: X
ap wedge_pr2
(ap wedge_inl (loop_susp_unit X x) @ wglue) @
loop_susp_unit X x =
loop_susp_unit X x @
(point_eq pconst @ (point_eq pmap_idmap)^)
X: pType x: X
ap wedge_pr2
(ap wedge_inl (loop_susp_unit X x) @ wglue) @
loop_susp_unit X x = loop_susp_unit X x
X: pType x: X
ap wedge_pr2
(ap wedge_inl (loop_susp_unit X x) @ wglue) =
loop_susp_unit X x @ (loop_susp_unit X x)^
X: pType x: X
ap wedge_pr2 (ap wedge_inl (loop_susp_unit X x)) @
ap wedge_pr2 wglue =
loop_susp_unit X x @ (loop_susp_unit X x)^
X: pType x: X
ap wedge_pr2 (ap wedge_inl (loop_susp_unit X x)) @
ap wedge_pr2 wglue = 1
X: pType x: X
ap wedge_pr2 (ap wedge_inl (loop_susp_unit X x)) @
(point_eq pconst @ (point_eq pmap_idmap)^) = 1
X: pType x: X
ap wedge_pr2 (ap wedge_inl (loop_susp_unit X x)) =
1 @ (point_eq pconst @ (point_eq pmap_idmap)^)^
X: pType x: X
ap (funx : psusp X => wedge_pr2 (wedge_inl x))
(loop_susp_unit X x) =
1 @ (point_eq pconst @ (point_eq pmap_idmap)^)^
rapply ap_const.
X: pType
Susp_ind_FlFr (wedge_pr2 o* psusp_pinch X) pmap_idmap
1 (merid pt)
(funx : X =>
(moveR_pM (merid pt) (merid x)
(ap (wedge_pr2 o* psusp_pinch X) (merid x))
(ap_compose (psusp_pinch X) wedge_pr2 (merid x) @
(ap (ap wedge_pr2) (psusp_pinch_beta_merid x) @
(ap_pV wedge_pr2
((ap wedge_inl (loop_susp_unit X x) @ wglue) @
ap wedge_inr (loop_susp_unit X x)) wglue @
moveR_pV (ap wedge_pr2 wglue)
(loop_susp_unit X x)
(ap wedge_pr2
((ap wedge_inl (loop_susp_unit X x) @
wglue) @
ap wedge_inr (loop_susp_unit X x)))
((ap_pp wedge_pr2
(ap wedge_inl (loop_susp_unit X x) @
wglue)
(ap wedge_inr (loop_susp_unit X x)) @
(ap
(funx0 : ... = ... =>
ap wedge_pr2 (...) @ x0)
((ap_compose pushr wedge_pr2 (...))^ @
ap_idmap (loop_susp_unit X x)) @
(moveR_pM (loop_susp_unit X x)
(loop_susp_unit X x)
(ap wedge_pr2 (...))
(ap_pp wedge_pr2 ... wglue @ (...)) @
(concat_p1 (loop_susp_unit X x))^))) @
(whiskerL (loop_susp_unit X x)
(wedge_rec_beta_wglue pconst pmap_idmap))^)))) @
(ap_idmap (merid x))^) @
(concat_1p (ap pmap_idmap (merid x)))^) pt =
dpoint_eq (wedge_pr2 o* psusp_pinch X) @
(dpoint_eq pmap_idmap)^
reflexivity.Defined.(** ** Connectivity of wedge inclusion *)
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
ExtensionAlong (wedge_incl X Y) P d
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
ExtensionAlong (wedge_incl X Y) P d
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
forallx : X \/ Y,
prod_ind P f (wedge_incl X Y x) = d x
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
transport
(funxy : X \/ Y =>
prod_ind P f (wedge_incl X Y xy) = d xy) wglue
(p pt) = q pt
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
((apD
(funx : X \/ Y => prod_ind P f (wedge_incl X Y x))
wglue)^ @
ap
(transport (funx : X \/ Y => P (wedge_incl X Y x))
wglue) (p pt)) @ apD d wglue = q pt
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
(apD
(funx : X \/ Y => prod_ind P f (wedge_incl X Y x))
wglue)^ @
ap
(transport (funx : X \/ Y => P (wedge_incl X Y x))
wglue) (p pt) = q pt @ (apD d wglue)^
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
ap
(transport (funx : X \/ Y => P (wedge_incl X Y x))
wglue) (p pt) =
apD
(funx : X \/ Y => prod_ind P f (wedge_incl X Y x))
wglue @ (q pt @ (apD d wglue)^)
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
forallx : P (wedge_incl X Y (pushr pt)),
transport (funx0 : X \/ Y => P (wedge_incl X Y x0))
wglue x = x
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
(?Goal (prod_ind P f (wedge_incl X Y (pushl pt))) @
p pt) @ (?Goal (d (pushl pt)))^ =
apD
(funx : X \/ Y => prod_ind P f (wedge_incl X Y x))
wglue @ (q pt @ (apD d wglue)^)
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
(transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue
(prod_ind P f (wedge_incl X Y (pushl pt))) @ p pt) @
(transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))^ =
apD
(funx : X \/ Y => prod_ind P f (wedge_incl X Y x))
wglue @ (q pt @ (apD d wglue)^)
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
(transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (f pt pt) @ p pt) @
(transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))^ =
apD
(funx : X \/ Y => prod_ind P f (wedge_incl X Y x))
wglue @ (q pt @ (apD d wglue)^)
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (f pt pt) @ p pt =
(apD
(funx : X \/ Y => prod_ind P f (wedge_incl X Y x))
wglue @ (q pt @ (apD d wglue)^)) @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt))
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (f pt pt) @ p pt =
apD
(funx : X \/ Y => prod_ind P f (wedge_incl X Y x))
wglue @
((q pt @ (apD d wglue)^) @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (f pt pt) @ p pt =
apD
(funx : X \/ Y => prod_ind P f (wedge_incl X Y x))
wglue @
(q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt))))
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (f pt pt) =
apD
(funx : X \/ Y => prod_ind P f (wedge_incl X Y x))
wglue
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
apD
(funx : X \/ Y => prod_ind P f (wedge_incl X Y x))
wglue =
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (f pt pt)
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
transport_compose P (wedge_incl X Y) wglue
(prod_ind P f (wedge_incl X Y (pushl pt))) @
apD (prod_ind P f) (ap (wedge_incl X Y) wglue) =
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (f pt pt)
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
transport_compose P (wedge_incl X Y) wglue
(prod_ind P f (wedge_incl X Y (pushl pt))) @
apD (prod_ind P f) (ap (wedge_incl X Y) wglue) =
transport_compose P (wedge_incl X Y) wglue (f pt pt) @
transport2 P wedge_incl_beta_wglue (f pt pt)
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
apD (prod_ind P f) (ap (wedge_incl X Y) wglue) =
transport2 P wedge_incl_beta_wglue (f pt pt)
X, Y: pType P: X * Y -> Type d: foralla : X \/ Y, P (wedge_incl X Y a) f: forall (x : X) (y : Y), P (x, y) p: forallx : X, f x pt = d (wedge_inl x) q: forally : Y, f pt y = d (wedge_inr y) pq: p pt =
q pt @
((apD d wglue)^ @
transport_compose_path_ap P (wedge_incl X Y)
wedge_incl_beta_wglue (d (pushl pt)))
transport2 P wedge_incl_beta_wglue
(prod_ind P f (wedge_incl X Y (pushl pt))) @
apD (prod_ind P f) 1 =
transport2 P wedge_incl_beta_wglue (f pt pt)
apply concat_p1.Defined.
H: Univalence m, n: trunc_index X, Y: pType IsConnected0: IsConnected (Tr m.+1) X IsConnected1: IsConnected (Tr n.+1) Y
IsConnMap (Tr (m +2+ n)) (wedge_incl X Y)
H: Univalence m, n: trunc_index X, Y: pType IsConnected0: IsConnected (Tr m.+1) X IsConnected1: IsConnected (Tr n.+1) Y
IsConnMap (Tr (m +2+ n)) (wedge_incl X Y)
H: Univalence m, n: trunc_index X, Y: pType IsConnected0: IsConnected (Tr m.+1) X IsConnected1: IsConnected (Tr n.+1) Y
forallP : [X * Y, ispointed_prod] -> Type,
(forallb : [X * Y, ispointed_prod],
In (Tr (m +2+ n)) (P b)) ->
foralld : foralla : X \/ Y, P (wedge_incl X Y a),
ExtensionAlong (wedge_incl X Y) P d
H: Univalence m, n: trunc_index X, Y: pType IsConnected0: IsConnected (Tr m.+1) X IsConnected1: IsConnected (Tr n.+1) Y P: [X * Y, ispointed_prod] -> Type h: forallb : [X * Y, ispointed_prod],
In (Tr (m +2+ n)) (P b) d: foralla : X \/ Y, P (wedge_incl X Y a)
ExtensionAlong (wedge_incl X Y) P d
H: Univalence m, n: trunc_index X, Y: pType IsConnected0: IsConnected (Tr m.+1) X IsConnected1: IsConnected (Tr n.+1) Y P: [X * Y, ispointed_prod] -> Type h: forallb : [X * Y, ispointed_prod],
In (Tr (m +2+ n)) (P b) d: foralla : X \/ Y, P (wedge_incl X Y a)
forall (x : X) (y : Y), P (x, y)
H: Univalence m, n: trunc_index X, Y: pType IsConnected0: IsConnected (Tr m.+1) X IsConnected1: IsConnected (Tr n.+1) Y P: [X * Y, ispointed_prod] -> Type h: forallb : [X * Y, ispointed_prod],
In (Tr (m +2+ n)) (P b) d: foralla : X \/ Y, P (wedge_incl X Y a)
forallx : X, ?f x pt = d (wedge_inl x)
H: Univalence m, n: trunc_index X, Y: pType IsConnected0: IsConnected (Tr m.+1) X IsConnected1: IsConnected (Tr n.+1) Y P: [X * Y, ispointed_prod] -> Type h: forallb : [X * Y, ispointed_prod],
In (Tr (m +2+ n)) (P b) d: foralla : X \/ Y, P (wedge_incl X Y a)
forally : Y, ?f pt y = d (wedge_inr y)
H: Univalence m, n: trunc_index X, Y: pType IsConnected0: IsConnected (Tr m.+1) X IsConnected1: IsConnected (Tr n.+1) Y P: [X * Y, ispointed_prod] -> Type h: forallb : [X * Y, ispointed_prod],
In (Tr (m +2+ n)) (P b) d: foralla : X \/ Y, P (wedge_incl X Y a)
?p pt =
?q pt @
((apD d wglue)^ @
transport_compose_path_ap P
(wedge_incl X Y) wedge_incl_beta_wglue
(d (pushl pt)))
H: Univalence m, n: trunc_index X, Y: pType IsConnected0: IsConnected (Tr m.+1) X IsConnected1: IsConnected (Tr n.+1) Y P: [X * Y, ispointed_prod] -> Type h: forallb : [X * Y, ispointed_prod],
In (Tr (m +2+ n)) (P b) d: foralla : X \/ Y, P (wedge_incl X Y a)
forall (x : X) (y : Y), P (x, y)
H: Univalence m, n: trunc_index X, Y: pType IsConnected0: IsConnected (Tr m.+1) X IsConnected1: IsConnected (Tr n.+1) Y P: [X * Y, ispointed_prod] -> Type h: forallb : [X * Y, ispointed_prod],
In (Tr (m +2+ n)) (P b) d: foralla : X \/ Y, P (wedge_incl X Y a)
d (wedge_inr (ispointed_type Y)) =
d (wedge_inl (ispointed_type X))
H: Univalence m, n: trunc_index X, Y: pType IsConnected0: IsConnected (Tr m.+1) X IsConnected1: IsConnected (Tr n.+1) Y P: [X * Y, ispointed_prod] -> Type h: forallb : [X * Y, ispointed_prod],
In (Tr (m +2+ n)) (P b) d: foralla : X \/ Y, P (wedge_incl X Y a)
transport (funa : X \/ Y => P (wedge_incl X Y a))
wglue (d (pushl pt)) =
d (wedge_inl (ispointed_type X))
exact (transport_compose_path_ap P (wedge_incl X Y) wedge_incl_beta_wglue _).
H: Univalence m, n: trunc_index X, Y: pType IsConnected0: IsConnected (Tr m.+1) X IsConnected1: IsConnected (Tr n.+1) Y P: [X * Y, ispointed_prod] -> Type h: forallb : [X * Y, ispointed_prod],
In (Tr (m +2+ n)) (P b) d: foralla : X \/ Y, P (wedge_incl X Y a)
forallx : X,
wedge_incl_elim (ispointed_type X)
(ispointed_type Y)
(fun (x0 : X) (y : Y) => P (x0, y))
(d o wedge_inr) (d o wedge_inl)
((apD d wglue)^ @
transport_compose_path_ap P
(wedge_incl X Y) wedge_incl_beta_wglue
(d (pushl pt))) x pt =
d (wedge_inl x)
napply wedge_incl_comp2.
H: Univalence m, n: trunc_index X, Y: pType IsConnected0: IsConnected (Tr m.+1) X IsConnected1: IsConnected (Tr n.+1) Y P: [X * Y, ispointed_prod] -> Type h: forallb : [X * Y, ispointed_prod],
In (Tr (m +2+ n)) (P b) d: foralla : X \/ Y, P (wedge_incl X Y a)
forally : Y,
wedge_incl_elim (ispointed_type X)
(ispointed_type Y)
(fun (x : X) (y0 : Y) => P (x, y0))
(d o wedge_inr) (d o wedge_inl)
((apD d wglue)^ @
transport_compose_path_ap P
(wedge_incl X Y) wedge_incl_beta_wglue
(d (pushl pt))) pt y =
d (wedge_inr y)
napply wedge_incl_comp1.
H: Univalence m, n: trunc_index X, Y: pType IsConnected0: IsConnected (Tr m.+1) X IsConnected1: IsConnected (Tr n.+1) Y P: [X * Y, ispointed_prod] -> Type h: forallb : [X * Y, ispointed_prod],
In (Tr (m +2+ n)) (P b) d: foralla : X \/ Y, P (wedge_incl X Y a)
wedge_incl_comp2 (ispointed_type X)
(ispointed_type Y)
(fun (x : X) (y : Y) => P (x, y))
(funx : Y => d (wedge_inr x))
(funx : X => d (wedge_inl x))
((apD d wglue)^ @
transport_compose_path_ap P
(wedge_incl X Y) wedge_incl_beta_wglue
(d (pushl pt))) pt =
wedge_incl_comp1 (ispointed_type X)
(ispointed_type Y)
(fun (x : X) (y : Y) => P (x, y))
(funx : Y => d (wedge_inr x))
(funx : X => d (wedge_inl x))
((apD d wglue)^ @
transport_compose_path_ap P
(wedge_incl X Y) wedge_incl_beta_wglue
(d (pushl pt))) pt @
((apD d wglue)^ @
transport_compose_path_ap P
(wedge_incl X Y) wedge_incl_beta_wglue
(d (pushl pt)))