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.From HoTT.WildCat Require Import Core UniverseEquiv NatTrans Yoneda.Require Import Pointed.Require Import Cubical.DPath Cubical.PathSquare Cubical.DPathSquare.Require Import Algebra.AbGroups.AbelianGroup.Require Import Homotopy.HSpace.Core.Require Import TruncType.Require Import Truncations.Core Truncations.Connectedness.Require Import Homotopy.HomotopyGroup.Require Import Homotopy.WhiteheadsPrinciple.LocalOpen Scope pointed_scope.LocalOpen Scope mc_mult_scope.LocalOpen Scope path_scope.(** * Classifying spaces of groups *)(** We define the classifying space of a group to be the following HIT:<< HIT ClassifyingSpace (G : Group) : 1-Type | bbase : ClassifyingSpace | bloop : X -> bbase = bbase | bloop_pp : forall x y, bloop (x * y) = bloop x @ bloop y.>> We implement this is a private inductive type. *)ModuleExport ClassifyingSpace.SectionClassifyingSpace.Private InductiveClassifyingSpace (G : Group) :=
| bbase : ClassifyingSpace G.Context {G : Group}.Axiombloop : G -> bbase G = bbase G.GlobalArguments bbase {_}.Axiombloop_pp : forallxy, bloop (x * y) = bloop x @ bloop y.
G: Group
IsTrunc 1 (ClassifyingSpace G)
G: Group
IsTrunc 1 (ClassifyingSpace G)
Admitted.EndClassifyingSpace.Arguments bloop {G} _%_mc_mult_scope.(** Now we can state the expected dependent elimination principle, and derive other versions of the elimination principle from it. *)SectionClassifyingSpace_ind.LocalOpen Scope dpath_scope.Context {G : Group}.(** Note that since our classifying space is 1-truncated, we can only eliminate into 1-truncated type families. *)DefinitionClassifyingSpace_ind
(P : ClassifyingSpace G -> Type)
`{forallb, IsTrunc 1 (P b)}
(bbase' : P bbase)
(bloop' : forallx, DPath P (bloop x) bbase' bbase')
(bloop_pp' : forallxy, DPathSquare P (sq_G1 (bloop_pp x y))
(bloop' (x * y)) ((bloop' x) @Dp (bloop' y)) 11)
(b : ClassifyingSpace G)
: P b
:= match b with
bbase => (fun__ => bbase')
end bloop' bloop_pp'.(** Here we state the computation rule for [ClassifyingSpace_ind] over [bloop] as an axiom. We don't need one for [bloop_pp] since we have a 1-type. We leave this as admitted since the computation rule is an axiom. **)
G: Group P: ClassifyingSpace G -> Type H: forallb : ClassifyingSpace G, IsTrunc 1 (P b) bbase': P bbase bloop': forallx0 : G, DPath P (bloop x0) bbase' bbase' bloop_pp': forallx0y : G,
DPathSquare P (sq_G1 (bloop_pp x0 y)) (bloop' (x0 * y))
(bloop' x0 @Dp bloop' y) 11 x: G
apD (ClassifyingSpace_ind P bbase' bloop' bloop_pp') (bloop x) = bloop' x
G: Group P: ClassifyingSpace G -> Type H: forallb : ClassifyingSpace G, IsTrunc 1 (P b) bbase': P bbase bloop': forallx0 : G, DPath P (bloop x0) bbase' bbase' bloop_pp': forallx0y : G,
DPathSquare P (sq_G1 (bloop_pp x0 y)) (bloop' (x0 * y))
(bloop' x0 @Dp bloop' y) 11 x: G
apD (ClassifyingSpace_ind P bbase' bloop' bloop_pp') (bloop x) = bloop' x
Admitted.EndClassifyingSpace_ind.EndClassifyingSpace.(** Other eliminators *)SectionEliminators.Context {G : Group}.(** The non-dependent eliminator *)
G: Group P: Type IsTrunc0: IsTrunc 1 P bbase': P bloop': G -> bbase' = bbase' bloop_pp': forallxy : G, bloop' (x * y) = bloop' x @ bloop' y
ClassifyingSpace G -> P
G: Group P: Type IsTrunc0: IsTrunc 1 P bbase': P bloop': G -> bbase' = bbase' bloop_pp': forallxy : G, bloop' (x * y) = bloop' x @ bloop' y
ClassifyingSpace G -> P
G: Group P: Type IsTrunc0: IsTrunc 1 P bbase': P bloop': G -> bbase' = bbase' bloop_pp': forallxy : G, bloop' (x * y) = bloop' x @ bloop' y
G: Group P: Type IsTrunc0: IsTrunc 1 P bbase': P bloop': G -> bbase' = bbase' bloop_pp': forallxy : G, bloop' (x * y) = bloop' x @ bloop' y
forallxy : G,
DPathSquare (fun_ : ClassifyingSpace G => P) (sq_G1 (bloop_pp x y))
(?bloop' (x * y)) (?bloop' x @Dp ?bloop' y)%dpath 1%dpath 1%dpath
G: Group P: Type IsTrunc0: IsTrunc 1 P bbase': P bloop': G -> bbase' = bbase' bloop_pp': forallxy : G, bloop' (x * y) = bloop' x @ bloop' y
forallxy : G,
DPathSquare (fun_ : ClassifyingSpace G => P) (sq_G1 (bloop_pp x y))
((funx0 : G => letX := equiv_fun dp_const in X (bloop' x0)) (x * y))
((funx0 : G => letX := equiv_fun dp_const in X (bloop' x0)) x @Dp
(funx0 : G => letX := equiv_fun dp_const in X (bloop' x0)) y)%dpath
1%dpath 1%dpath
G: Group P: Type IsTrunc0: IsTrunc 1 P bbase': P bloop': G -> bbase' = bbase' bloop_pp': forallx0y0 : G, bloop' (x0 * y0) = bloop' x0 @ bloop' y0 x, y: G
DPathSquare (fun_ : ClassifyingSpace G => P) (sq_G1 (bloop_pp x y))
((funx0 : G => letX := equiv_fun dp_const in X (bloop' x0)) (x * y))
((funx0 : G => letX := equiv_fun dp_const in X (bloop' x0)) x @Dp
(funx0 : G => letX := equiv_fun dp_const in X (bloop' x0)) y)%dpath
1%dpath 1%dpath
G: Group P: Type IsTrunc0: IsTrunc 1 P bbase': P bloop': G -> bbase' = bbase' bloop_pp': forallx0y0 : G, bloop' (x0 * y0) = bloop' x0 @ bloop' y0 x, y: G
PathSquare (dp_const^-1 (letX := equiv_fun dp_const in X (bloop' (x * y))))
(dp_const^-1
((letX := equiv_fun dp_const in X (bloop' x)) @Dp
(letX := equiv_fun dp_const in X (bloop' y)))%dpath)
(dp_const^-11%dpath) (dp_const^-11%dpath)
G: Group P: Type IsTrunc0: IsTrunc 1 P bbase': P bloop': G -> bbase' = bbase' bloop_pp': forallx0y0 : G, bloop' (x0 * y0) = bloop' x0 @ bloop' y0 x, y: G
?Goal = dp_const^-1 (letX := equiv_fun dp_const in X (bloop' (x * y)))
G: Group P: Type IsTrunc0: IsTrunc 1 P bbase': P bloop': G -> bbase' = bbase' bloop_pp': forallx0y0 : G, bloop' (x0 * y0) = bloop' x0 @ bloop' y0 x, y: G
?Goal0 =
dp_const^-1
((letX := equiv_fun dp_const in X (bloop' x)) @Dp
(letX := equiv_fun dp_const in X (bloop' y)))%dpath
G: Group P: Type IsTrunc0: IsTrunc 1 P bbase': P bloop': G -> bbase' = bbase' bloop_pp': forallx0y0 : G, bloop' (x0 * y0) = bloop' x0 @ bloop' y0 x, y: G
napply ClassifyingSpace_ind_beta_bloop.Defined.(** Sometimes we want to induct into a set which means we can ignore the bloop_pp arguments. Since this is a routine argument, we turn it into a special case of our induction principle. *)
G: Group P: ClassifyingSpace G -> Type H: forallb : ClassifyingSpace G, IsHSet (P b) bbase': P bbase bloop': forallx : G, DPath P (bloop x) bbase' bbase'
forallb : ClassifyingSpace G, P b
G: Group P: ClassifyingSpace G -> Type H: forallb : ClassifyingSpace G, IsHSet (P b) bbase': P bbase bloop': forallx : G, DPath P (bloop x) bbase' bbase'
forallb : ClassifyingSpace G, P b
G: Group P: ClassifyingSpace G -> Type H: forallb : ClassifyingSpace G, IsHSet (P b) bbase': P bbase bloop': forallx : G, DPath P (bloop x) bbase' bbase'
forallxy : G,
DPathSquare P (sq_G1 (bloop_pp x y)) (bloop' (x * y))
(bloop' x @Dp bloop' y)%dpath 1%dpath 1%dpath
G: Group P: ClassifyingSpace G -> Type H: forallb : ClassifyingSpace G, IsHSet (P b) bbase': P bbase bloop': forallx0 : G, DPath P (bloop x0) bbase' bbase' x, y: G
DPathSquare P (sq_G1 (bloop_pp x y)) (bloop' (x * y))
(bloop' x @Dp bloop' y)%dpath 1%dpath 1%dpath
G: Group P: ClassifyingSpace G -> Type H: forallb : ClassifyingSpace G, IsHSet (P b) bbase': P bbase bloop': forallx0 : G, DPath P (bloop x0) bbase' bbase' x, y: G
DPath (funx0 : bbase = bbase => DPath P x0 bbase' bbase')
(bloop_pp x y) (bloop' (x * y)) (bloop' x @Dp bloop' y)%dpath
apply path_ishprop.Defined.
G: Group P: Type IsTrunc0: IsHSet P bbase': P bloop': G -> bbase' = bbase'
ClassifyingSpace G -> P
G: Group P: Type IsTrunc0: IsHSet P bbase': P bloop': G -> bbase' = bbase'
ClassifyingSpace G -> P
G: Group P: Type IsTrunc0: IsHSet P bbase': P bloop': G -> bbase' = bbase'
forallxy : G, bloop' (x * y) = bloop' x @ bloop' y
intros; apply path_ishprop.Defined.(** Similarly, when eliminating into an hprop, we only have to handle the basepoint. *)
G: Group P: ClassifyingSpace G -> Type H: forallb : ClassifyingSpace G, IsHProp (P b) bbase': P bbase
forallb : ClassifyingSpace G, P b
G: Group P: ClassifyingSpace G -> Type H: forallb : ClassifyingSpace G, IsHProp (P b) bbase': P bbase
forallb : ClassifyingSpace G, P b
G: Group P: ClassifyingSpace G -> Type H: forallb : ClassifyingSpace G, IsHProp (P b) bbase': P bbase
forallx : G, DPath P (bloop x) bbase' bbase'
intros; rapply dp_ishprop.Defined.EndEliminators.(** The classifying space is 0-connected. *)
G: Group
IsConnected (Tr 0) (ClassifyingSpace G)
G: Group
IsConnected (Tr 0) (ClassifyingSpace G)
G: Group
forally : Trunc 0 (ClassifyingSpace G), tr bbase = y
G: Group
foralla : ClassifyingSpace G, tr bbase = tr a
srapply ClassifyingSpace_ind_hprop; reflexivity.Defined.(** The classifying space of a group is pointed. *)Instanceispointed_classifyingspace (G : Group)
: IsPointed (ClassifyingSpace G)
:= bbase.DefinitionpClassifyingSpace (G : Group) := [ClassifyingSpace G, bbase].(** To use the [B G] notation for [pClassifyingSpace] import this module. *)ModuleImport ClassifyingSpaceNotation.DefinitionBG := pClassifyingSpace G.EndClassifyingSpaceNotation.(** [bloop] takes the unit of the group to reflexivity. *)
G: Group
bloop (mon_unit : G) = 1
G: Group
bloop (mon_unit : G) = 1
G: Group
1 = bloop (mon_unit : G)
G: Group
bloop 1 @ 1 = bloop 1 @ bloop 1
G: Group
bloop 1 @ 1 = bloop (mon_unit * mon_unit)
G: Group
bloop 1 @ 1 = bloop 1
apply concat_p1.Defined.(** [bloop] "preserves inverses" by taking inverses in [G] to inverses of paths in [BG]. *)
G: Group x: G
bloop x^ = (bloop x)^
G: Group x: G
bloop x^ = (bloop x)^
G: Group x: G
bloop x^ = (bloop x)^ @ 1
G: Group x: G
bloop x @ bloop x^ = 1
G: Group x: G
bloop x @ bloop x^ = bloop 1
G: Group x: G
bloop (x * inv x) = bloop 1
apply ap, right_inverse.Defined.(** The underlying pointed map of [pequiv_g_loops_bg]. *)
G: Group
G ->* loops (B G)
G: Group
G ->* loops (B G)
G: Group
G -> loops (B G)
G: Group
?f pt = pt
G: Group
bloop pt = pt
exact bloop_id.Defined.(** This says that [B] is left adjoint to the loop space functor from pointed 1-types to groups. *)DefinitionpClassifyingSpace_rec {G : Group} (P : pType) `{IsTrunc 1 P}
(bloop' : G -> loops P)
(bloop_pp' : forallxy : G, bloop' (x * y) = bloop' x @ bloop' y)
: B G ->* P
:= Build_pMap (ClassifyingSpace_rec P (point P) bloop' bloop_pp') idpath.(** And this is one of the standard facts about adjoint functors: [(R h') o eta = h], where [h : G -> R P], [h' : L G -> P] is the adjunct, and eta ([bloop]) is the unit. *)
G: Group P: pType IsTrunc0: IsTrunc 1 P bloop': G -> loops P bloop_pp': forallxy : G, bloop' (x * y) = bloop' x @ bloop' y
fmap loops (pClassifyingSpace_rec P bloop' bloop_pp') o bloop == bloop'
G: Group P: pType IsTrunc0: IsTrunc 1 P bloop': G -> loops P bloop_pp': forallxy : G, bloop' (x * y) = bloop' x @ bloop' y
fmap loops (pClassifyingSpace_rec P bloop' bloop_pp') o bloop == bloop'
G: Group P: pType IsTrunc0: IsTrunc 1 P bloop': G -> loops P bloop_pp': forallx0y : G, bloop' (x0 * y) = bloop' x0 @ bloop' y x: G
1 @ (ap (ClassifyingSpace_rec P pt bloop' bloop_pp') (bloop x) @ 1) =
bloop' x
G: Group P: pType IsTrunc0: IsTrunc 1 P bloop': G -> loops P bloop_pp': forallx0y : G, bloop' (x0 * y) = bloop' x0 @ bloop' y x: G
ap (ClassifyingSpace_rec P pt bloop' bloop_pp') (bloop x) = bloop' x
apply ClassifyingSpace_rec_beta_bloop.Defined.(** Here we prove that [BG] is a delooping of [G], i.e. that [loops BG <~> G]. *)SectionEncodeDecode.Context `{Univalence} {G : Group}.
H: Univalence G: Group
B G -> HSet
H: Univalence G: Group
B G -> HSet
H: Univalence G: Group
HSet
H: Univalence G: Group
G -> ?bbase' = ?bbase'
H: Univalence G: Group
forallxy : G, ?bloop' (x * y) = ?bloop' x @ ?bloop' y
H: Univalence G: Group
HSet
exact (Build_HSet G).
H: Univalence G: Group
G -> Build_HSet G = Build_HSet G
H: Univalence G: Group x: G
Build_HSet G = Build_HSet G
H: Univalence G: Group x: G
Build_HSet G <~> Build_HSet G
exact (Build_Equiv _ _ (funt => t * x) _).
H: Univalence G: Group
forallxy : G,
(funx0 : G =>
path_trunctype
{|
equiv_fun := funt : G => t * x0;
equiv_isequiv := isequiv_group_right_op G x0
|})
(x * y) =
(funx0 : G =>
path_trunctype
{|
equiv_fun := funt : G => t * x0;
equiv_isequiv := isequiv_group_right_op G x0
|})
x @
(funx0 : G =>
path_trunctype
{|
equiv_fun := funt : G => t * x0;
equiv_isequiv := isequiv_group_right_op G x0
|})
y
H: Univalence G: Group x, y: G
path_trunctype
{|
equiv_fun := funt : G => t * (x * y);
equiv_isequiv := isequiv_group_right_op G (x * y)
|} =
path_trunctype
{|
equiv_fun := funt : G => t * x;
equiv_isequiv := isequiv_group_right_op G x
|} @
path_trunctype
{|
equiv_fun := funt : G => t * y;
equiv_isequiv := isequiv_group_right_op G y
|}
H: Univalence G: Group x, y: G
path_trunctype
{|
equiv_fun := funt : G => t * (x * y);
equiv_isequiv := isequiv_group_right_op G (x * y)
|} =
path_trunctype
({|
equiv_fun := funt : G => t * y;
equiv_isequiv := isequiv_group_right_op G y
|}
oE {|
equiv_fun := funt : G => t * x;
equiv_isequiv := isequiv_group_right_op G x
|})
H: Univalence G: Group x, y: G
{|
equiv_fun := funt : G => t * (x * y);
equiv_isequiv := isequiv_group_right_op G (x * y)
|} ==
{|
equiv_fun := funt : G => t * y;
equiv_isequiv := isequiv_group_right_op G y
|}
oE {|
equiv_fun := funt : G => t * x;
equiv_isequiv := isequiv_group_right_op G x
|}
H: Univalence G: Group x, y: G x0: Build_HSet G
x0 * (x * y) = x0 * x * y
apply associativity.Defined.
H: Univalence G: Group
forallb : ClassifyingSpace G, bbase = b -> codes b
H: Univalence G: Group
forallb : ClassifyingSpace G, bbase = b -> codes b
H: Univalence G: Group b: ClassifyingSpace G p: bbase = b
codes b
exact (transport codes p mon_unit).Defined.
H: Univalence G: Group
forallxy : G, transport (funx0 : B G => codes x0) (bloop x) y = y * x
H: Univalence G: Group
forallxy : G, transport (funx0 : B G => codes x0) (bloop x) y = y * x
H: Univalence G: Group x, y: G
transport (funx0 : B G => codes x0) (bloop x) y = y * x
H: Univalence G: Group x, y: G
transport idmap (ap (funx0 : B G => codes x0) (bloop x)) y = y * x
H: Univalence G: Group x, y: G
transport idmap (ap (funx0 : B G => codes x0) (bloop x)) y =
transport idmap (path_universe (funy0 : G => y0 * x)) y
H: Univalence G: Group x, y: G
ap (funx0 : B G => codes x0) (bloop x) =
path_universe (funy0 : G => y0 * x)
H: Univalence G: Group x, y: G
ap trunctype_type (ap codes (bloop x)) = path_universe (funy0 : G => y0 * x)
H: Univalence G: Group x, y: G
ap codes (bloop x) =
path_trunctype
{|
equiv_fun := funy0 : G => y0 * x;
equiv_isequiv := isequiv_group_right_op G x
|}
napply ClassifyingSpace_rec_beta_bloop.Defined.
H: Univalence G: Group
forallb : B G, codes b -> bbase = b
H: Univalence G: Group
forallb : B G, codes b -> bbase = b
H: Univalence G: Group
(funb : ClassifyingSpace G => codes b -> bbase = b) bbase
H: Univalence G: Group
forallx : G,
DPath (funb : ClassifyingSpace G => codes b -> bbase = b)
(bloop x) ?bbase'?bbase'
H: Univalence G: Group
(funb : ClassifyingSpace G => codes b -> bbase = b) bbase
exact bloop.
H: Univalence G: Group
forallx : G,
DPath (funb : ClassifyingSpace G => codes b -> bbase = b)
(bloop x) bloop bloop
H: Univalence G: Group x: G
DPath (funb : ClassifyingSpace G => codes b -> bbase = b)
(bloop x) bloop bloop
forall (b : B G) (p : bbase = b), decode b (encode b p) = p
H: Univalence G: Group
forall (b : B G) (p : bbase = b), decode b (encode b p) = p
H: Univalence G: Group b: B G p: bbase = b
decode b (encode b p) = p
H: Univalence G: Group
decode bbase (encode bbase 1) = 1
exact bloop_id.Defined.
H: Univalence G: Group
IsEquiv bloop
H: Univalence G: Group
IsEquiv bloop
H: Univalence G: Group
bbase = bbase -> G
H: Univalence G: Group
bloop o ?g == idmap
H: Univalence G: Group
?g o bloop == idmap
H: Univalence G: Group
bbase = bbase -> G
exact (encode _).
H: Univalence G: Group
bloop o encode bbase == idmap
rapply decode_encode.
H: Univalence G: Group
encode bbase o bloop == idmap
H: Univalence G: Group x: G
encode bbase (bloop x) = x
H: Univalence G: Group x: G
mon_unit * x = x
apply left_identity.Defined.(** The defining property of BG. *)Definitionequiv_g_loops_bg : G <~> loops (B G)
:= Build_Equiv _ _ bloop _.(** Pointed version of the defining property. *)Definitionpequiv_g_loops_bg : G <~>* loops (B G)
:= Build_pEquiv pbloop _.Definitionpequiv_loops_bg_g := pequiv_g_loops_bg^-1*%equiv.(** We also have that the equivalence is a group isomorphism. *)(** First we show that the loop space of a pointed 1-type is a group. *)DefinitionLoopGroup (X : pType) `{IsTrunc 1 X} : Group
:= Build_Group (loops X) concat idpath inverse
(Build_IsGroup _ _ _ _
(Build_IsMonoid _ _ _
(Build_IsSemiGroup _ _ _ concat_p_pp) concat_1p concat_p1)
concat_Vp concat_pV).
H: Univalence G: Group
GroupIsomorphism G (LoopGroup (B G))
H: Univalence G: Group
GroupIsomorphism G (LoopGroup (B G))
H: Univalence G: Group
G <~> LoopGroup (B G)
H: Univalence G: Group
IsSemiGroupPreserving ?f
H: Univalence G: Group
IsSemiGroupPreserving equiv_g_loops_bg
H: Univalence G: Group x, y: G
equiv_g_loops_bg (x * y) = equiv_g_loops_bg x * equiv_g_loops_bg y
exact (pointed_htpy fmap_loops_pconst).Defined.EndEncodeDecode.(** When [G] is an abelian group, [BG] is an H-space. *)SectionHSpace_bg.Context {G : AbGroup}.
G: AbGroup
B G -> B G -> B G
G: AbGroup
B G -> B G -> B G
G: AbGroup b: B G
B G -> B G
G: AbGroup b: B G
IsTrunc 1 (B G)
G: AbGroup b: B G
B G
G: AbGroup b: B G
G -> ?bbase' = ?bbase'
G: AbGroup b: B G
forallxy : G, ?bloop' (x * y) = ?bloop' x @ ?bloop' y
G: AbGroup b: B G
B G
G: AbGroup b: B G
G -> ?bbase' = ?bbase'
G: AbGroup b: B G
forallxy : G, ?bloop' (x * y) = ?bloop' x @ ?bloop' y
G: AbGroup b: B G
G -> b = b
G: AbGroup b: B G
forallxy : G, ?bloop' (x * y) = ?bloop' x @ ?bloop' y
G: AbGroup b: B G
G -> b = b
G: AbGroup b: B G x: G
b = b
G: AbGroup x: G
forallb : B G, b = b
G: AbGroup x: G
forallb : ClassifyingSpace G,
IsHSet ((funb0 : ClassifyingSpace G => b0 = b0) b)
G: AbGroup x: G
(funb : ClassifyingSpace G => b = b) bbase
G: AbGroup x: G
forallx0 : G,
DPath (funb : ClassifyingSpace G => b = b) (bloop x0) ?bbase'?bbase'
G: AbGroup x: G
(funb : ClassifyingSpace G => b = b) bbase
G: AbGroup x: G
forallx0 : G,
DPath (funb : ClassifyingSpace G => b = b) (bloop x0) ?bbase'?bbase'
G: AbGroup x: G
forallx0 : G,
DPath (funb : ClassifyingSpace G => b = b) (bloop x0) (bloop x) (bloop x)
G: AbGroup x, y: G
transport (funb : ClassifyingSpace G => b = b) (bloop y) (bloop x) = bloop x
G: AbGroup x, y: G
((bloop y)^ @ bloop x) @ bloop y = bloop x
G: AbGroup x, y: G
(bloop y)^ @ (bloop x @ bloop y) = bloop x
G: AbGroup x, y: G
bloop x @ bloop y = bloop y @ bloop x
G: AbGroup x, y: G
bloop (x * y) = bloop (y * x)
apply ap, commutativity.
G: AbGroup b: B G
forallxy : G,
(funx0 : G =>
ClassifyingSpace_ind_hset (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0)
((funy0 : G =>
letX := funpqr : bbase = bbase => equiv_fun (dp_paths_lr p q r) in
X (bloop y0) (bloop x0) (bloop x0)
(concat_pp_p (bloop y0)^ (bloop x0) (bloop y0) @
moveR_Vp (bloop x0 @ bloop y0) (bloop x0)
(bloop y0)
(((bloop_pp x0 y0)^ @ ap bloop (commutativity x0 y0)) @
bloop_pp y0 x0)))
:
forallx1 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x1) (bloop x0) (bloop x0))
b)
(x * y) =
(funx0 : G =>
ClassifyingSpace_ind_hset (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0)
((funy0 : G =>
letX := funpqr : bbase = bbase => equiv_fun (dp_paths_lr p q r) in
X (bloop y0) (bloop x0) (bloop x0)
(concat_pp_p (bloop y0)^ (bloop x0) (bloop y0) @
moveR_Vp (bloop x0 @ bloop y0) (bloop x0)
(bloop y0)
(((bloop_pp x0 y0)^ @ ap bloop (commutativity x0 y0)) @
bloop_pp y0 x0)))
:
forallx1 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x1) (bloop x0) (bloop x0))
b)
x @
(funx0 : G =>
ClassifyingSpace_ind_hset (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0)
((funy0 : G =>
letX := funpqr : bbase = bbase => equiv_fun (dp_paths_lr p q r) in
X (bloop y0) (bloop x0) (bloop x0)
(concat_pp_p (bloop y0)^ (bloop x0) (bloop y0) @
moveR_Vp (bloop x0 @ bloop y0) (bloop x0)
(bloop y0)
(((bloop_pp x0 y0)^ @ ap bloop (commutativity x0 y0)) @
bloop_pp y0 x0)))
:
forallx1 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x1) (bloop x0) (bloop x0))
b)
y
G: AbGroup b: B G x, y: G
(funx0 : G =>
ClassifyingSpace_ind_hset (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0)
((funy0 : G =>
letX := funpqr : bbase = bbase => equiv_fun (dp_paths_lr p q r) in
X (bloop y0) (bloop x0) (bloop x0)
(concat_pp_p (bloop y0)^ (bloop x0) (bloop y0) @
moveR_Vp (bloop x0 @ bloop y0) (bloop x0)
(bloop y0)
(((bloop_pp x0 y0)^ @ ap bloop (commutativity x0 y0)) @
bloop_pp y0 x0)))
:
forallx1 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x1) (bloop x0) (bloop x0))
b)
(x * y) =
(funx0 : G =>
ClassifyingSpace_ind_hset (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0)
((funy0 : G =>
letX := funpqr : bbase = bbase => equiv_fun (dp_paths_lr p q r) in
X (bloop y0) (bloop x0) (bloop x0)
(concat_pp_p (bloop y0)^ (bloop x0) (bloop y0) @
moveR_Vp (bloop x0 @ bloop y0) (bloop x0)
(bloop y0)
(((bloop_pp x0 y0)^ @ ap bloop (commutativity x0 y0)) @
bloop_pp y0 x0)))
:
forallx1 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x1) (bloop x0) (bloop x0))
b)
x @
(funx0 : G =>
ClassifyingSpace_ind_hset (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0)
((funy0 : G =>
letX := funpqr : bbase = bbase => equiv_fun (dp_paths_lr p q r) in
X (bloop y0) (bloop x0) (bloop x0)
(concat_pp_p (bloop y0)^ (bloop x0) (bloop y0) @
moveR_Vp (bloop x0 @ bloop y0) (bloop x0)
(bloop y0)
(((bloop_pp x0 y0)^ @ ap bloop (commutativity x0 y0)) @
bloop_pp y0 x0)))
:
forallx1 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x1) (bloop x0) (bloop x0))
b)
y
G: AbGroup x, y: G
forallb : B G,
(funx0 : G =>
ClassifyingSpace_ind_hset (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0)
((funy0 : G =>
letX := funpqr : bbase = bbase => equiv_fun (dp_paths_lr p q r) in
X (bloop y0) (bloop x0) (bloop x0)
(concat_pp_p (bloop y0)^ (bloop x0) (bloop y0) @
moveR_Vp (bloop x0 @ bloop y0) (bloop x0)
(bloop y0)
(((bloop_pp x0 y0)^ @ ap bloop (commutativity x0 y0)) @
bloop_pp y0 x0)))
:
forallx1 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x1) (bloop x0) (bloop x0))
b)
(x * y) =
(funx0 : G =>
ClassifyingSpace_ind_hset (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0)
((funy0 : G =>
letX := funpqr : bbase = bbase => equiv_fun (dp_paths_lr p q r) in
X (bloop y0) (bloop x0) (bloop x0)
(concat_pp_p (bloop y0)^ (bloop x0) (bloop y0) @
moveR_Vp (bloop x0 @ bloop y0) (bloop x0)
(bloop y0)
(((bloop_pp x0 y0)^ @ ap bloop (commutativity x0 y0)) @
bloop_pp y0 x0)))
:
forallx1 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x1) (bloop x0) (bloop x0))
b)
x @
(funx0 : G =>
ClassifyingSpace_ind_hset (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0)
((funy0 : G =>
letX := funpqr : bbase = bbase => equiv_fun (dp_paths_lr p q r) in
X (bloop y0) (bloop x0) (bloop x0)
(concat_pp_p (bloop y0)^ (bloop x0) (bloop y0) @
moveR_Vp (bloop x0 @ bloop y0) (bloop x0)
(bloop y0)
(((bloop_pp x0 y0)^ @ ap bloop (commutativity x0 y0)) @
bloop_pp y0 x0)))
:
forallx1 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x1) (bloop x0) (bloop x0))
b)
y
G: AbGroup x, y: G
(funb : ClassifyingSpace G =>
(funx0 : G =>
ClassifyingSpace_ind_hset (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0)
((funy0 : G =>
letX := funpqr : bbase = bbase => equiv_fun (dp_paths_lr p q r) in
X (bloop y0) (bloop x0) (bloop x0)
(concat_pp_p (bloop y0)^ (bloop x0) (bloop y0) @
moveR_Vp (bloop x0 @ bloop y0) (bloop x0)
(bloop y0)
(((bloop_pp x0 y0)^ @ ap bloop (commutativity x0 y0)) @
bloop_pp y0 x0)))
:
forallx1 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x1) (bloop x0) (bloop x0))
b)
(x * y) =
(funx0 : G =>
ClassifyingSpace_ind_hset (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0)
((funy0 : G =>
letX := funpqr : bbase = bbase => equiv_fun (dp_paths_lr p q r) in
X (bloop y0) (bloop x0) (bloop x0)
(concat_pp_p (bloop y0)^ (bloop x0) (bloop y0) @
moveR_Vp (bloop x0 @ bloop y0) (bloop x0)
(bloop y0)
(((bloop_pp x0 y0)^ @ ap bloop (commutativity x0 y0)) @
bloop_pp y0 x0)))
:
forallx1 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x1) (bloop x0) (bloop x0))
b)
x @
(funx0 : G =>
ClassifyingSpace_ind_hset (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0)
((funy0 : G =>
letX := funpqr : bbase = bbase => equiv_fun (dp_paths_lr p q r) in
X (bloop y0) (bloop x0) (bloop x0)
(concat_pp_p (bloop y0)^ (bloop x0) (bloop y0) @
moveR_Vp (bloop x0 @ bloop y0) (bloop x0)
(bloop y0)
(((bloop_pp x0 y0)^ @ ap bloop (commutativity x0 y0)) @
bloop_pp y0 x0)))
:
forallx1 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x1) (bloop x0) (bloop x0))
b)
y)
bbase
exact (bloop_pp x y).Defined.
G: AbGroup
forallxy : B G, bg_mul x y = bg_mul y x
G: AbGroup
forallxy : B G, bg_mul x y = bg_mul y x
G: AbGroup x: B G
forally : B G, bg_mul x y = bg_mul y x
G: AbGroup x: B G
(funb : ClassifyingSpace G => bg_mul x b = bg_mul b x) bbase
G: AbGroup x: B G
forallx0 : G,
DPath (funb : ClassifyingSpace G => bg_mul x b = bg_mul b x)
(bloop x0) ?bbase'?bbase'
G: AbGroup x: B G
(funb : ClassifyingSpace G => bg_mul x b = bg_mul b x) bbase
G: AbGroup x: B G
x = bg_mul bbase x
G: AbGroup
forallx : B G, x = bg_mul bbase x
G: AbGroup
(funb : ClassifyingSpace G => b = bg_mul bbase b) bbase
G: AbGroup
forallx : G,
DPath (funb : ClassifyingSpace G => b = bg_mul bbase b)
(bloop x) ?bbase'?bbase'
G: AbGroup
forallx : G,
DPath (funb : ClassifyingSpace G => b = bg_mul bbase b) (bloop x) 11
G: AbGroup x: G
DPath (funb : ClassifyingSpace G => b = bg_mul bbase b) (bloop x) 11
G: AbGroup x: G
ap idmap (bloop x) = ap (bg_mul bbase) (bloop x)
G: AbGroup x: G
ap (bg_mul bbase) (bloop x) = bloop x
napply ClassifyingSpace_rec_beta_bloop.
G: AbGroup x: B G
forallx0 : G,
DPath (funb : ClassifyingSpace G => bg_mul x b = bg_mul b x)
(bloop x0)
(ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = bg_mul bbase b) 1
(funx1 : G =>
sq_dp^-1
(letX := equiv_fun sq_1G in
X
(ap_idmap (bloop x1) @
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace G) bbase
(funx2 : G =>
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = b)
(bloop x2)
((funy : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y) (bloop x2) (bloop x2)
(concat_pp_p (bloop y)^ (bloop x2) (bloop y) @
moveR_Vp (bloop x2 @ bloop y)
(bloop x2) (bloop y)
(((bloop_pp x2 y)^ @ ap bloop (commutativity x2 y)) @
bloop_pp y x2)))
:
forallx3 : G,
DPath (funb : ClassifyingSpace G => b = b)
(bloop x3) (bloop x2) (bloop x2))
bbase)
(funx2y : G =>
ClassifyingSpace_ind_hprop
(funb : ClassifyingSpace G =>
(funx3 : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0)
(bloop x3)
((funy0 : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y0) (bloop x3) (bloop x3)
(concat_pp_p (bloop y0)^ (bloop x3) (bloop y0) @
moveR_Vp (bloop x3 @ bloop y0)
(bloop x3) (bloop y0)
(((bloop_pp x3 y0)^ @
ap bloop (commutativity x3 y0)) @
bloop_pp y0 x3)))
:
forallx4 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x4) (bloop x3) (bloop x3))
b)
(x2 * y) =
(funx3 : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0)
(bloop x3)
((funy0 : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y0) (bloop x3) (bloop x3)
(concat_pp_p (bloop y0)^ (bloop x3) (bloop y0) @
moveR_Vp (bloop x3 @ bloop y0)
(bloop x3) (bloop y0)
(((bloop_pp x3 y0)^ @
ap bloop (commutativity x3 y0)) @
bloop_pp y0 x3)))
:
forallx4 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x4) (bloop x3) (bloop x3))
b)
x2 @
(funx3 : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0)
(bloop x3)
((funy0 : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y0) (bloop x3) (bloop x3)
(concat_pp_p (bloop y0)^ (bloop x3) (bloop y0) @
moveR_Vp (bloop x3 @ bloop y0)
(bloop x3) (bloop y0)
(((bloop_pp x3 y0)^ @
ap bloop (commutativity x3 y0)) @
bloop_pp y0 x3)))
:
forallx4 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x4) (bloop x3) (bloop x3))
b)
y)
(bloop_pp x2 y) bbase)
x1)^)))
x
:
(funb : ClassifyingSpace G => bg_mul x b = bg_mul b x) bbase)
(ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = bg_mul bbase b) 1
(funx1 : G =>
sq_dp^-1
(letX := equiv_fun sq_1G in
X
(ap_idmap (bloop x1) @
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace G) bbase
(funx2 : G =>
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = b)
(bloop x2)
((funy : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y) (bloop x2) (bloop x2)
(concat_pp_p (bloop y)^ (bloop x2) (bloop y) @
moveR_Vp (bloop x2 @ bloop y)
(bloop x2) (bloop y)
(((bloop_pp x2 y)^ @ ap bloop (commutativity x2 y)) @
bloop_pp y x2)))
:
forallx3 : G,
DPath (funb : ClassifyingSpace G => b = b)
(bloop x3) (bloop x2) (bloop x2))
bbase)
(funx2y : G =>
ClassifyingSpace_ind_hprop
(funb : ClassifyingSpace G =>
(funx3 : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0)
(bloop x3)
((funy0 : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y0) (bloop x3) (bloop x3)
(concat_pp_p (bloop y0)^ (bloop x3) (bloop y0) @
moveR_Vp (bloop x3 @ bloop y0)
(bloop x3) (bloop y0)
(((bloop_pp x3 y0)^ @
ap bloop (commutativity x3 y0)) @
bloop_pp y0 x3)))
:
forallx4 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x4) (bloop x3) (bloop x3))
b)
(x2 * y) =
(funx3 : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0)
(bloop x3)
((funy0 : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y0) (bloop x3) (bloop x3)
(concat_pp_p (bloop y0)^ (bloop x3) (bloop y0) @
moveR_Vp (bloop x3 @ bloop y0)
(bloop x3) (bloop y0)
(((bloop_pp x3 y0)^ @
ap bloop (commutativity x3 y0)) @
bloop_pp y0 x3)))
:
forallx4 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x4) (bloop x3) (bloop x3))
b)
x2 @
(funx3 : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0)
(bloop x3)
((funy0 : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y0) (bloop x3) (bloop x3)
(concat_pp_p (bloop y0)^ (bloop x3) (bloop y0) @
moveR_Vp (bloop x3 @ bloop y0)
(bloop x3) (bloop y0)
(((bloop_pp x3 y0)^ @
ap bloop (commutativity x3 y0)) @
bloop_pp y0 x3)))
:
forallx4 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x4) (bloop x3) (bloop x3))
b)
y)
(bloop_pp x2 y) bbase)
x1)^)))
x
:
(funb : ClassifyingSpace G => bg_mul x b = bg_mul b x) bbase)
G: AbGroup y: G
forallx : B G,
DPath (funb : ClassifyingSpace G => bg_mul x b = bg_mul b x)
(bloop y)
(ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = bg_mul bbase b) 1
(funx0 : G =>
sq_dp^-1
(letX := equiv_fun sq_1G in
X
(ap_idmap (bloop x0) @
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace G) bbase
(funx1 : G =>
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = b)
(bloop x1)
((funy0 : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y0) (bloop x1) (bloop x1)
(concat_pp_p (bloop y0)^ (bloop x1) (bloop y0) @
moveR_Vp (bloop x1 @ bloop y0)
(bloop x1) (bloop y0)
(((bloop_pp x1 y0)^ @ ap bloop (commutativity x1 y0)) @
bloop_pp y0 x1)))
:
forallx2 : G,
DPath (funb : ClassifyingSpace G => b = b)
(bloop x2) (bloop x1) (bloop x1))
bbase)
(funx1y0 : G =>
ClassifyingSpace_ind_hprop
(funb : ClassifyingSpace G =>
(funx2 : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0)
(bloop x2)
((funy1 : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y1) (bloop x2) (bloop x2)
(concat_pp_p (bloop y1)^ (bloop x2) (bloop y1) @
moveR_Vp (bloop x2 @ bloop y1)
(bloop x2) (bloop y1)
(((bloop_pp x2 y1)^ @
ap bloop (commutativity x2 y1)) @
bloop_pp y1 x2)))
:
forallx3 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x3) (bloop x2) (bloop x2))
b)
(x1 * y0) =
(funx2 : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0)
(bloop x2)
((funy1 : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y1) (bloop x2) (bloop x2)
(concat_pp_p (bloop y1)^ (bloop x2) (bloop y1) @
moveR_Vp (bloop x2 @ bloop y1)
(bloop x2) (bloop y1)
(((bloop_pp x2 y1)^ @
ap bloop (commutativity x2 y1)) @
bloop_pp y1 x2)))
:
forallx3 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x3) (bloop x2) (bloop x2))
b)
x1 @
(funx2 : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0)
(bloop x2)
((funy1 : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y1) (bloop x2) (bloop x2)
(concat_pp_p (bloop y1)^ (bloop x2) (bloop y1) @
moveR_Vp (bloop x2 @ bloop y1)
(bloop x2) (bloop y1)
(((bloop_pp x2 y1)^ @
ap bloop (commutativity x2 y1)) @
bloop_pp y1 x2)))
:
forallx3 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x3) (bloop x2) (bloop x2))
b)
y0)
(bloop_pp x1 y0) bbase)
x0)^)))
x
:
(funb : ClassifyingSpace G => bg_mul x b = bg_mul b x) bbase)
(ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = bg_mul bbase b) 1
(funx0 : G =>
sq_dp^-1
(letX := equiv_fun sq_1G in
X
(ap_idmap (bloop x0) @
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace G) bbase
(funx1 : G =>
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = b)
(bloop x1)
((funy0 : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y0) (bloop x1) (bloop x1)
(concat_pp_p (bloop y0)^ (bloop x1) (bloop y0) @
moveR_Vp (bloop x1 @ bloop y0)
(bloop x1) (bloop y0)
(((bloop_pp x1 y0)^ @ ap bloop (commutativity x1 y0)) @
bloop_pp y0 x1)))
:
forallx2 : G,
DPath (funb : ClassifyingSpace G => b = b)
(bloop x2) (bloop x1) (bloop x1))
bbase)
(funx1y0 : G =>
ClassifyingSpace_ind_hprop
(funb : ClassifyingSpace G =>
(funx2 : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0)
(bloop x2)
((funy1 : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y1) (bloop x2) (bloop x2)
(concat_pp_p (bloop y1)^ (bloop x2) (bloop y1) @
moveR_Vp (bloop x2 @ bloop y1)
(bloop x2) (bloop y1)
(((bloop_pp x2 y1)^ @
ap bloop (commutativity x2 y1)) @
bloop_pp y1 x2)))
:
forallx3 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x3) (bloop x2) (bloop x2))
b)
(x1 * y0) =
(funx2 : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0)
(bloop x2)
((funy1 : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y1) (bloop x2) (bloop x2)
(concat_pp_p (bloop y1)^ (bloop x2) (bloop y1) @
moveR_Vp (bloop x2 @ bloop y1)
(bloop x2) (bloop y1)
(((bloop_pp x2 y1)^ @
ap bloop (commutativity x2 y1)) @
bloop_pp y1 x2)))
:
forallx3 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x3) (bloop x2) (bloop x2))
b)
x1 @
(funx2 : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0)
(bloop x2)
((funy1 : G =>
letX0 :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X0 (bloop y1) (bloop x2) (bloop x2)
(concat_pp_p (bloop y1)^ (bloop x2) (bloop y1) @
moveR_Vp (bloop x2 @ bloop y1)
(bloop x2) (bloop y1)
(((bloop_pp x2 y1)^ @
ap bloop (commutativity x2 y1)) @
bloop_pp y1 x2)))
:
forallx3 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x3) (bloop x2) (bloop x2))
b)
y0)
(bloop_pp x1 y0) bbase)
x0)^)))
x
:
(funb : ClassifyingSpace G => bg_mul x b = bg_mul b x) bbase)
G: AbGroup y: G
forallx : ClassifyingSpace G,
transport (funb : ClassifyingSpace G => bg_mul x b = bg_mul b x)
(bloop y)
(ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = bg_mul bbase b) 1
(funx0 : G =>
sq_dp^-1
(match
ap idmap (bloop x0) as p in (_ = a)
return
(forallpx1 : a = bbase,
1 @ ap (bg_mul bbase) (bloop x0) = p @ px1 ->
PathSquare 1 px1 p (ap (bg_mul bbase) (bloop x0)))
with
| 1 =>
funpx1 : bbase = bbase =>
match
ap (bg_mul bbase) (bloop x0) as p in (_ = a)
return
(forallpx0 : bbase = a,
1 @ p = 1 @ px0 -> PathSquare 1 px0 1 p)
with
| 1 =>
fun (px0 : bbase = bbase) (e : 1 = 1 @ px0) =>
match
e @ concat_1p px0 in (_ = p)
return (1 = 1 @ p -> PathSquare 1 p 11)
with
| 1 => fun_ : 1 = 1 => 1%square
end e
end px1
end1
((concat_1p (ap (bg_mul bbase) (bloop x0)) @
(ap_idmap (bloop x0) @
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace G) bbase
(funx1 : G => bloop x1) (funx1y0 : G => bloop_pp x1 y0)
x0)^)^) @
(concat_p1 (ap idmap (bloop x0)))^)))
x) =
ClassifyingSpace_ind_hset (funb : ClassifyingSpace G => b = bg_mul bbase b)
1
(funx0 : G =>
sq_dp^-1
(match
ap idmap (bloop x0) as p in (_ = a)
return
(forallpx1 : a = bbase,
1 @ ap (bg_mul bbase) (bloop x0) = p @ px1 ->
PathSquare 1 px1 p (ap (bg_mul bbase) (bloop x0)))
with
| 1 =>
funpx1 : bbase = bbase =>
match
ap (bg_mul bbase) (bloop x0) as p in (_ = a)
return
(forallpx0 : bbase = a,
1 @ p = 1 @ px0 -> PathSquare 1 px0 1 p)
with
| 1 =>
fun (px0 : bbase = bbase) (e : 1 = 1 @ px0) =>
match
e @ concat_1p px0 in (_ = p)
return (1 = 1 @ p -> PathSquare 1 p 11)
with
| 1 => fun_ : 1 = 1 => 1%square
end e
end px1
end1
((concat_1p (ap (bg_mul bbase) (bloop x0)) @
(ap_idmap (bloop x0) @
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace G) bbase
(funx1 : G => bloop x1) (funx1y0 : G => bloop_pp x1 y0) x0)^)^) @
(concat_p1 (ap idmap (bloop x0)))^)))
x
G: AbGroup y: G
forallb : ClassifyingSpace G,
IsHProp
((funb0 : ClassifyingSpace G =>
transport (funb1 : ClassifyingSpace G => bg_mul b0 b1 = bg_mul b1 b0)
(bloop y)
(ClassifyingSpace_ind_hset
(funb1 : ClassifyingSpace G => b1 = bg_mul bbase b1) 1
(funx : G =>
sq_dp^-1
(match
ap idmap (bloop x) as p in (_ = a)
return
(forallpx1 : a = bbase,
1 @ ap (bg_mul bbase) (bloop x) = p @ px1 ->
PathSquare 1 px1 p (ap (bg_mul bbase) (bloop x)))
with
| 1 =>
funpx1 : bbase = bbase =>
match
ap (bg_mul bbase) (bloop x) as p in (_ = a)
return
(forallpx0 : bbase = a,
1 @ p = 1 @ px0 -> PathSquare 1 px0 1 p)
with
| 1 =>
fun (px0 : bbase = bbase) (e : 1 = 1 @ px0) =>
match
e @ concat_1p px0 in (_ = p)
return (1 = 1 @ p -> PathSquare 1 p 11)
with
| 1 => fun_ : 1 = 1 => 1%square
end e
end px1
end1
((concat_1p (ap (bg_mul bbase) (bloop x)) @
(ap_idmap (bloop x) @
(ClassifyingSpace_rec_beta_bloop
(ClassifyingSpace G) bbase (funx0 : G => bloop x0)
(funx0y0 : G => bloop_pp x0 y0) x)^)^) @
(concat_p1 (ap idmap (bloop x)))^)))
b0) =
ClassifyingSpace_ind_hset
(funb1 : ClassifyingSpace G => b1 = bg_mul bbase b1) 1
(funx : G =>
sq_dp^-1
(match
ap idmap (bloop x) as p in (_ = a)
return
(forallpx1 : a = bbase,
1 @ ap (bg_mul bbase) (bloop x) = p @ px1 ->
PathSquare 1 px1 p (ap (bg_mul bbase) (bloop x)))
with
| 1 =>
funpx1 : bbase = bbase =>
match
ap (bg_mul bbase) (bloop x) as p in (_ = a)
return
(forallpx0 : bbase = a,
1 @ p = 1 @ px0 -> PathSquare 1 px0 1 p)
with
| 1 =>
fun (px0 : bbase = bbase) (e : 1 = 1 @ px0) =>
match
e @ concat_1p px0 in (_ = p)
return (1 = 1 @ p -> PathSquare 1 p 11)
with
| 1 => fun_ : 1 = 1 => 1%square
end e
end px1
end1
((concat_1p (ap (bg_mul bbase) (bloop x)) @
(ap_idmap (bloop x) @
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace G) bbase
(funx0 : G => bloop x0) (funx0y0 : G => bloop_pp x0 y0)
x)^)^) @
(concat_p1 (ap idmap (bloop x)))^)))
b0)
b)
G: AbGroup y: G
(funb : ClassifyingSpace G =>
transport (funb0 : ClassifyingSpace G => bg_mul b b0 = bg_mul b0 b)
(bloop y)
(ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = bg_mul bbase b0) 1
(funx : G =>
sq_dp^-1
(match
ap idmap (bloop x) as p in (_ = a)
return
(forallpx1 : a = bbase,
1 @ ap (bg_mul bbase) (bloop x) = p @ px1 ->
PathSquare 1 px1 p (ap (bg_mul bbase) (bloop x)))
with
| 1 =>
funpx1 : bbase = bbase =>
match
ap (bg_mul bbase) (bloop x) as p in (_ = a)
return
(forallpx0 : bbase = a,
1 @ p = 1 @ px0 -> PathSquare 1 px0 1 p)
with
| 1 =>
fun (px0 : bbase = bbase) (e : 1 = 1 @ px0) =>
match
e @ concat_1p px0 in (_ = p)
return (1 = 1 @ p -> PathSquare 1 p 11)
with
| 1 => fun_ : 1 = 1 => 1%square
end e
end px1
end1
((concat_1p (ap (bg_mul bbase) (bloop x)) @
(ap_idmap (bloop x) @
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace G) bbase
(funx0 : G => bloop x0) (funx0y0 : G => bloop_pp x0 y0)
x)^)^) @
(concat_p1 (ap idmap (bloop x)))^)))
b) =
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = bg_mul bbase b0) 1
(funx : G =>
sq_dp^-1
(match
ap idmap (bloop x) as p in (_ = a)
return
(forallpx1 : a = bbase,
1 @ ap (bg_mul bbase) (bloop x) = p @ px1 ->
PathSquare 1 px1 p (ap (bg_mul bbase) (bloop x)))
with
| 1 =>
funpx1 : bbase = bbase =>
match
ap (bg_mul bbase) (bloop x) as p in (_ = a)
return
(forallpx0 : bbase = a,
1 @ p = 1 @ px0 -> PathSquare 1 px0 1 p)
with
| 1 =>
fun (px0 : bbase = bbase) (e : 1 = 1 @ px0) =>
match
e @ concat_1p px0 in (_ = p)
return (1 = 1 @ p -> PathSquare 1 p 11)
with
| 1 => fun_ : 1 = 1 => 1%square
end e
end px1
end1
((concat_1p (ap (bg_mul bbase) (bloop x)) @
(ap_idmap (bloop x) @
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace G) bbase
(funx0 : G => bloop x0) (funx0y0 : G => bloop_pp x0 y0) x)^)^) @
(concat_p1 (ap idmap (bloop x)))^)))
b)
bbase
G: AbGroup y: G
(funb : ClassifyingSpace G =>
transport (funb0 : ClassifyingSpace G => bg_mul b b0 = bg_mul b0 b)
(bloop y)
(ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = bg_mul bbase b0) 1
(funx : G =>
sq_dp^-1
(match
ap idmap (bloop x) as p in (_ = a)
return
(forallpx1 : a = bbase,
1 @ ap (bg_mul bbase) (bloop x) = p @ px1 ->
PathSquare 1 px1 p (ap (bg_mul bbase) (bloop x)))
with
| 1 =>
funpx1 : bbase = bbase =>
match
ap (bg_mul bbase) (bloop x) as p in (_ = a)
return
(forallpx0 : bbase = a,
1 @ p = 1 @ px0 -> PathSquare 1 px0 1 p)
with
| 1 =>
fun (px0 : bbase = bbase) (e : 1 = 1 @ px0) =>
match
e @ concat_1p px0 in (_ = p)
return (1 = 1 @ p -> PathSquare 1 p 11)
with
| 1 => fun_ : 1 = 1 => 1%square
end e
end px1
end1
((concat_1p (ap (bg_mul bbase) (bloop x)) @
(ap_idmap (bloop x) @
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace G) bbase
(funx0 : G => bloop x0) (funx0y0 : G => bloop_pp x0 y0)
x)^)^) @
(concat_p1 (ap idmap (bloop x)))^)))
b) =
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = bg_mul bbase b0) 1
(funx : G =>
sq_dp^-1
(match
ap idmap (bloop x) as p in (_ = a)
return
(forallpx1 : a = bbase,
1 @ ap (bg_mul bbase) (bloop x) = p @ px1 ->
PathSquare 1 px1 p (ap (bg_mul bbase) (bloop x)))
with
| 1 =>
funpx1 : bbase = bbase =>
match
ap (bg_mul bbase) (bloop x) as p in (_ = a)
return
(forallpx0 : bbase = a,
1 @ p = 1 @ px0 -> PathSquare 1 px0 1 p)
with
| 1 =>
fun (px0 : bbase = bbase) (e : 1 = 1 @ px0) =>
match
e @ concat_1p px0 in (_ = p)
return (1 = 1 @ p -> PathSquare 1 p 11)
with
| 1 => fun_ : 1 = 1 => 1%square
end e
end px1
end1
((concat_1p (ap (bg_mul bbase) (bloop x)) @
(ap_idmap (bloop x) @
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace G) bbase
(funx0 : G => bloop x0) (funx0y0 : G => bloop_pp x0 y0) x)^)^) @
(concat_p1 (ap idmap (bloop x)))^)))
b)
bbase
G: AbGroup y: G
transport (funb : ClassifyingSpace G => bg_mul bbase b = b) (bloop y) 1 = 1
forallxy : G, ?bloop' (x * y) = ?bloop' x @ ?bloop' y
G, H: Group f: G $-> H
IsTrunc 1 (B H)
exact _.
G, H: Group f: G $-> H
G -> loops (B H)
exact (bloop o f).
G, H: Group f: G $-> H
forallxy : G, (bloop o f) (x * y) = (bloop o f) x @ (bloop o f) y
G, H: Group f: G $-> H x, y: G
(bloop o f) (x * y) = (bloop o f) x @ (bloop o f) y
G, H: Group f: G $-> H x, y: G
bloop (f x * f y) = bloop (f x) @ bloop (f y)
apply bloop_pp.Defined.
G, H: Group f: G $-> H
fmap loops (fmap B f) o bloop == bloop o f
G, H: Group f: G $-> H
fmap loops (fmap B f) o bloop == bloop o f
napply pClassifyingSpace_rec_beta_bloop.Defined.
G, K: Group f: G $-> K
fmap loops (fmap B f) o* pbloop ==* pbloop o* f
G, K: Group f: G $-> K
fmap loops (fmap B f) o* pbloop ==* pbloop o* f
G, K: Group f: G $-> K
fmap loops (fmap B f) o* pbloop == pbloop o* f
apply bloop_natural.Defined.
H: Univalence
NatEquiv ptype_group (loops o B)
H: Univalence
NatEquiv ptype_group (loops o B)
H: Univalence
foralla : Group, a $<~> (funx : Group => loops (B x)) a
H: Univalence
Is1Natural ptype_group (funx : Group => loops (B x)) (funa : Group => ?e a)
H: Univalence
Is1Natural ptype_group (funx : Group => loops (B x))
(funa : Group => (funG : Group => pequiv_g_loops_bg) a)
H: Univalence
forall (aa' : Group) (f : a $-> a'),
(funa0 : Group => cate_fun ((funG : Group => pequiv_g_loops_bg) a0)) a' $o
fmap ptype_group f $==
fmap (loops o B) f $o
(funa0 : Group => cate_fun ((funG : Group => pequiv_g_loops_bg) a0)) a
H: Univalence X, Y: Group f: X $-> Y
(funa : Group => cate_fun ((funG : Group => pequiv_g_loops_bg) a)) Y $o
fmap ptype_group f $==
fmap (loops o B) f $o
(funa : Group => cate_fun ((funG : Group => pequiv_g_loops_bg) a)) X
H: Univalence X, Y: Group f: X $-> Y
fmap (loops o B) f $o
(funa : Group => cate_fun ((funG : Group => pequiv_g_loops_bg) a)) X $==
(funa : Group => cate_fun ((funG : Group => pequiv_g_loops_bg) a)) Y $o
fmap ptype_group f
apply pbloop_natural.Defined.
Is1Functor B
Is1Functor B
forall (ab : Group) (fg : a $-> b), f $== g -> fmap B f $== fmap B g
foralla : Group, fmap B (Id a) $== Id (B a)
forall (abc : Group) (f : a $-> b) (g : b $-> c),
fmap B (g $o f) $== fmap B g $o fmap B f
(** Action on 2-cells *)
forall (ab : Group) (fg : a $-> b), f $== g -> fmap B f $== fmap B g
G, H: Group f, g: G $-> H p: f $== g
fmap B f $== fmap B g
G, H: Group f, g: G $-> H p: f $== g
fmap B f == fmap B g
G, H: Group f, g: G $-> H p: f $== g
?p pt = dpoint_eq (fmap B f) @ (dpoint_eq (fmap B g))^
G, H: Group f, g: G $-> H p: f $== g
fmap B f == fmap B g
G, H: Group f, g: G $-> H p: f $== g
forallb : ClassifyingSpace G,
IsHSet ((funb0 : ClassifyingSpace G => fmap B f b0 = fmap B g b0) b)
G, H: Group f, g: G $-> H p: f $== g
(funb : ClassifyingSpace G => fmap B f b = fmap B g b) bbase
G, H: Group f, g: G $-> H p: f $== g
forallx : G,
DPath (funb : ClassifyingSpace G => fmap B f b = fmap B g b)
(bloop x) ?bbase'?bbase'
G, H: Group f, g: G $-> H p: f $== g
(funb : ClassifyingSpace G => fmap B f b = fmap B g b) bbase
G, H: Group f, g: G $-> H p: f $== g
forallx : G,
DPath (funb : ClassifyingSpace G => fmap B f b = fmap B g b)
(bloop x) ?bbase'?bbase'
G, H: Group f, g: G $-> H p: f $== g
forallx : G,
DPath (funb : ClassifyingSpace G => fmap B f b = fmap B g b) (bloop x) 11
G, H: Group f, g: G $-> H p: f $== g x: G
DPath (funb : ClassifyingSpace G => fmap B f b = fmap B g b) (bloop x) 11
G, H: Group f, g: G $-> H p: f $== g x: G
PathSquare 11 (ap (fmap B f) (bloop x)) (ap (fmap B g) (bloop x))
G, H: Group f, g: G $-> H p: f $== g x: G
PathSquare 11
(ap
(ClassifyingSpace_rec (ClassifyingSpace H) pt
(funx0 : G => bloop (f x0))
(funx0y : G =>
ap bloop (grp_homo_op f x0 y) @ bloop_pp (f x0) (f y)))
(bloop x))
(ap
(ClassifyingSpace_rec (ClassifyingSpace H) pt
(funx0 : G => bloop (g x0))
(funx0y : G =>
ap bloop (grp_homo_op g x0 y) @ bloop_pp (g x0) (g y)))
(bloop x))
G, H: Group f, g: G $-> H p: f $== g x: G
PathSquare 11 (bloop (f x)) (bloop (g x))
G, H: Group f, g: G $-> H p: f $== g x: G
bloop (f x) = bloop (g x)
G, H: Group f, g: G $-> H p: f $== g x: G
f x = g x
exact (p x).
G, H: Group f, g: G $-> H p: f $== g
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => fmap B f b = fmap B g b) 1
(funx : G =>
sq_dp^-1
(internal_paths_rew_r
(funp0 : ClassifyingSpace_rec (ClassifyingSpace H) pt
(funx0 : G => bloop (f x0))
(funx0y : G =>
ap bloop (grp_homo_op f x0 y) @ bloop_pp (f x0) (f y))
bbase =
ClassifyingSpace_rec (ClassifyingSpace H) pt
(funx0 : G => bloop (f x0))
(funx0y : G =>
ap bloop (grp_homo_op f x0 y) @ bloop_pp (f x0) (f y))
bbase =>
PathSquare 11 p0
(ap
(ClassifyingSpace_rec (ClassifyingSpace H) pt
(funx0 : G => bloop (g x0))
(funx0y : G =>
ap bloop (grp_homo_op g x0 y) @ bloop_pp (g x0) (g y)))
(bloop x)))
(internal_paths_rew_r
(funp0 : ClassifyingSpace_rec (ClassifyingSpace H) pt
(funx0 : G => bloop (g x0))
(funx0y : G =>
ap bloop (grp_homo_op g x0 y) @ bloop_pp (g x0) (g y))
bbase =
ClassifyingSpace_rec (ClassifyingSpace H) pt
(funx0 : G => bloop (g x0))
(funx0y : G =>
ap bloop (grp_homo_op g x0 y) @ bloop_pp (g x0) (g y))
bbase =>
PathSquare 11 (bloop (f x)) p0)
(letX := equiv_fun sq_1G in X (ap bloop (p x)))
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace H) pt
(funx0 : G => bloop (g x0))
(funx0y : G =>
ap bloop (grp_homo_op g x0 y) @ bloop_pp (g x0) (g y))
x))
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace H) pt
(funx0 : G => bloop (f x0))
(funx0y : G =>
ap bloop (grp_homo_op f x0 y) @ bloop_pp (f x0) (f y))
x)
:
PathSquare 11 (ap (fmap B f) (bloop x)) (ap (fmap B g) (bloop x))))
pt =
dpoint_eq (fmap B f) @ (dpoint_eq (fmap B g))^
reflexivity.(** Preservation of identity *)
foralla : Group, fmap B (Id a) $== Id (B a)
G: Group
fmap B (Id G) $== Id (B G)
G: Group
fmap B (Id G) == Id (B G)
G: Group
?p pt = dpoint_eq (fmap B (Id G)) @ (dpoint_eq (Id (B G)))^
G: Group
fmap B (Id G) == Id (B G)
G: Group
forallb : ClassifyingSpace G,
IsHSet ((funb0 : ClassifyingSpace G => fmap B (Id G) b0 = Id (B G) b0) b)
G: Group
(funb : ClassifyingSpace G => fmap B (Id G) b = Id (B G) b) bbase
G: Group
forallx : G,
DPath (funb : ClassifyingSpace G => fmap B (Id G) b = Id (B G) b)
(bloop x) ?bbase'?bbase'
G: Group
(funb : ClassifyingSpace G => fmap B (Id G) b = Id (B G) b) bbase
G: Group
forallx : G,
DPath (funb : ClassifyingSpace G => fmap B (Id G) b = Id (B G) b)
(bloop x) ?bbase'?bbase'
G: Group
forallx : G,
DPath (funb : ClassifyingSpace G => fmap B (Id G) b = Id (B G) b)
(bloop x) 11
G: Group x: G
DPath (funb : ClassifyingSpace G => fmap B (Id G) b = Id (B G) b)
(bloop x) 11
G: Group x: G
PathSquare 11 (ap (fmap B (Id G)) (bloop x)) (ap (Id (B G)) (bloop x))
G: Group x: G
PathSquare 11
(ap
(ClassifyingSpace_rec (ClassifyingSpace G) pt
(funx0 : G => bloop x0) (funx0y : G => 1 @ bloop_pp x0 y))
(bloop x))
(ap idmap (bloop x))
G: Group x: G
PathSquare 11 (bloop x) (ap idmap (bloop x))
G: Group x: G
bloop x = ap idmap (bloop x)
G: Group x: G
ap idmap (bloop x) = bloop x
apply ap_idmap.
G: Group
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => fmap B (Id G) b = Id (B G) b) 1
(funx : G =>
sq_dp^-1
(internal_paths_rew_r
(funp : ClassifyingSpace_rec (ClassifyingSpace G) pt
(funx0 : G => bloop x0) (funx0y : G => 1 @ bloop_pp x0 y)
bbase =
ClassifyingSpace_rec (ClassifyingSpace G) pt
(funx0 : G => bloop x0) (funx0y : G => 1 @ bloop_pp x0 y)
bbase =>
PathSquare 11 p (ap idmap (bloop x)))
(letX := equiv_fun sq_1G in X (ap_idmap (bloop x))^)
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace G) pt
(funx0 : G => bloop x0) (funx0y : G => 1 @ bloop_pp x0 y) x)
:
PathSquare 11 (ap (fmap B (Id G)) (bloop x)) (ap (Id (B G)) (bloop x))))
pt =
dpoint_eq (fmap B (Id G)) @ (dpoint_eq (Id (B G)))^
reflexivity.(** Preservation of composition *)
forall (abc : Group) (f : a $-> b) (g : b $-> c),
fmap B (g $o f) $== fmap B g $o fmap B f
G, H, K: Group g: G $-> H f: H $-> K
fmap B (f $o g) $== fmap B f $o fmap B g
G, H, K: Group g: G $-> H f: H $-> K
fmap B (f $o g) == fmap B f $o fmap B g
G, H, K: Group g: G $-> H f: H $-> K
?p pt = dpoint_eq (fmap B (f $o g)) @ (dpoint_eq (fmap B f $o fmap B g))^
G, H, K: Group g: G $-> H f: H $-> K
fmap B (f $o g) == fmap B f $o fmap B g
G, H, K: Group g: G $-> H f: H $-> K
forallb : ClassifyingSpace G,
IsHSet
((funb0 : ClassifyingSpace G =>
fmap B (f $o g) b0 = (fmap B f $o fmap B g) b0) b)
G, H, K: Group g: G $-> H f: H $-> K
(funb : ClassifyingSpace G => fmap B (f $o g) b = (fmap B f $o fmap B g) b)
bbase
G, H, K: Group g: G $-> H f: H $-> K
forallx : G,
DPath
(funb : ClassifyingSpace G => fmap B (f $o g) b = (fmap B f $o fmap B g) b)
(bloop x) ?bbase'?bbase'
G, H, K: Group g: G $-> H f: H $-> K
(funb : ClassifyingSpace G => fmap B (f $o g) b = (fmap B f $o fmap B g) b)
bbase
G, H, K: Group g: G $-> H f: H $-> K
forallx : G,
DPath
(funb : ClassifyingSpace G => fmap B (f $o g) b = (fmap B f $o fmap B g) b)
(bloop x) ?bbase'?bbase'
G, H, K: Group g: G $-> H f: H $-> K
forallx : G,
DPath
(funb : ClassifyingSpace G => fmap B (f $o g) b = (fmap B f $o fmap B g) b)
(bloop x) 11
G, H, K: Group g: G $-> H f: H $-> K x: G
DPath
(funb : ClassifyingSpace G => fmap B (f $o g) b = (fmap B f $o fmap B g) b)
(bloop x) 11
G, H, K: Group g: G $-> H f: H $-> K x: G
PathSquare 11 (ap (fmap B (f $o g)) (bloop x))
(ap (fmap B f $o fmap B g) (bloop x))
G, H, K: Group g: G $-> H f: H $-> K x: G
PathSquare 11
(ap
(ClassifyingSpace_rec (ClassifyingSpace K) pt
(funx0 : G => bloop (f (g x0)))
(funx0y : G =>
ap bloop
(abstract_algebra.compose_sg_morphism g f
(issemigrouppreserving_grp_homo g)
(issemigrouppreserving_grp_homo f) x0 y) @
bloop_pp (f (g x0)) (f (g y))))
(bloop x))
(ap
(funx0 : ClassifyingSpace G =>
ClassifyingSpace_rec (ClassifyingSpace K) pt
(funx1 : H => bloop (f x1))
(funx1y : H =>
ap bloop (grp_homo_op f x1 y) @ bloop_pp (f x1) (f y))
(ClassifyingSpace_rec (ClassifyingSpace H) pt
(funx1 : G => bloop (g x1))
(funx1y : G =>
ap bloop (grp_homo_op g x1 y) @ bloop_pp (g x1) (g y))
x0))
(bloop x))
G, H, K: Group g: G $-> H f: H $-> K x: G
?Goal =
ap
(ClassifyingSpace_rec (ClassifyingSpace K) pt
(funx0 : G => bloop (f (g x0)))
(funx0y : G =>
ap bloop
(abstract_algebra.compose_sg_morphism g f
(issemigrouppreserving_grp_homo g)
(issemigrouppreserving_grp_homo f) x0 y) @
bloop_pp (f (g x0)) (f (g y))))
(bloop x)
G, H, K: Group g: G $-> H f: H $-> K x: G
?Goal0 =
ap
(funx0 : ClassifyingSpace G =>
ClassifyingSpace_rec (ClassifyingSpace K) pt (funx1 : H => bloop (f x1))
(funx1y : H => ap bloop (grp_homo_op f x1 y) @ bloop_pp (f x1) (f y))
(ClassifyingSpace_rec (ClassifyingSpace H) pt
(funx1 : G => bloop (g x1))
(funx1y : G =>
ap bloop (grp_homo_op g x1 y) @ bloop_pp (g x1) (g y))
x0))
(bloop x)
G, H, K: Group g: G $-> H f: H $-> K x: G
PathSquare 11?Goal?Goal0
G, H, K: Group g: G $-> H f: H $-> K x: G
ap
(ClassifyingSpace_rec (ClassifyingSpace K) pt
(funx0 : G => bloop (f (g x0)))
(funx0y : G =>
ap bloop
(abstract_algebra.compose_sg_morphism g f
(issemigrouppreserving_grp_homo g)
(issemigrouppreserving_grp_homo f) x0 y) @
bloop_pp (f (g x0)) (f (g y))))
(bloop x) =
?Goal
G, H, K: Group g: G $-> H f: H $-> K x: G
ap
(funx0 : ClassifyingSpace G =>
ClassifyingSpace_rec (ClassifyingSpace K) pt (funx1 : H => bloop (f x1))
(funx1y : H => ap bloop (grp_homo_op f x1 y) @ bloop_pp (f x1) (f y))
(ClassifyingSpace_rec (ClassifyingSpace H) pt
(funx1 : G => bloop (g x1))
(funx1y : G =>
ap bloop (grp_homo_op g x1 y) @ bloop_pp (g x1) (g y))
x0))
(bloop x) =
?Goal0
G, H, K: Group g: G $-> H f: H $-> K x: G
PathSquare 11?Goal?Goal0
G, H, K: Group g: G $-> H f: H $-> K x: G
ap
(ClassifyingSpace_rec (ClassifyingSpace K) pt
(funx0 : G => bloop (f (g x0)))
(funx0y : G =>
ap bloop
(abstract_algebra.compose_sg_morphism g f
(issemigrouppreserving_grp_homo g)
(issemigrouppreserving_grp_homo f) x0 y) @
bloop_pp (f (g x0)) (f (g y))))
(bloop x) =
?Goal
G, H, K: Group g: G $-> H f: H $-> K x: G
ap
(ClassifyingSpace_rec (ClassifyingSpace H) bbase
(funx0 : G => bloop (g x0))
(funx0y : G => ap bloop (grp_homo_op g x0 y) @ bloop_pp (g x0) (g y)))
(bloop x) =
?Goal3
G, H, K: Group g: G $-> H f: H $-> K x: G
ap
(ClassifyingSpace_rec (ClassifyingSpace K) pt (funx0 : H => bloop (f x0))
(funx0y : H => ap bloop (grp_homo_op f x0 y) @ bloop_pp (f x0) (f y)))
?Goal3 =
?Goal0
G, H, K: Group g: G $-> H f: H $-> K x: G
PathSquare 11?Goal?Goal0
G, H, K: Group g: G $-> H f: H $-> K x: G
PathSquare 11 (bloop (f (g x))) (bloop (f (g x)))
G, H, K: Group g: G $-> H f: H $-> K x: G
bloop (f (g x)) = bloop (f (g x))
reflexivity.
G, H, K: Group g: G $-> H f: H $-> K
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => fmap B (f $o g) b = (fmap B f $o fmap B g) b)
1
(funx : G =>
sq_dp^-1
(sq_ccGG
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace K) bbase
(funx0 : G => bloop (f (g x0)))
(funx0y : G =>
ap bloop
(abstract_algebra.compose_sg_morphism g f
(issemigrouppreserving_grp_homo g)
(issemigrouppreserving_grp_homo f) x0 y) @
bloop_pp (f (g x0)) (f (g y)))
x)^
((ap_compose
(ClassifyingSpace_rec (ClassifyingSpace H) bbase
(funx0 : G => bloop (g x0))
(funx0y : G =>
ap bloop (grp_homo_op g x0 y) @ bloop_pp (g x0) (g y)))
(ClassifyingSpace_rec (ClassifyingSpace K) pt
(funx0 : H => bloop (f x0))
(funx0y : H =>
ap bloop (grp_homo_op f x0 y) @ bloop_pp (f x0) (f y)))
(bloop x) @
ap
(ap
(ClassifyingSpace_rec (ClassifyingSpace K) pt
(funx0 : H => bloop (f x0))
(funx0y : H =>
ap bloop (grp_homo_op f x0 y) @ bloop_pp (f x0) (f y))))
(ClassifyingSpace_rec_beta_bloop (ClassifyingSpace H) bbase
(funx0 : G => bloop (g x0))
(funx0y : G =>
ap bloop (grp_homo_op g x0 y) @ bloop_pp (g x0) (g y))
x)) @
ClassifyingSpace_rec_beta_bloop (ClassifyingSpace K) pt
(funx0 : H => bloop (f x0))
(funx0y : H =>
ap bloop (grp_homo_op f x0 y) @ bloop_pp (f x0) (f y))
(g x))^
(letX := equiv_fun sq_1G in X 1)
:
PathSquare 11 (ap (fmap B (f $o g)) (bloop x))
(ap (fmap B f $o fmap B g) (bloop x))))
pt =
dpoint_eq (fmap B (f $o g)) @ (dpoint_eq (fmap B f $o fmap B g))^
reflexivity.Defined.(** Interestingly, [fmap B] is an equivalence *)
fmap B
o (funf : B G $-> B H =>
grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg)) ==
idmap
U: Univalence G, H: Group
(funf : B G $-> B H =>
grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
o fmap B == idmap
U: Univalence G, H: Group
fmap B
o (funf : B G $-> B H =>
grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg)) ==
idmap
U: Univalence G, H: Group f: B G $-> B H
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg)) =
f
U: Univalence G, H: Group f: B G $-> B H
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg)) ==*
f
U: Univalence G, H: Group f: B G $-> B H
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg)) ==
f
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg)) ==
f
U: Univalence G, H: Group f: B G $-> B H
forallb : ClassifyingSpace G,
IsHSet
((funb0 : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b0 =
f b0) b)
U: Univalence G, H: Group f: B G $-> B H
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b) bbase
U: Univalence G, H: Group f: B G $-> B H
forallx : G,
DPath
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b)
(bloop x) ?bbase'?bbase'
U: Univalence G, H: Group f: B G $-> B H
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b) bbase
U: Univalence G, H: Group f: B G $-> B H
forallx : G,
DPath
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b)
(bloop x) ?bbase'?bbase'
U: Univalence G, H: Group f: B G $-> B H
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b) bbase
U: Univalence G, H: Group f: B G $-> B H
f bbase = bbase
rapply (point_eq f).
U: Univalence G, H: Group f: B G $-> B H
forallx : G,
DPath
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b)
(bloop x)
((point_eq f)^
:
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b) bbase)
((point_eq f)^
:
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b) bbase)
U: Univalence G, H: Group f: B G $-> B H
forallx : G,
DPath
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b)
(bloop x)
((point_eq f)^
:
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b) bbase)
((point_eq f)^
:
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b) bbase)
U: Univalence G, H: Group f: B G $-> B H g: G
DPath
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b)
(bloop g)
((point_eq f)^
:
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b) bbase)
((point_eq f)^
:
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b) bbase)
U: Univalence G, H: Group f: B G $-> B H g: G
PathSquare (point_eq f)^ (point_eq f)^
(ap
(fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg)))
(bloop g))
(ap f (bloop g))
U: Univalence G, H: Group f: B G $-> B H g: G
PathSquare (point_eq f)^ (point_eq f)^
(bloop
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg) g))
(ap f (bloop g))
U: Univalence G, H: Group f: B G $-> B H g: G
PathSquare (point_eq f)^ (point_eq f)^
(bloop (encode bbase ((point_eq f)^ @ (ap f (bloop g) @ point_eq f))))
(ap f (bloop g))
U: Univalence G, H: Group f: B G $-> B H g: G
?Goal = bloop (encode bbase ((point_eq f)^ @ (ap f (bloop g) @ point_eq f)))
U: Univalence G, H: Group f: B G $-> B H g: G
PathSquare (point_eq f)^ (point_eq f)^ ?Goal (ap f (bloop g))
U: Univalence G, H: Group f: B G $-> B H g: G
PathSquare (point_eq f)^ (point_eq f)^
((point_eq f)^ @ (ap f (bloop g) @ point_eq f))
(ap f (bloop g))
U: Univalence G, H: Group f: B G $-> B H g: G
(point_eq f)^ @ ap f (bloop g) =
((point_eq f)^ @ (ap f (bloop g) @ point_eq f)) @ (point_eq f)^
U: Univalence G, H: Group f: B G $-> B H g: G
(point_eq f)^ @ ap f (bloop g) =
(point_eq f)^ @ ((ap f (bloop g) @ point_eq f) @ (point_eq f)^)
U: Univalence G, H: Group f: B G $-> B H g: G
(point_eq f)^ @ ap f (bloop g) = (point_eq f)^ @ ap f (bloop g)
reflexivity.}
U: Univalence G, H: Group f: B G $-> B H
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b)
((point_eq f)^
:
(funb : ClassifyingSpace G =>
fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
b =
f b) bbase)
(fung : G =>
sq_dp^-1
(internal_paths_rew_r
(funp : ClassifyingSpace_rec (B H) pt
(funx : G =>
bloop
(grp_homo_compose
(grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f)
grp_iso_g_loopgroup_bg)
x))
(funxy : G =>
ap bloop
(grp_homo_op
(grp_homo_compose
(grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f)
grp_iso_g_loopgroup_bg))
x y) @
bloop_pp
(grp_homo_compose
(grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f)
grp_iso_g_loopgroup_bg)
x)
(grp_homo_compose
(grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f)
grp_iso_g_loopgroup_bg)
y))
bbase =
ClassifyingSpace_rec (B H) pt
(funx : G =>
bloop
(grp_homo_compose
(grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f)
grp_iso_g_loopgroup_bg)
x))
(funxy : G =>
ap bloop
(grp_homo_op
(grp_homo_compose
(grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f)
grp_iso_g_loopgroup_bg))
x y) @
bloop_pp
(grp_homo_compose
(grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f)
grp_iso_g_loopgroup_bg)
x)
(grp_homo_compose
(grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f)
grp_iso_g_loopgroup_bg)
y))
bbase =>
PathSquare (point_eq f)^ (point_eq f)^ p (ap f (bloop g)))
(sq_ccGc
(decode_encode pt ((point_eq f)^ @ (ap f (bloop g) @ point_eq f)))^
(letX := equiv_fun sq_path in
X
(internal_paths_rew_r
(funp : pt = f bbase => (point_eq f)^ @ ap f (bloop g) = p)
(internal_paths_rew_r
(funp : f pt = f bbase =>
(point_eq f)^ @ ap f (bloop g) = (point_eq f)^ @ p)
1 (concat_pp_V (ap f (bloop g)) (point_eq f)))
(concat_pp_p (point_eq f)^ (ap f (bloop g) @ point_eq f)
(point_eq f)^)))
:
PathSquare (point_eq f)^ (point_eq f)^
(bloop
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg)
g))
(ap f (bloop g)))
(ClassifyingSpace_rec_beta_bloop (B H) pt
(funx : G =>
bloop
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg)
x))
(funxy : G =>
ap bloop
(grp_homo_op
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f)
grp_iso_g_loopgroup_bg))
x y) @
bloop_pp
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg)
x)
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg)
y))
g)))
pt =
dpoint_eq
(fmap B
(grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))) @
(dpoint_eq f)^
symmetry; apply concat_1p.
U: Univalence G, H: Group
(funf : B G $-> B H =>
grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops f) grp_iso_g_loopgroup_bg))
o fmap B == idmap
U: Univalence G, H: Group f: G $-> H
grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops (fmap B f)) grp_iso_g_loopgroup_bg) =
f
U: Univalence G, H: Group f: G $-> H
grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops (fmap B f)) grp_iso_g_loopgroup_bg) ==
f
U: Univalence G, H: Group f: G $-> H x: G
grp_homo_compose (grp_iso_inverse grp_iso_g_loopgroup_bg)
(grp_homo_compose (grp_homo_loops (fmap B f)) grp_iso_g_loopgroup_bg) x =
f x
U: Univalence G, H: Group f: G $-> H x: G
grp_homo_compose (grp_homo_loops (fmap B f)) grp_iso_g_loopgroup_bg x =
equiv_g_loops_bg (f x)
napply pClassifyingSpace_rec_beta_bloop.Defined.(** Hence we have that group homomorphisms are equivalent to pointed maps between their deloopings. *)
U: Univalence G, H: Group
(G $-> H) <~> (B G $-> B H)
U: Univalence G, H: Group
(G $-> H) <~> (B G $-> B H)
U: Univalence G, H: Group
(G $-> H) -> B G $-> B H
U: Univalence G, H: Group
IsEquiv ?equiv_fun
2: apply isequiv_fmap_pclassifyingspace.Defined.
U: Univalence G: Group
Is1Natural (opyon G) (opyon (B G) o B)
(funH : Group => equiv_grp_homo_pmap_bg G H)
U: Univalence G: Group
Is1Natural (opyon G) (opyon (B G) o B)
(funH : Group => equiv_grp_homo_pmap_bg G H)
U: Univalence G: Group
forall (aa' : Group) (f : a $-> a'),
(funH : Group => equiv_fun (equiv_grp_homo_pmap_bg G H)) a' $o
fmap (opyon G) f $==
fmap (opyon (B G) o B) f $o
(funH : Group => equiv_fun (equiv_grp_homo_pmap_bg G H)) a
U: Univalence G, K, H: Group f: K $-> H h: opyon G K
(equiv_grp_homo_pmap_bg G H $o fmap (opyon G) f) h =
(fmap (opyon (B G) o B) f $o equiv_grp_homo_pmap_bg G K) h
U: Univalence G, K, H: Group f: K $-> H h: opyon G K
(equiv_grp_homo_pmap_bg G H $o fmap (opyon G) f) h $==
(fmap (opyon (B G) o B) f $o equiv_grp_homo_pmap_bg G K) h
rapply (fmap_comp B h f).Defined.
U: Univalence G: Group
NatEquiv (opyon G) (opyon (B G) o B)
U: Univalence G: Group
NatEquiv (opyon G) (opyon (B G) o B)
rapply Build_NatEquiv.Defined.(** [B(Pi 1 X) <~>* X] for a 0-connected 1-truncated [X]. *)
H: Univalence X: pType H0: IsConnected (Tr 0) X IsTrunc0: IsTrunc 1 X
B (Pi1 X) <~>* X
H: Univalence X: pType H0: IsConnected (Tr 0) X IsTrunc0: IsTrunc 1 X
B (Pi1 X) <~>* X
(** The pointed map [f] is the adjunct to the inverse of the natural map [loops X -> Pi1 X]. We define it first, to make the later goals easier to read. *)
H: Univalence X: pType H0: IsConnected (Tr 0) X IsTrunc0: IsTrunc 1 X
B (Pi1 X) ->* X
H: Univalence X: pType H0: IsConnected (Tr 0) X IsTrunc0: IsTrunc 1 X f:= ?Goal: B (Pi1 X) ->* X
B (Pi1 X) <~>* X
H: Univalence X: pType H0: IsConnected (Tr 0) X IsTrunc0: IsTrunc 1 X
B (Pi1 X) ->* X
H: Univalence X: pType H0: IsConnected (Tr 0) X IsTrunc0: IsTrunc 1 X
IsTrunc 1 X
H: Univalence X: pType H0: IsConnected (Tr 0) X IsTrunc0: IsTrunc 1 X
Pi1 X -> loops X
H: Univalence X: pType H0: IsConnected (Tr 0) X IsTrunc0: IsTrunc 1 X
forallxy : Pi1 X, ?bloop' (x * y) = ?bloop' x @ ?bloop' y
H: Univalence X: pType H0: IsConnected (Tr 0) X IsTrunc0: IsTrunc 1 X
Pi1 X -> loops X
H: Univalence X: pType H0: IsConnected (Tr 0) X IsTrunc0: IsTrunc 1 X
forallxy : Pi1 X, ?bloop' (x * y) = ?bloop' x @ ?bloop' y
H: Univalence X: pType H0: IsConnected (Tr 0) X IsTrunc0: IsTrunc 1 X
NatEquiv (funx : Group => opyon (pTr 1 X) (B x))
(funx : Group => opyon X (B x))
H: Univalence X: pType H0: IsConnected (Tr 0) X
foralla : Group,
(funx : Group => opyon (pTr 1 X) (B x)) a $<~>
(funx : Group => opyon X (B x)) a
H: Univalence X: pType H0: IsConnected (Tr 0) X
Is1Natural (funx : Group => opyon (pTr 1 X) (B x))
(funx : Group => opyon X (B x)) (funa : Group => ?e a)
H: Univalence X: pType H0: IsConnected (Tr 0) X
Is1Natural (funx : Group => opyon (pTr 1 X) (B x))
(funx : Group => opyon X (B x))
(funa : Group => (funa0 : Group => pointed_equiv_equiv pequiv_ptr_rec) a)
exact (is1natural_prewhisker (G:=opyon X) B (opyoneda _ _ _)).Defined.(** The classifying space functor and the fundamental group functor form an adjunction ([pType] needs to be restricted to the subcategory of 0-connected pointed types). Note that the full adjunction should also be natural in [X], but this was not needed yet. *)
H: Univalence X: pType H0: IsConnected (Tr 0) X G: Group
(Pi 1 X $-> G) <~> (X $-> B G)
H: Univalence X: pType H0: IsConnected (Tr 0) X G: Group
(Pi 1 X $-> G) <~> (X $-> B G)
rapply natequiv_bg_pi1_adjoint.Defined.
H: Univalence X: pType H0: IsConnected (Tr 0) X
Is1Natural (opyon (Pi1 X)) (opyon X o B)
(funG : Group => equiv_bg_pi1_adjoint X G)
H: Univalence X: pType H0: IsConnected (Tr 0) X
Is1Natural (opyon (Pi1 X)) (opyon X o B)
(funG : Group => equiv_bg_pi1_adjoint X G)
rapply (is1natural_natequiv (natequiv_bg_pi1_adjoint X)).(** Why so slow? Fixed by making this opaque. *)Opaque equiv_bg_pi1_adjoint.Defined.Transparent equiv_bg_pi1_adjoint.