Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Pointed WildCat.Require Import Cubical.DPath Cubical.PathSquare Cubical.DPathSquare.Require Import Algebra.AbGroups.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.
Trying to mask the absolute name "ClassifyingSpace.ClassifyingSpace"!
[masking-absolute-name,deprecated-since-8.8,deprecated,default]
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': forallx : G, DPath P (bloop x) bbase' bbase' bloop_pp': forallxy : G,
DPathSquare P (sq_G1 (bloop_pp x y))
(bloop' (x * y)) (bloop' x @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': forallx : G, DPath P (bloop x) bbase' bbase' bloop_pp': forallxy : G,
DPathSquare P (sq_G1 (bloop_pp x y))
(bloop' (x * y)) (bloop' x @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': forallxy : G,
bloop' (x * y) = bloop' x @ bloop' y x, y: G
DPathSquare (fun_ : ClassifyingSpace G => P)
(sq_G1 (bloop_pp x y))
((funx : G =>
letX := equiv_fun dp_const in X (bloop' x))
(x * y))
((funx : G =>
letX := equiv_fun dp_const in X (bloop' x)) x @Dp
(funx : G =>
letX := equiv_fun dp_const in X (bloop' x)) 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 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': forallxy : G,
bloop' (x * y) = bloop' x @ bloop' y 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': forallxy : G,
bloop' (x * y) = bloop' x @ bloop' y 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': forallxy : G,
bloop' (x * y) = bloop' x @ bloop' y 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': forallx : G, DPath P (bloop x) 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': forallx : G, DPath P (bloop x) bbase' bbase' x, y: G
DPath
(funx : bbase = bbase => DPath P x 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': forallxy : G,
bloop' (x * y) = bloop' x @ 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': forallxy : G,
bloop' (x * y) = bloop' x @ 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 (funx : B G => codes x) (bloop x) y = y * x
H: Univalence G: Group x, y: G
transport idmap
(ap (funx : B G => codes x) (bloop x)) y = y * x
H: Univalence G: Group x, y: G
transport idmap
(ap (funx : B G => codes x) (bloop x)) y =
transport idmap (path_universe (funy : G => y * x)) y
H: Univalence G: Group x, y: G
ap (funx : B G => codes x) (bloop x) =
path_universe (funy : G => y * x)
H: Univalence G: Group x, y: G
ap trunctype_type (ap codes (bloop x)) =
path_universe (funy : G => y * x)
H: Univalence G: Group x, y: G
ap codes (bloop x) =
path_trunctype
{|
equiv_fun := funy : G => y * 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
(funb : ClassifyingSpace G => b = b) (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 (funb : ClassifyingSpace G => b = b)
(bloop x1) (bloop x0) (bloop x0)) b) (x * y) =
(funx0 : G =>
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = b) (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 (funb : ClassifyingSpace G => b = b)
(bloop x1) (bloop x0) (bloop x0)) b) x @
(funx0 : G =>
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = b) (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 (funb : ClassifyingSpace G => b = b)
(bloop x1) (bloop x0) (bloop x0)) b) y
G: AbGroup b: B G x, y: G
(funx : G =>
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = b) (bloop x)
((funy : G =>
letX :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X (bloop y) (bloop x) (bloop x)
(concat_pp_p (bloop y)^ (bloop x) (bloop y) @
moveR_Vp (bloop x @ bloop y) (bloop x)
(bloop y)
(((bloop_pp x y)^ @
ap bloop (commutativity x y)) @
bloop_pp y x)))
:
forallx0 : G,
DPath (funb : ClassifyingSpace G => b = b)
(bloop x0) (bloop x) (bloop x)) b) (x * y) =
(funx : G =>
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = b) (bloop x)
((funy : G =>
letX :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X (bloop y) (bloop x) (bloop x)
(concat_pp_p (bloop y)^ (bloop x) (bloop y) @
moveR_Vp (bloop x @ bloop y) (bloop x)
(bloop y)
(((bloop_pp x y)^ @
ap bloop (commutativity x y)) @
bloop_pp y x)))
:
forallx0 : G,
DPath (funb : ClassifyingSpace G => b = b)
(bloop x0) (bloop x) (bloop x)) b) x @
(funx : G =>
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = b) (bloop x)
((funy : G =>
letX :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X (bloop y) (bloop x) (bloop x)
(concat_pp_p (bloop y)^ (bloop x) (bloop y) @
moveR_Vp (bloop x @ bloop y) (bloop x)
(bloop y)
(((bloop_pp x y)^ @
ap bloop (commutativity x y)) @
bloop_pp y x)))
:
forallx0 : G,
DPath (funb : ClassifyingSpace G => b = b)
(bloop x0) (bloop x) (bloop x)) b) y
G: AbGroup x, y: G
forallb : B G,
(funx : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0) (bloop x)
((funy : G =>
letX :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X (bloop y) (bloop x) (bloop x)
(concat_pp_p (bloop y)^ (bloop x) (bloop y) @
moveR_Vp (bloop x @ bloop y) (bloop x)
(bloop y)
(((bloop_pp x y)^ @
ap bloop (commutativity x y)) @
bloop_pp y x)))
:
forallx0 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0) (bloop x) (bloop x)) b) (x * y) =
(funx : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0) (bloop x)
((funy : G =>
letX :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X (bloop y) (bloop x) (bloop x)
(concat_pp_p (bloop y)^ (bloop x) (bloop y) @
moveR_Vp (bloop x @ bloop y) (bloop x)
(bloop y)
(((bloop_pp x y)^ @
ap bloop (commutativity x y)) @
bloop_pp y x)))
:
forallx0 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0) (bloop x) (bloop x)) b) x @
(funx : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0) (bloop x)
((funy : G =>
letX :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X (bloop y) (bloop x) (bloop x)
(concat_pp_p (bloop y)^ (bloop x) (bloop y) @
moveR_Vp (bloop x @ bloop y) (bloop x)
(bloop y)
(((bloop_pp x y)^ @
ap bloop (commutativity x y)) @
bloop_pp y x)))
:
forallx0 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0) (bloop x) (bloop x)) b) y
G: AbGroup x, y: G
(funb : ClassifyingSpace G =>
(funx : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0) (bloop x)
((funy : G =>
letX :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X (bloop y) (bloop x) (bloop x)
(concat_pp_p (bloop y)^ (bloop x) (bloop y) @
moveR_Vp (bloop x @ bloop y) (bloop x)
(bloop y)
(((bloop_pp x y)^ @
ap bloop (commutativity x y)) @
bloop_pp y x)))
:
forallx0 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0) (bloop x) (bloop x)) b) (x * y) =
(funx : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0) (bloop x)
((funy : G =>
letX :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X (bloop y) (bloop x) (bloop x)
(concat_pp_p (bloop y)^ (bloop x) (bloop y) @
moveR_Vp (bloop x @ bloop y) (bloop x)
(bloop y)
(((bloop_pp x y)^ @
ap bloop (commutativity x y)) @
bloop_pp y x)))
:
forallx0 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0) (bloop x) (bloop x)) b) x @
(funx : G =>
ClassifyingSpace_ind_hset
(funb0 : ClassifyingSpace G => b0 = b0) (bloop x)
((funy : G =>
letX :=
funpqr : bbase = bbase =>
equiv_fun (dp_paths_lr p q r) in
X (bloop y) (bloop x) (bloop x)
(concat_pp_p (bloop y)^ (bloop x) (bloop y) @
moveR_Vp (bloop x @ bloop y) (bloop x)
(bloop y)
(((bloop_pp x y)^ @
ap bloop (commutativity x y)) @
bloop_pp y x)))
:
forallx0 : G,
DPath (funb0 : ClassifyingSpace G => b0 = b0)
(bloop x0) (bloop x) (bloop x)) 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
(funx : G =>
sq_dp^-1
(letX := equiv_fun sq_1G in
X
(ap_idmap (bloop x) @
(ClassifyingSpace_rec_beta_bloop
(ClassifyingSpace G) bbase
(funx1 : G =>
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = b)
(bloop x1)
((funy : G =>
letX0 :=
funpqr : ... =>
equiv_fun (...) in
X0 (bloop y) (bloop x1) (bloop x1)
(concat_pp_p ...^ ... ... @
moveR_Vp ... ... ... ...))
:
forallx2 : G,
DPath
(funb : ClassifyingSpace G =>
b = b) (bloop x2) (bloop x1)
(bloop x1)) bbase)
(funx1y : G =>
ClassifyingSpace_ind_hprop
(funb : ClassifyingSpace G =>
(funx2 : G =>
ClassifyingSpace_ind_hset
(... => ...) (bloop x2)
(... : ...) b) (x1 * y) =
(funx2 : G =>
ClassifyingSpace_ind_hset (...)
(...) (...) b) x1 @
(funx2 : G =>
ClassifyingSpace_ind_hset (...)
(...) (...) b) y)
(bloop_pp x1 y) bbase) x)^))) 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
(funx : G =>
sq_dp^-1
(letX := equiv_fun sq_1G in
X
(ap_idmap (bloop x) @
(ClassifyingSpace_rec_beta_bloop
(ClassifyingSpace G) bbase
(funx1 : G =>
ClassifyingSpace_ind_hset
(funb : ClassifyingSpace G => b = b)
(bloop x1)
((funy : G =>
letX0 :=
funpqr : ... =>
equiv_fun (...) in
X0 (bloop y) (bloop x1) (bloop x1)
(concat_pp_p ...^ ... ... @
moveR_Vp ... ... ... ...))
:
forallx2 : G,
DPath
(funb : ClassifyingSpace G =>
b = b) (bloop x2) (bloop x1)
(bloop x1)) bbase)
(funx1y : G =>
ClassifyingSpace_ind_hprop
(funb : ClassifyingSpace G =>
(funx2 : G =>
ClassifyingSpace_ind_hset
(... => ...) (bloop x2)
(... : ...) b) (x1 * y) =
(funx2 : G =>
ClassifyingSpace_ind_hset (...)
(...) (...) b) x1 @
(funx2 : G =>
ClassifyingSpace_ind_hset (...)
(...) (...) b) y)
(bloop_pp x1 y) bbase) x)^))) 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)
((funy : G =>
letX0 :=
funpqr : ... =>
equiv_fun (...) in
X0 (bloop y) (bloop x1) (bloop x1)
(concat_pp_p ...^ ... ... @
moveR_Vp ... ... ... ...))
:
forallx2 : G,
DPath
(funb : ClassifyingSpace G =>
b = b) (bloop x2) (bloop x1)
(bloop x1)) bbase)
(funx1y : G =>
ClassifyingSpace_ind_hprop
(funb : ClassifyingSpace G =>
(funx2 : G =>
ClassifyingSpace_ind_hset
(... => ...) (bloop x2)
(... : ...) b) (x1 * y) =
(funx2 : G =>
ClassifyingSpace_ind_hset (...)
(...) (...) b) x1 @
(funx2 : G =>
ClassifyingSpace_ind_hset (...)
(...) (...) b) y)
(bloop_pp x1 y) 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)
((funy : G =>
letX0 :=
funpqr : ... =>
equiv_fun (...) in
X0 (bloop y) (bloop x1) (bloop x1)
(concat_pp_p ...^ ... ... @
moveR_Vp ... ... ... ...))
:
forallx2 : G,
DPath
(funb : ClassifyingSpace G =>
b = b) (bloop x2) (bloop x1)
(bloop x1)) bbase)
(funx1y : G =>
ClassifyingSpace_ind_hprop
(funb : ClassifyingSpace G =>
(funx2 : G =>
ClassifyingSpace_ind_hset
(... => ...) (bloop x2)
(... : ...) b) (x1 * y) =
(funx2 : G =>
ClassifyingSpace_ind_hset (...)
(...) (...) b) x1 @
(funx2 : G =>
ClassifyingSpace_ind_hset (...)
(...) (...) b) y)
(bloop_pp x1 y) 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
(forallpx2 : bbase = a,
1 @ p = 1 @ px2 ->
PathSquare 1 px2 1 p)
with
| 1 =>
fun (px2 : bbase = bbase)
(e : 1 = 1 @ px2) =>
match
e @ concat_1p px2 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)
(funx1y : G => bloop_pp x1 y) 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
(forallpx2 : bbase = a,
1 @ p = 1 @ px2 -> PathSquare 1 px2 1 p)
with
| 1 =>
fun (px2 : bbase = bbase)
(e : 1 = 1 @ px2) =>
match
e @ concat_1p px2 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)
(funx1y : G => bloop_pp x1 y) 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
(forallpx2 : bbase = a,
... = ... ->
PathSquare 1 px2 1 p)
with
| 1 =>
fun (px2 : bbase = bbase)
(e : 1 = 1 @ px2) =>
match ... in ... return ... with
| 1 => fun ... => 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)
(funx0y : G => bloop_pp x0 y) 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
(forallpx2 : bbase = a,
1 @ p = 1 @ px2 ->
PathSquare 1 px2 1 p)
with
| 1 =>
fun (px2 : bbase = bbase)
(e : 1 = 1 @ px2) =>
match
e @ concat_1p px2 in (_ = p)
return (... -> ...)
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)
(funx0y : G => bloop_pp x0 y) 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
(forallpx2 : bbase = a,
1 @ p = 1 @ px2 ->
PathSquare 1 px2 1 p)
with
| 1 =>
fun (px2 : bbase = bbase)
(e : 1 = 1 @ px2) =>
match
e @ concat_1p px2 in (_ = p)
return
(1 = ... -> 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)
(funx0y : G => bloop_pp x0 y) 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
(forallpx2 : bbase = a,
1 @ p = 1 @ px2 ->
PathSquare 1 px2 1 p)
with
| 1 =>
fun (px2 : bbase = bbase)
(e : 1 = 1 @ px2) =>
match
e @ concat_1p px2 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)
(funx0y : G => bloop_pp x0 y) 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
(forallpx2 : bbase = a,
1 @ p = 1 @ px2 ->
PathSquare 1 px2 1 p)
with
| 1 =>
fun (px2 : bbase = bbase)
(e : 1 = 1 @ px2) =>
match
e @ concat_1p px2 in (_ = p)
return
(1 = ... -> 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)
(funx0y : G => bloop_pp x0 y) 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
(forallpx2 : bbase = a,
1 @ p = 1 @ px2 ->
PathSquare 1 px2 1 p)
with
| 1 =>
fun (px2 : bbase = bbase)
(e : 1 = 1 @ px2) =>
match
e @ concat_1p px2 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)
(funx0y : G => bloop_pp x0 y) 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
(funx : G => bloop (f x))
(funxy : G =>
ap bloop (grp_homo_op f x y) @
bloop_pp (f x) (f y))) (bloop x))
(ap
(ClassifyingSpace_rec (ClassifyingSpace H) pt
(funx : G => bloop (g x))
(funxy : G =>
ap bloop (grp_homo_op g x y) @
bloop_pp (g x) (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
(funp : 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 p
(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
(funp : 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)) p)
(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
(funx : G => bloop x)
(funxy : G => 1 @ bloop_pp x 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
(funx : G => bloop (f (g x)))
(funxy : G =>
ap bloop
(abstract_algebra.compose_sg_morphism g f
(issemigrouppreserving_grp_homo g)
(issemigrouppreserving_grp_homo f) x y) @
bloop_pp (f (g x)) (f (g y)))) (bloop x))
(ap
(funx : ClassifyingSpace G =>
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 (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)) (bloop x))
G, H, K: Group g: G $-> H f: H $-> K x: G
?Goal =
ap
(ClassifyingSpace_rec (ClassifyingSpace K) pt
(funx : G => bloop (f (g x)))
(funxy : G =>
ap bloop
(abstract_algebra.compose_sg_morphism g f
(issemigrouppreserving_grp_homo g)
(issemigrouppreserving_grp_homo f) x y) @
bloop_pp (f (g x)) (f (g y)))) (bloop x)
G, H, K: Group g: G $-> H f: H $-> K x: G
?Goal0 =
ap
(funx : ClassifyingSpace G =>
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 (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)) (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
(funx : G => bloop (f (g x)))
(funxy : G =>
ap bloop
(abstract_algebra.compose_sg_morphism g f
(issemigrouppreserving_grp_homo g)
(issemigrouppreserving_grp_homo f) x y) @
bloop_pp (f (g x)) (f (g y)))) (bloop x) = ?Goal
G, H, K: Group g: G $-> H f: H $-> K x: G
ap
(funx : ClassifyingSpace G =>
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 (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)) (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
(funx : G => bloop (f (g x)))
(funxy : G =>
ap bloop
(abstract_algebra.compose_sg_morphism g f
(issemigrouppreserving_grp_homo g)
(issemigrouppreserving_grp_homo f) x y) @
bloop_pp (f (g x)) (f (g y)))) (bloop x) = ?Goal
G, H, K: Group g: G $-> H f: H $-> K x: G
ap
(ClassifyingSpace_rec (ClassifyingSpace H) bbase
(funx : G => bloop (g x))
(funxy : G =>
ap bloop (grp_homo_op g x y) @
bloop_pp (g x) (g y))) (bloop x) = ?Goal3
G, H, K: Group g: G $-> H f: H $-> K x: G
ap
(ClassifyingSpace_rec (ClassifyingSpace K) pt
(funx : H => bloop (f x))
(funxy : H =>
ap bloop (grp_homo_op f x y) @
bloop_pp (f x) (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.