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 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 (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 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 (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 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 (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 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 (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 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 (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 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 (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 a, b: 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 a, b: 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 a, b: 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 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 (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 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 (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 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 (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 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 (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 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 (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 a, b: Y
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 a, b: Y
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 a, b: Y
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 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 (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 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 (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 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 (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 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 (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 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 (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 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 (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 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 (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 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: foralla : X, Psm a 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: foralla : X, Psm a 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: foralla : X, Psm a 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: foralla : X, Psm a 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: foralla : X, Psm a 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: forallb : Y, Psm pt b = 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: forallb : Y, Psm pt b = 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: forallb : Y, Psm pt b = 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: forallb : Y, Psm pt b = 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: forallb : Y, Psm pt b = 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: foralla : X, Psm a pt = Pl Pgr: forallb : Y, Psm pt b = 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: foralla : X, Psm a pt = Pl Pgr: forallb : Y, Psm pt b = 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: foralla : X, Psm a pt = Pl Pgr: forallb : Y, Psm pt b = 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: foralla : X, Psm a pt = Pl Pgr: forallb : Y, Psm pt b = 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: foralla : X, Psm a pt = Pl Pgr: forallb : Y, Psm pt b = Pr a, b: X
X, Y: pType P: Type Psm: X -> Y -> P Pl, Pr: P Pgl: foralla : X, Psm a pt = Pl Pgr: forallb : Y, Psm pt b = 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: foralla : X, Psm a pt = Pl Pgr: forallb : Y, Psm pt b = 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: foralla : X, Psm a pt = Pl Pgr: forallb : Y, Psm pt b = 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: foralla : X, Psm a pt = Pl Pgr: forallb : Y, Psm pt b = 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: foralla : X, Psm a pt = Pl Pgr: forallb : Y, Psm pt b = 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: foralla : X, Psm a pt = Pl Pgr: forallb : Y, Psm pt b = 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: foralla : X, Psm a pt = Pl Pgr: forallb : Y, Psm pt b = 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: foralla : X, Psm a pt = Pl Pgr: forallb : Y, Psm pt b = 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 (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) 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 (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) 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) (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) 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) (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) 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 (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 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 (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 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) (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 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) (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 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: forallx : X, f x = h x q: forallx : Y, g x = k x 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: forallx : X, f x = h x q: forallx : Y, g x = k x 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: forallx : X, f x = h x q: forallx : Y, g x = k x 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: forallx : X, f x = h x q: forallx : Y, g x = k x 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: forallx : X, f x = h x q: forallx : Y, g x = k x 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: forallx : X, f x = h x q: forallx : Y, g x = k x 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: forallx : X, f x = h x q: forallx : Y, g x = k x 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: forallx : X, f x = h x q: forallx : Y, g x = k x 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: forallx : X, f x = h x q: forallx : Y, g x = k x 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