Built with Alectryon. 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.
From HoTT Require Import Basics Types.From HoTT Require Import Basics Types.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 (point_eq f @ (point_eq g)^) (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: foralli0 : I, X i0 ->* Z i: I
sig_rec (funi0 : I => f i0) ((funi0 : I => (i0; 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: foralli0 : I, Core.Hom (X i0) 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: foralli0 : I, Core.Hom (X i0) 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: foralli0 : I, Core.Hom (X i0) 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: foralli0 : I, Core.Hom (X i0) 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: foralli0 : I, Core.Hom (X i0) Z i: I
1 =
(ap
(Pushout_rec Z (sig_rec (funi0 : I => f i0)) (unit_name pt)
(funi0 : I => point_eq (f i0)))
(pglue i) @
1) @
(dpoint_eq (f i))^
I: Type X: I -> pType Z: pType f: foralli0 : I, Core.Hom (X i0) Z i: I
1 @ dpoint_eq (f i) =
ap
(Pushout_rec Z (sig_rec (funi0 : I => f i0)) (unit_name pt)
(funi0 : I => point_eq (f i0)))
(pglue i) @
1
I: Type X: I -> pType Z: pType f: foralli0 : I, Core.Hom (X i0) Z i: I
dpoint_eq (f i) =
ap
(Pushout_rec Z (sig_rec (funi0 : I => f i0)) (unit_name pt)
(funi0 : I => point_eq (f i0)))
(pglue i)
I: Type X: I -> pType Z: pType f: foralli0 : I, Core.Hom (X i0) Z i: I
ap
(Pushout_rec Z (sig_rec (funi0 : I => f i0)) (unit_name pt)
(funi0 : I => point_eq (f i0)))
(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: foralli0 : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i0))
(Core.cat_comp g (fwedge_in' I X i0)) 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: foralli0 : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i0))
(Core.cat_comp g (fwedge_in' I X i0)) i: I
transport
(funw : Pushout (funi0 : I => (i0; 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: foralli0 : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i0))
(Core.cat_comp g (fwedge_in' I X i0)) 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: foralli0 : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i0))
(Core.cat_comp g (fwedge_in' I X i0)) 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: foralli0 : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i0))
(Core.cat_comp g (fwedge_in' I X i0)) 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: foralli0 : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i0))
(Core.cat_comp g (fwedge_in' I X i0)) 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: foralli0 : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i0))
(Core.cat_comp g (fwedge_in' I X i0)) 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: foralli0 : I,
Core.GpdHom (Core.cat_comp f (fwedge_in' I X i0))
(Core.cat_comp g (fwedge_in' I X i0)) 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 (funx0 : psusp X => wedge_pr1 (pushr x0)) (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 (funx0 : psusp X => wedge_pr1 (wedge_inl x0)) (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 : wedge_pr1 (pushr pt) = wedge_pr1 (pushr pt) =>
ap wedge_pr1 (ap wedge_inl (loop_susp_unit X x) @ wglue) @
x0)
((ap_compose pushr wedge_pr1 (loop_susp_unit X x))^ @
ap_const (loop_susp_unit X x) (wedge_pr1 (pushr pt))) @
(concat_p1
(ap wedge_pr1 (ap wedge_inl (loop_susp_unit X x) @ wglue)) @
(ap_pp wedge_pr1 (ap wedge_inl (loop_susp_unit X x)) wglue @
(ap
(funx0 : wedge_rec pmap_idmap pconst (pushl pt) =
wedge_rec pmap_idmap pconst (pushr pt) =>
ap wedge_pr1 (ap wedge_inl (loop_susp_unit X x)) @ x0)
(wedge_rec_beta_wglue pmap_idmap pconst) @
apD10
(ap11 1
((ap_compose wedge_inl wedge_pr1 (loop_susp_unit X x))^ @
ap_idmap (loop_susp_unit X x)))
(point_eq pmap_idmap @ (point_eq pconst)^)))))) @
(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 (funx0 : psusp X => wedge_pr2 (pushr x0)) (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 (funx0 : psusp X => wedge_pr2 (wedge_inl x0)) (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 : wedge_pr2 (pushr pt) = wedge_pr2 (pushr pt) =>
ap wedge_pr2 (ap wedge_inl (loop_susp_unit X x) @ wglue) @
x0)
((ap_compose pushr wedge_pr2 (loop_susp_unit X x))^ @
ap_idmap (loop_susp_unit X x)) @
(moveR_pM (loop_susp_unit X x) (loop_susp_unit X x)
(ap wedge_pr2 (ap wedge_inl (loop_susp_unit X x) @ wglue))
(ap_pp wedge_pr2 (ap wedge_inl (loop_susp_unit X x)) wglue @
((ap
(concat
(ap wedge_pr2 (ap wedge_inl (loop_susp_unit X x))))
(wedge_rec_beta_wglue pconst pmap_idmap) @
moveR_pM (point_eq pconst @ (point_eq pmap_idmap)^) 1
(ap wedge_pr2 (ap wedge_inl (loop_susp_unit X x)))
((ap_compose wedge_inl wedge_pr2 (loop_susp_unit X x))^ @
ap_const (loop_susp_unit X x)
(wedge_pr2 (wedge_inl pt)))) @
(concat_pV (loop_susp_unit X x))^)) @
(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 pt) = d (wedge_inl 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)
transport (funa : X \/ Y => P (wedge_incl X Y a)) wglue (d (pushl pt)) =
d (wedge_inl pt)
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 pt pt (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 pt pt (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 pt pt (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 pt pt (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)))
napply wedge_incl_comp3.Defined.(** A more elementary fact is that a wedge of [n]-connected types is [n]-connected. *)
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n) X H1: IsConnected (Tr n) Y
IsConnected (Tr n) (X \/ Y)
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n) X H1: IsConnected (Tr n) Y
IsConnected (Tr n) (X \/ Y)
H: Univalence X, Y: pType H0: IsConnected (Tr (-2)) X H1: IsConnected (Tr (-2)) Y
IsConnected (Tr (-2)) (X \/ Y)
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y
IsConnected (Tr n.+1) (X \/ Y)
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y
IsConnected (Tr n.+1) (X \/ Y)
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y
forallC : Type,
In (Tr n.+1) C -> forallf : X \/ Y -> C, NullHomotopy.NullHomotopy f
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y C: Type H': In (Tr n.+1) C f: X \/ Y -> C
NullHomotopy.NullHomotopy f
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y C: Type H': In (Tr n.+1) C f: X \/ Y -> C
forallx : X \/ Y, f x = f pt
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y C: Type H': In (Tr n.+1) C f: X \/ Y -> C
forallx : X \/ Y, f pt = f x
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y C: Type H': In (Tr n.+1) C f: X \/ Y -> C
forallx : X, f (pushl pt) = f (pushl x)
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y C: Type H': In (Tr n.+1) C f: X \/ Y -> C
forally : Y, f (pushl pt) = f (pushr y)
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y C: Type H': In (Tr n.+1) C f: X \/ Y -> C
transport
(funxy : Pushout (unit_name pt) (unit_name pt) => f (pushl pt) = f xy)
wglue (?Goal pt) =
?Goal0 pt
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y C: Type H': In (Tr n.+1) C f: X \/ Y -> C
forallx : X, f (pushl pt) = f (pushl x)
by rapply conn_point_elim.
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y C: Type H': In (Tr n.+1) C f: X \/ Y -> C
forally : Y, f (pushl pt) = f (pushr y)
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y C: Type H': In (Tr n.+1) C f: X \/ Y -> C
f (pushl pt) = f (pushr pt)
apply ap, wglue.
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y C: Type H': In (Tr n.+1) C f: X \/ Y -> C
transport
(funxy : Pushout (unit_name pt) (unit_name pt) => f (pushl pt) = f xy)
wglue (conn_point_elim n (funa : X => f (pushl pt) = f (pushl a)) 1 pt) =
conn_point_elim n (funa : Y => f (pushl pt) = f (pushr a)) (ap f wglue) pt
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y C: Type H': In (Tr n.+1) C f: X \/ Y -> C
conn_point_elim n (funa : X => f (pushl pt) = f (pushl a)) 1 pt @ ap f wglue =
conn_point_elim n (funa : Y => f (pushl pt) = f (pushr a)) (ap f wglue) pt
H: Univalence n: trunc_index X, Y: pType H0: IsConnected (Tr n.+1) X H1: IsConnected (Tr n.+1) Y C: Type H': In (Tr n.+1) C f: X \/ Y -> C