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.
Require Import Basics.Overture Basics.PathGroupoids Basics.Tactics Basics.Equivalences.Require Import Basics.Overture Basics.PathGroupoids Basics.Tactics Basics.Equivalences.Require Import Types.Sum Types.Bool Types.Paths Types.Forall.Require Import WildCat.Core WildCat.Bifunctor WildCat.Equiv.Require Import Colimits.Pushout.Require Import Cubical.DPath.Require Import Pointed.Core.LocalOpen Scope pointed_scope.LocalOpen Scope dpath_scope.LocalOpen Scope path_scope.(* Definition of smash product *)Definitionsum_to_prod (XY : pType) : X + Y -> X * Y
:= sum_ind _ (funx => (x, point Y)) (funy => (point X, y)).Definitionsum_to_boolXY : X + Y -> Bool
:= sum_ind _ (fun_ => false) (fun_ => true).DefinitionSmash@{u v w | u <= w, v <= w} (X : pType@{u}) (Y : pType@{v}) : pType@{w}
:= [Pushout@{w w w w} (sum_to_prod@{w w w} X Y) (sum_to_bool@{u v w} X Y), pushl (point X, point Y)].SectionSmash.Context {XY : pType}.Definitionsm (x : X) (y : Y) : Smash X Y := pushl (x, y).Definitionauxl : Smash X Y := pushr false.Definitionauxr : Smash X Y := pushr true.Definitiongluel (x : X) : sm x pt = auxl
:= pglue (f:=sum_to_prod X Y) (g:=sum_to_bool X Y) (inl x).Definitiongluer (y : Y) : sm pt y = auxr
:= pglue (f:=sum_to_prod X Y) (g:=sum_to_bool X Y) (inr y).Definitiongluel' (xx' : X) : sm x pt = sm x' pt
:= gluel x @ (gluel x')^.Definitiongluer' (yy' : Y) : sm pt y = sm pt y'
:= gluer y @ (gluer y')^.Definitionglue (x : X) (y : Y) : sm x pt = sm pt y
:= gluel' x pt @ gluer' pt y.
X, Y: pType y: Y
glue pt y = gluer' pt y
X, Y: pType y: Y
glue pt y = gluer' pt y
X, Y: pType y: Y
glue pt y = 1 @ gluer' pt y
apply whiskerR, concat_pV.Defined.
X, Y: pType x: X
glue x pt = gluel' x pt
X, Y: pType x: X
glue x pt = gluel' x pt
X, Y: pType x: X
glue x pt = gluel' x pt @ 1
apply whiskerL, concat_pV.Defined.
X, Y: pType x, x': X p: x = x'
ap (funt : X => sm t pt) p = gluel' x x'
X, Y: pType x, x': X p: x = x'
ap (funt : X => sm t pt) p = gluel' x x'
X, Y: pType x: X
ap (funt : X => sm t pt) 1 = gluel' x x
X, Y: pType x: X
gluel' x x = ap (funt : X => sm t pt) 1
apply concat_pV.Defined.
X, Y: pType y, y': Y p: y = y'
ap (sm pt) p = gluer' y y'
X, Y: pType y, y': Y p: y = y'
ap (sm pt) p = gluer' y y'
X, Y: pType y: Y
ap (sm pt) 1 = gluer' y y
X, Y: pType y: Y
gluer' y y = ap (sm pt) 1
apply concat_pV.Defined.
X, Y: pType P: Smash X Y -> Type Psm: forall (a : X) (b : Y), P (sm a b) Pl: P auxl Pr: P auxr Pgl: foralla : X, DPath P (gluel a) (Psm a pt) Pl Pgr: forallb : Y, DPath P (gluer b) (Psm pt b) Pr
forallx : Smash X Y, P x
X, Y: pType P: Smash X Y -> Type Psm: forall (a : X) (b : Y), P (sm a b) Pl: P auxl Pr: P auxr Pgl: foralla : X, DPath P (gluel a) (Psm a pt) Pl Pgr: forallb : Y, DPath P (gluer b) (Psm pt b) Pr
forallx : Smash X Y, P x
X, Y: pType P: Smash X Y -> Type Psm: forall (a : X) (b : Y), P (sm a b) Pl: P auxl Pr: P auxr Pgl: foralla : X, DPath P (gluel a) (Psm a pt) Pl Pgr: forallb : Y, DPath P (gluer b) (Psm pt b) Pr
forallb : X * Y, P (pushl b)
X, Y: pType P: Smash X Y -> Type Psm: forall (a : X) (b : Y), P (sm a b) Pl: P auxl Pr: P auxr Pgl: foralla : X, DPath P (gluel a) (Psm a pt) Pl Pgr: forallb : Y, DPath P (gluer b) (Psm pt b) Pr
forallc : Bool, P (pushr c)
X, Y: pType P: Smash X Y -> Type Psm: forall (a : X) (b : Y), P (sm a b) Pl: P auxl Pr: P auxr Pgl: foralla : X, DPath P (gluel a) (Psm a pt) Pl Pgr: forallb : Y, DPath P (gluer b) (Psm pt b) Pr
foralla : X + Y,
transport P (pglue a) (?pushb (sum_to_prod X Y a)) =
?pushc (sum_to_bool X Y a)
X, Y: pType P: Smash X Y -> Type Psm: forall (a : X) (b : Y), P (sm a b) Pl: P auxl Pr: P auxr Pgl: foralla : X, DPath P (gluel a) (Psm a pt) Pl Pgr: forallb : Y, DPath P (gluer b) (Psm pt b) Pr
forallb : X * Y, P (pushl b)
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a: X b: Y
P (pushl (a, b))
apply Psm.
X, Y: pType P: Smash X Y -> Type Psm: forall (a : X) (b : Y), P (sm a b) Pl: P auxl Pr: P auxr Pgl: foralla : X, DPath P (gluel a) (Psm a pt) Pl Pgr: forallb : Y, DPath P (gluer b) (Psm pt b) Pr
forallc : Bool, P (pushr c)
exact (Bool_ind _ Pr Pl).
X, Y: pType P: Smash X Y -> Type Psm: forall (a : X) (b : Y), P (sm a b) Pl: P auxl Pr: P auxr Pgl: foralla : X, DPath P (gluel a) (Psm a pt) Pl Pgr: forallb : Y, DPath P (gluer b) (Psm pt b) Pr
foralla : X + Y,
transport P (pglue a)
((funb0 : X * Y => (fun (a0 : X) (b : Y) => Psm a0 b) (fst b0) (snd b0))
(sum_to_prod X Y a)) =
Bool_ind (funb : Bool => P (pushr b)) Pr Pl (sum_to_bool X Y a)
X, Y: pType P: Smash X Y -> Type Psm: forall (a : X) (b : Y), P (sm a b) Pl: P auxl Pr: P auxr Pgl: foralla : X, DPath P (gluel a) (Psm a pt) Pl Pgr: forallb : Y, DPath P (gluer b) (Psm pt b) Pr
foralla : X,
(funs : X + Y =>
transport P (pglue s)
((funb0 : X * Y => (fun (a0 : X) (b : Y) => Psm a0 b) (fst b0) (snd b0))
(sum_to_prod X Y s)) =
Bool_ind (funb : Bool => P (pushr b)) Pr Pl (sum_to_bool X Y s))
(inl a)
X, Y: pType P: Smash X Y -> Type Psm: forall (a : X) (b : Y), P (sm a b) Pl: P auxl Pr: P auxr Pgl: foralla : X, DPath P (gluel a) (Psm a pt) Pl Pgr: forallb : Y, DPath P (gluer b) (Psm pt b) Pr
forallb : Y,
(funs : X + Y =>
transport P (pglue s)
((funb0 : X * Y => (fun (a : X) (b1 : Y) => Psm a b1) (fst b0) (snd b0))
(sum_to_prod X Y s)) =
Bool_ind (funb0 : Bool => P (pushr b0)) Pr Pl (sum_to_bool X Y s))
(inr b)
X, Y: pType P: Smash X Y -> Type Psm: forall (a : X) (b : Y), P (sm a b) Pl: P auxl Pr: P auxr Pgl: foralla : X, DPath P (gluel a) (Psm a pt) Pl Pgr: forallb : Y, DPath P (gluer b) (Psm pt b) Pr
foralla : X,
(funs : X + Y =>
transport P (pglue s)
((funb0 : X * Y => (fun (a0 : X) (b : Y) => Psm a0 b) (fst b0) (snd b0))
(sum_to_prod X Y s)) =
Bool_ind (funb : Bool => P (pushr b)) Pr Pl (sum_to_bool X Y s))
(inl a)
exact Pgl.
X, Y: pType P: Smash X Y -> Type Psm: forall (a : X) (b : Y), P (sm a b) Pl: P auxl Pr: P auxr Pgl: foralla : X, DPath P (gluel a) (Psm a pt) Pl Pgr: forallb : Y, DPath P (gluer b) (Psm pt b) Pr
forallb : Y,
(funs : X + Y =>
transport P (pglue s)
((funb0 : X * Y => (fun (a : X) (b1 : Y) => Psm a b1) (fst b0) (snd b0))
(sum_to_prod X Y s)) =
Bool_ind (funb0 : Bool => P (pushr b0)) Pr Pl (sum_to_bool X Y s))
(inr b)
exact Pgr.Defined.DefinitionSmash_ind_beta_gluel {P : Smash X Y -> Type}
{Psm : forallab, P (sm a b)} {Pl : P auxl} {Pr : P auxr}
(Pgl : foralla, DPath P (gluel a) (Psm a pt) Pl)
(Pgr : forallb, DPath P (gluer b) (Psm pt b) Pr) (a : X)
: apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluel a) = Pgl a
:= Pushout_ind_beta_pglue P _ _ _ (inl a).DefinitionSmash_ind_beta_gluer {P : Smash X Y -> Type}
{Psm : forallab, P (sm a b)} {Pl : P auxl} {Pr : P auxr}
(Pgl : foralla, DPath P (gluel a) (Psm a pt) Pl)
(Pgr : forallb, DPath P (gluer b) (Psm pt b) Pr) (b : Y)
: apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluer b) = Pgr b
:= Pushout_ind_beta_pglue P _ _ _ (inr b).
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: X
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluel' a b) = Pgl a @Dp (Pgl b) ^D
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: X
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluel' a b) = Pgl a @Dp (Pgl b) ^D
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: X
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluel a) @Dp
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluel b)^ = Pgl a @Dp (Pgl b) ^D
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: X
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluel a) = Pgl a
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: X
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: X
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: X
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: X
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluel b) = Pgl b
apply Smash_ind_beta_gluel.Defined.
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: Y
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluer' a b) = Pgr a @Dp (Pgr b) ^D
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: Y
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluer' a b) = Pgr a @Dp (Pgr b) ^D
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: Y
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluer a) @Dp
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluer b)^ = Pgr a @Dp (Pgr b) ^D
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: Y
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluer a) = Pgr a
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: Y
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: Y
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: Y
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a, b: Y
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluer b) = Pgr b
apply Smash_ind_beta_gluer.Defined.
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a: X b: Y
apD (Smash_ind Psm Pl Pr Pgl Pgr) (glue a b) =
(Pgl a @Dp (Pgl pt) ^D) @Dp (Pgr pt @Dp (Pgr b) ^D)
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a: X b: Y
apD (Smash_ind Psm Pl Pr Pgl Pgr) (glue a b) =
(Pgl a @Dp (Pgl pt) ^D) @Dp (Pgr pt @Dp (Pgr b) ^D)
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a: X b: Y
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluel' a pt) @Dp
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluer' pt b) =
(Pgl a @Dp (Pgl pt) ^D) @Dp (Pgr pt @Dp (Pgr b) ^D)
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a: X b: Y
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluel' a pt) = Pgl a @Dp (Pgl pt) ^D
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a: X b: Y
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluer' pt b) = Pgr pt @Dp (Pgr b) ^D
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a: X b: Y
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluel' a pt) = Pgl a @Dp (Pgl pt) ^D
apply Smash_ind_beta_gluel'.
X, Y: pType P: Smash X Y -> Type Psm: forall (a0 : X) (b0 : Y), P (sm a0 b0) Pl: P auxl Pr: P auxr Pgl: foralla0 : X, DPath P (gluel a0) (Psm a0 pt) Pl Pgr: forallb0 : Y, DPath P (gluer b0) (Psm pt b0) Pr a: X b: Y
apD (Smash_ind Psm Pl Pr Pgl Pgr) (gluer' pt b) = Pgr pt @Dp (Pgr b) ^D
apply Smash_ind_beta_gluer'.Defined.DefinitionSmash_rec {P : Type} (Psm : X -> Y -> P) (PlPr : P)
(Pgl : foralla, Psm a pt = Pl) (Pgr : forallb, Psm pt b = Pr)
: Smash X Y -> P
:= Smash_ind Psm Pl Pr (funx => dp_const (Pgl x)) (funx => dp_const (Pgr x)).(* Version of smash_rec that forces (Pgl pt) and (Pgr pt) to be idpath *)DefinitionSmash_rec' {P : Type} {Psm : X -> Y -> P}
(Pgl : foralla, Psm a pt = Psm pt pt) (Pgr : forallb, Psm pt b = Psm pt pt)
(ql : Pgl pt = 1) (qr : Pgr pt = 1)
: Smash X Y -> P
:= Smash_rec Psm (Psm pt pt) (Psm pt pt) Pgl Pgr.
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb : Y, Psm pt b = Pr a: X
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluel a) = Pgl a
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb : Y, Psm pt b = Pr a: X
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluel a) = Pgl a
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb : Y, Psm pt b = Pr a: X
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluel a) = dp_const^-1 (dp_const (Pgl a))
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb : Y, Psm pt b = Pr a: X
dp_const (ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluel a)) = dp_const (Pgl a)
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb : Y, Psm pt b = Pr a: X
apD (Smash_rec Psm Pl Pr Pgl Pgr) (gluel a) = dp_const (Pgl a)
napply Smash_ind_beta_gluel.Defined.
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla : X, Psm a pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr b: Y
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluer b) = Pgr b
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla : X, Psm a pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr b: Y
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluer b) = Pgr b
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla : X, Psm a pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr b: Y
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluer b) = dp_const^-1 (dp_const (Pgr b))
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla : X, Psm a pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr b: Y
dp_const (ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluer b)) = dp_const (Pgr b)
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla : X, Psm a pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr b: Y
apD (Smash_rec Psm Pl Pr Pgl Pgr) (gluer b) = dp_const (Pgr b)
napply Smash_ind_beta_gluer.Defined.
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr a, b: X
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluel' a b) = Pgl a @ (Pgl b)^
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr a, b: X
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluel' a b) = Pgl a @ (Pgl b)^
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr a, b: X
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluel a) @
(ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluel b))^ = Pgl a @ (Pgl b)^
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr a, b: X
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluel a) = Pgl a
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr a, b: X
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr a, b: Y
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluer b) = Pgr b
apply Smash_rec_beta_gluer.Defined.
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr a: X b: Y
ap (Smash_rec Psm Pl Pr Pgl Pgr) (glue a b) =
(Pgl a @ (Pgl pt)^) @ (Pgr pt @ (Pgr b)^)
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr a: X b: Y
ap (Smash_rec Psm Pl Pr Pgl Pgr) (glue a b) =
(Pgl a @ (Pgl pt)^) @ (Pgr pt @ (Pgr b)^)
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr a: X b: Y
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluel' a pt) @
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluer' pt b) =
(Pgl a @ (Pgl pt)^) @ (Pgr pt @ (Pgr b)^)
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr a: X b: Y
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluel' a pt) = Pgl a @ (Pgl pt)^
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr a: X b: Y
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluer' pt b) = Pgr pt @ (Pgr b)^
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr a: X b: Y
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluel' a pt) = Pgl a @ (Pgl pt)^
apply Smash_rec_beta_gluel'.
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla0 : X, Psm a0 pt = Pl Pgr: forallb0 : Y, Psm pt b0 = Pr a: X b: Y
ap (Smash_rec Psm Pl Pr Pgl Pgr) (gluer' pt b) = Pgr pt @ (Pgr b)^
apply Smash_rec_beta_gluer'.Defined.EndSmash.Arguments sm : simpl never.Arguments auxl : simpl never.Arguments gluel : simpl never.Arguments gluer : simpl never.(** ** Miscellaneous lemmas about Smash *)(** A version of [Smash_ind] specifically for proving that two functions from a [Smash] are homotopic. *)
A, B: pType P: Type f, g: Smash A B -> P Hsm: forall (a : A) (b : B), f (sm a b) = g (sm a b) Hl: f auxl = g auxl Hr: f auxr = g auxr Hgluel: foralla : A, ap f (gluel a) @ Hl = Hsm a pt @ ap g (gluel a) Hgluer: forallb : B, ap f (gluer b) @ Hr = Hsm pt b @ ap g (gluer b)
f == g
A, B: pType P: Type f, g: Smash A B -> P Hsm: forall (a : A) (b : B), f (sm a b) = g (sm a b) Hl: f auxl = g auxl Hr: f auxr = g auxr Hgluel: foralla : A, ap f (gluel a) @ Hl = Hsm a pt @ ap g (gluel a) Hgluer: forallb : B, ap f (gluer b) @ Hr = Hsm pt b @ ap g (gluer b)
f == g
A, B: pType P: Type f, g: Smash A B -> P Hsm: forall (a : A) (b : B), f (sm a b) = g (sm a b) Hl: f auxl = g auxl Hr: f auxr = g auxr Hgluel: foralla : A, ap f (gluel a) @ Hl = Hsm a pt @ ap g (gluel a) Hgluer: forallb : B, ap f (gluer b) @ Hr = Hsm pt b @ ap g (gluer b)
foralla : A, DPath (funx : Smash A B => f x = g x) (gluel a) (Hsm a pt) Hl
A, B: pType P: Type f, g: Smash A B -> P Hsm: forall (a : A) (b : B), f (sm a b) = g (sm a b) Hl: f auxl = g auxl Hr: f auxr = g auxr Hgluel: foralla : A, ap f (gluel a) @ Hl = Hsm a pt @ ap g (gluel a) Hgluer: forallb : B, ap f (gluer b) @ Hr = Hsm pt b @ ap g (gluer b)
forallb : B, DPath (funx : Smash A B => f x = g x) (gluer b) (Hsm pt b) Hr
A, B: pType P: Type f, g: Smash A B -> P Hsm: forall (a : A) (b : B), f (sm a b) = g (sm a b) Hl: f auxl = g auxl Hr: f auxr = g auxr Hgluel: foralla : A, ap f (gluel a) @ Hl = Hsm a pt @ ap g (gluel a) Hgluer: forallb : B, ap f (gluer b) @ Hr = Hsm pt b @ ap g (gluer b)
foralla : A, DPath (funx : Smash A B => f x = g x) (gluel a) (Hsm a pt) Hl
A, B: pType P: Type f, g: Smash A B -> P Hsm: forall (a0 : A) (b : B), f (sm a0 b) = g (sm a0 b) Hl: f auxl = g auxl Hr: f auxr = g auxr Hgluel: foralla0 : A, ap f (gluel a0) @ Hl = Hsm a0 pt @ ap g (gluel a0) Hgluer: forallb : B, ap f (gluer b) @ Hr = Hsm pt b @ ap g (gluer b) a: A
DPath (funx : Smash A B => f x = g x) (gluel a) (Hsm a pt) Hl
A, B: pType P: Type f, g: Smash A B -> P Hsm: forall (a0 : A) (b : B), f (sm a0 b) = g (sm a0 b) Hl: f auxl = g auxl Hr: f auxr = g auxr Hgluel: foralla0 : A, ap f (gluel a0) @ Hl = Hsm a0 pt @ ap g (gluel a0) Hgluer: forallb : B, ap f (gluer b) @ Hr = Hsm pt b @ ap g (gluer b) a: A
ap f (gluel a) @ Hl = Hsm a pt @ ap g (gluel a)
exact (Hgluel a).
A, B: pType P: Type f, g: Smash A B -> P Hsm: forall (a : A) (b : B), f (sm a b) = g (sm a b) Hl: f auxl = g auxl Hr: f auxr = g auxr Hgluel: foralla : A, ap f (gluel a) @ Hl = Hsm a pt @ ap g (gluel a) Hgluer: forallb : B, ap f (gluer b) @ Hr = Hsm pt b @ ap g (gluer b)
forallb : B, DPath (funx : Smash A B => f x = g x) (gluer b) (Hsm pt b) Hr
A, B: pType P: Type f, g: Smash A B -> P Hsm: forall (a : A) (b0 : B), f (sm a b0) = g (sm a b0) Hl: f auxl = g auxl Hr: f auxr = g auxr Hgluel: foralla : A, ap f (gluel a) @ Hl = Hsm a pt @ ap g (gluel a) Hgluer: forallb0 : B, ap f (gluer b0) @ Hr = Hsm pt b0 @ ap g (gluer b0) b: B
DPath (funx : Smash A B => f x = g x) (gluer b) (Hsm pt b) Hr
A, B: pType P: Type f, g: Smash A B -> P Hsm: forall (a : A) (b0 : B), f (sm a b0) = g (sm a b0) Hl: f auxl = g auxl Hr: f auxr = g auxr Hgluel: foralla : A, ap f (gluel a) @ Hl = Hsm a pt @ ap g (gluel a) Hgluer: forallb0 : B, ap f (gluer b0) @ Hr = Hsm pt b0 @ ap g (gluer b0) b: B
ap f (gluer b) @ Hr = Hsm pt b @ ap g (gluer b)
exact (Hgluer b).Defined.(** A version of [Smash_ind]j specifically for proving that the composition of two functions is the identity map. *)
A, B: pType P: Type f: Smash A B -> P g: P -> Smash A B Hsm: forall (a : A) (b : B), g (f (sm a b)) = sm a b Hl: g (f auxl) = auxl Hr: g (f auxr) = auxr Hgluel: foralla : A, ap g (ap f (gluel a)) @ Hl = Hsm a pt @ gluel a Hgluer: forallb : B, ap g (ap f (gluer b)) @ Hr = Hsm pt b @ gluer b
g o f == idmap
A, B: pType P: Type f: Smash A B -> P g: P -> Smash A B Hsm: forall (a : A) (b : B), g (f (sm a b)) = sm a b Hl: g (f auxl) = auxl Hr: g (f auxr) = auxr Hgluel: foralla : A, ap g (ap f (gluel a)) @ Hl = Hsm a pt @ gluel a Hgluer: forallb : B, ap g (ap f (gluer b)) @ Hr = Hsm pt b @ gluer b
g o f == idmap
A, B: pType P: Type f: Smash A B -> P g: P -> Smash A B Hsm: forall (a : A) (b : B), g (f (sm a b)) = sm a b Hl: g (f auxl) = auxl Hr: g (f auxr) = auxr Hgluel: foralla : A, ap g (ap f (gluel a)) @ Hl = Hsm a pt @ gluel a Hgluer: forallb : B, ap g (ap f (gluer b)) @ Hr = Hsm pt b @ gluer b
foralla : A,
DPath (funx : Smash A B => (g o f) x = idmap x) (gluel a) (Hsm a pt) Hl
A, B: pType P: Type f: Smash A B -> P g: P -> Smash A B Hsm: forall (a : A) (b : B), g (f (sm a b)) = sm a b Hl: g (f auxl) = auxl Hr: g (f auxr) = auxr Hgluel: foralla : A, ap g (ap f (gluel a)) @ Hl = Hsm a pt @ gluel a Hgluer: forallb : B, ap g (ap f (gluer b)) @ Hr = Hsm pt b @ gluer b
forallb : B,
DPath (funx : Smash A B => (g o f) x = idmap x) (gluer b) (Hsm pt b) Hr
A, B: pType P: Type f: Smash A B -> P g: P -> Smash A B Hsm: forall (a : A) (b : B), g (f (sm a b)) = sm a b Hl: g (f auxl) = auxl Hr: g (f auxr) = auxr Hgluel: foralla : A, ap g (ap f (gluel a)) @ Hl = Hsm a pt @ gluel a Hgluer: forallb : B, ap g (ap f (gluer b)) @ Hr = Hsm pt b @ gluer b
foralla : A,
DPath (funx : Smash A B => (g o f) x = idmap x) (gluel a) (Hsm a pt) Hl
A, B: pType P: Type f: Smash A B -> P g: P -> Smash A B Hsm: forall (a0 : A) (b : B), g (f (sm a0 b)) = sm a0 b Hl: g (f auxl) = auxl Hr: g (f auxr) = auxr Hgluel: foralla0 : A, ap g (ap f (gluel a0)) @ Hl = Hsm a0 pt @ gluel a0 Hgluer: forallb : B, ap g (ap f (gluer b)) @ Hr = Hsm pt b @ gluer b a: A
DPath (funx : Smash A B => g (f x) = x) (gluel a) (Hsm a pt) Hl
A, B: pType P: Type f: Smash A B -> P g: P -> Smash A B Hsm: forall (a0 : A) (b : B), g (f (sm a0 b)) = sm a0 b Hl: g (f auxl) = auxl Hr: g (f auxr) = auxr Hgluel: foralla0 : A, ap g (ap f (gluel a0)) @ Hl = Hsm a0 pt @ gluel a0 Hgluer: forallb : B, ap g (ap f (gluer b)) @ Hr = Hsm pt b @ gluer b a: A
ap g (ap f (gluel a)) @ Hl = Hsm a pt @ gluel a
exact (Hgluel a).
A, B: pType P: Type f: Smash A B -> P g: P -> Smash A B Hsm: forall (a : A) (b : B), g (f (sm a b)) = sm a b Hl: g (f auxl) = auxl Hr: g (f auxr) = auxr Hgluel: foralla : A, ap g (ap f (gluel a)) @ Hl = Hsm a pt @ gluel a Hgluer: forallb : B, ap g (ap f (gluer b)) @ Hr = Hsm pt b @ gluer b
forallb : B,
DPath (funx : Smash A B => (g o f) x = idmap x) (gluer b) (Hsm pt b) Hr
A, B: pType P: Type f: Smash A B -> P g: P -> Smash A B Hsm: forall (a : A) (b0 : B), g (f (sm a b0)) = sm a b0 Hl: g (f auxl) = auxl Hr: g (f auxr) = auxr Hgluel: foralla : A, ap g (ap f (gluel a)) @ Hl = Hsm a pt @ gluel a Hgluer: forallb0 : B, ap g (ap f (gluer b0)) @ Hr = Hsm pt b0 @ gluer b0 b: B
DPath (funx : Smash A B => g (f x) = x) (gluer b) (Hsm pt b) Hr
A, B: pType P: Type f: Smash A B -> P g: P -> Smash A B Hsm: forall (a : A) (b0 : B), g (f (sm a b0)) = sm a b0 Hl: g (f auxl) = auxl Hr: g (f auxr) = auxr Hgluel: foralla : A, ap g (ap f (gluel a)) @ Hl = Hsm a pt @ gluel a Hgluer: forallb0 : B, ap g (ap f (gluer b0)) @ Hr = Hsm pt b0 @ gluer b0 b: B
ap g (ap f (gluer b)) @ Hr = Hsm pt b @ gluer b
exact (Hgluer b).Defined.(** ** Functoriality of the smash product *)
A, B, X, Y: pType f: A $-> X g: B $-> Y
Smash A B $-> Smash X Y
A, B, X, Y: pType f: A $-> X g: B $-> Y
Smash A B $-> Smash X Y
A, B, X, Y: pType f: A $-> X g: B $-> Y
Smash A B -> Smash X Y
A, B, X, Y: pType f: A $-> X g: B $-> Y
?f pt = pt
A, B, X, Y: pType f: A $-> X g: B $-> Y
Smash A B -> Smash X Y
A, B, X, Y: pType f: A $-> X g: B $-> Y
foralla : A, (fun (a0 : A) (b : B) => sm (f a0) (g b)) a pt = auxl
A, B, X, Y: pType f: A $-> X g: B $-> Y
forallb : B, (fun (a : A) (b0 : B) => sm (f a) (g b0)) pt b = auxr
A, B, X, Y: pType f: A $-> X g: B $-> Y
foralla : A, (fun (a0 : A) (b : B) => sm (f a0) (g b)) a pt = auxl
A, B, X, Y: pType f: A $-> X g: B $-> Y a: A
sm (f a) (g pt) = auxl
A, B, X, Y: pType f: A $-> X g: B $-> Y a: A
sm (f a) (g pt) = sm (f a) pt
exact (ap011 _ 1 (point_eq g)).
A, B, X, Y: pType f: A $-> X g: B $-> Y
forallb : B, (fun (a : A) (b0 : B) => sm (f a) (g b0)) pt b = auxr
A, B, X, Y: pType f: A $-> X g: B $-> Y b: B
sm (f pt) (g b) = auxr
A, B, X, Y: pType f: A $-> X g: B $-> Y b: B
sm (f pt) (g b) = sm pt (g b)
exact (ap011 _ (point_eq f) 1).
A, B, X, Y: pType f: A $-> X g: B $-> Y
Smash_rec (fun (a : A) (b : B) => sm (f a) (g b)) auxl auxr
(funa : A =>
ap011 sm 1 (point_eq g) @ gluel (f a)
:
(fun (a0 : A) (b : B) => sm (f a0) (g b)) a pt = auxl)
(funb : B =>
ap011 sm (point_eq f) 1 @ gluer (g b)
:
(fun (a : A) (b0 : B) => sm (f a) (g b0)) pt b = auxr)
pt =
pt
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx0 : X, f x0 = h x0 q: forallx0 : Y, g x0 = k x0 x: [X, point2]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx0 : X, f x0 = h x0 q: forallx0 : Y, g x0 = k x0 x: [X, point2]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx0 : X, f x0 = h x0 q: forallx0 : Y, g x0 = k x0 x: [X, point2]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx0 : X, f x0 = h x0 q: forallx0 : Y, g x0 = k x0 x: [X, point2]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx0 : X, f x0 = h x0 q: forallx0 : Y, g x0 = k x0 x: [X, point2]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx0 : X, f x0 = h x0 q: forallx0 : Y, g x0 = k x0 x: [X, point2]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx0 : X, f x0 = h x0 q: forallx0 : Y, g x0 = k x0 x: [X, point2]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx0 : X, f x0 = h x0 q: forallx0 : Y, g x0 = k x0 x: [X, point2]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx0 : X, f x0 = h x0 q: forallx0 : Y, g x0 = k x0 x: [X, point2]
ap (sm (f x)) (q point1 @ 1) = ap (sm (f x)) (q pt) @ 1
napply ap_pp.
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx : X, f x = h x q: forallx : Y, g x = k x
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx : X, f x = h x q: forallx : Y, g x = k x y: [Y, point1]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx : X, f x = h x q: forallx : Y, g x = k x y: [Y, point1]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx : X, f x = h x q: forallx : Y, g x = k x y: [Y, point1]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx : X, f x = h x q: forallx : Y, g x = k x y: [Y, point1]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx : X, f x = h x q: forallx : Y, g x = k x y: [Y, point1]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx : X, f x = h x q: forallx : Y, g x = k x y: [Y, point1]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx : X, f x = h x q: forallx : Y, g x = k x y: [Y, point1]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx : X, f x = h x q: forallx : Y, g x = k x y: [Y, point1]
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx : X, f x = h x q: forallx : Y, g x = k x y: [Y, point1]
ap011 sm (p point2 @ 1) 1 = ap011 sm (p pt) 1 @ 1
exact (ap011_pp _ _ _ 11).
X: Type point2: IsPointed X Y: Type point1: IsPointed Y A, B: Type f, h: X -> A g, k: Y -> B p: forallx : X, f x = h x q: forallx : Y, g x = k x
exact (functor_smash_compose f g h i).Defined.(** ** Symmetry of the smash product *)Definitionpswap (XY : pType) : Smash X Y $-> Smash Y X
:= Build_pMap (Smash_rec (flip sm) auxr auxl gluer gluel) 1.
X, Y: pType
pswap X Y $o pswap Y X $== pmap_idmap
X, Y: pType
pswap X Y $o pswap Y X $== pmap_idmap
X, Y: pType
pswap X Y $o pswap Y X == pmap_idmap
X, Y: pType
?p pt = dpoint_eq (pswap X Y $o pswap Y X) @ (dpoint_eq pmap_idmap)^
X, Y: pType
pswap X Y $o pswap Y X == pmap_idmap
X, Y: pType
forall (a : Y) (b : X), pswap X Y (pswap Y X (sm a b)) = sm a b
X, Y: pType
pswap X Y (pswap Y X auxl) = auxl
X, Y: pType
pswap X Y (pswap Y X auxr) = auxr
X, Y: pType
foralla : Y,
ap (pswap X Y) (ap (pswap Y X) (gluel a)) @ ?Hl = ?Hsm a pt @ gluel a
X, Y: pType
forallb : X,
ap (pswap X Y) (ap (pswap Y X) (gluer b)) @ ?Hr = ?Hsm pt b @ gluer b
X, Y: pType
foralla : Y,
ap (pswap X Y) (ap (pswap Y X) (gluel a)) @ 1 =
(fun (a0 : Y) (b : X) => 1) a pt @ gluel a
X, Y: pType
forallb : X,
ap (pswap X Y) (ap (pswap Y X) (gluer b)) @ 1 =
(fun (a : Y) (b0 : X) => 1) pt b @ gluer b
X, Y: pType
foralla : Y,
ap (pswap X Y) (ap (pswap Y X) (gluel a)) @ 1 =
(fun (a0 : Y) (b : X) => 1) a pt @ gluel a
X, Y: pType y: Y
ap (pswap X Y) (ap (pswap Y X) (gluel y)) @ 1 =
(fun (a : Y) (b : X) => 1) y pt @ gluel y
X, Y: pType y: Y
ap (pswap X Y) (ap (pswap Y X) (gluel y)) = gluel y
X, Y: pType y: Y
ap (pswap Y X) (gluel y) = ?Goal
X, Y: pType y: Y
ap (pswap X Y) ?Goal = gluel y
X, Y: pType y: Y
ap (pswap X Y) (gluer y) = gluel y
napply Smash_rec_beta_gluer.
X, Y: pType
forallb : X,
ap (pswap X Y) (ap (pswap Y X) (gluer b)) @ 1 =
(fun (a : Y) (b0 : X) => 1) pt b @ gluer b
X, Y: pType x: X
ap (pswap X Y) (ap (pswap Y X) (gluer x)) @ 1 =
(fun (a : Y) (b : X) => 1) pt x @ gluer x
X, Y: pType x: X
ap (pswap X Y) (ap (pswap Y X) (gluer x)) = gluer x
X, Y: pType x: X
ap (pswap Y X) (gluer x) = ?Goal
X, Y: pType x: X
ap (pswap X Y) ?Goal = gluer x
X, Y: pType x: X
ap (pswap X Y) (gluel x) = gluer x
napply Smash_rec_beta_gluel.
X, Y: pType
Smash_ind_FFlr (pswap Y X) (pswap X Y) (fun (a : Y) (b : X) => 1) 11
(funy : Y =>
letX0 := equiv_fun equiv_p1_1q in
X0
(ap (ap (pswap X Y)) (Smash_rec_beta_gluel gluer gluel y) @
Smash_rec_beta_gluer gluer gluel y))
(funx : X =>
letX0 := equiv_fun equiv_p1_1q in
X0
(ap (ap (pswap X Y)) (Smash_rec_beta_gluer gluer gluel x) @
Smash_rec_beta_gluel gluer gluel x))
pt =
dpoint_eq (pswap X Y $o pswap Y X) @ (dpoint_eq pmap_idmap)^
reflexivity.Defined.
X, Y: pType
Smash X Y $<~> Smash Y X
X, Y: pType
Smash X Y $<~> Smash Y X
X, Y: pType
Smash X Y $-> Smash Y X
X, Y: pType
Smash Y X $-> Smash X Y
X, Y: pType
?f $o ?g $== Id (Smash Y X)
X, Y: pType
?g $o ?f $== Id (Smash X Y)
X, Y: pType
pswap X Y $o pswap Y X $== Id (Smash Y X)
X, Y: pType
pswap Y X $o pswap X Y $== Id (Smash X Y)
1,2: exact pswap_pswap.Defined.
A, B, X, Y: pType f: A $-> X g: B $-> Y
pswap X Y $o functor_smash f g $== functor_smash g f $o pswap A B
A, B, X, Y: pType f: A $-> X g: B $-> Y
pswap X Y $o functor_smash f g $== functor_smash g f $o pswap A B
A: Type point2: IsPointed A B: Type point1: IsPointed B X, Y: Type f: A -> X g: B -> Y