Built with Alectryon, running Coq+SerAPI v8.18.0+0.18.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 Cubical WildCat.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_scope.LocalOpen Scope trunc_scope.LocalOpen Scope mc_mult_scope.(** * 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.(** 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
byapply sq_G1.Defined.(** Computation rule for 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 x: G
ap (ClassifyingSpace_rec P bbase' bloop' bloop_pp')
(bloop x) = bloop' x
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: G
ap (ClassifyingSpace_rec P bbase' bloop' bloop_pp')
(bloop x) = bloop' x
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: G
dp_const^-1
(apD
(ClassifyingSpace_rec P bbase' bloop' bloop_pp')
(bloop x)) = bloop' x
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: G
dp_const^-1
(apD
(ClassifyingSpace_ind
(fun_ : ClassifyingSpace G => P) bbase'
(funx : G => dp_const (bloop' x))
(funxy : G =>
ds_const'
(sq_GGcc
(eissect dp_const (bloop' (x * y)))^
((eissect dp_const (bloop' x @ bloop' y))^ @
ap dp_const^-1
(dp_const_pp (bloop' x) (bloop' y)))
(sq_G1 (bloop_pp' x y))))) (bloop x)) =
bloop' x
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: G
dp_const^-1 (dp_const (bloop' x)) = bloop' x
apply eissect.Qed.(** 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. *)Global 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. *)
apply concat_p1.Defined.(** [bloop] "preserves inverses" by taking inverses in [G] to inverses of paths in [BG]. *)
G: Group
forallx : G, bloop (- x) = (bloop x)^
G: Group
forallx : 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%path
G: Group x: G
bloop x @ bloop (- x) = bloop mon_unit
G: Group x: G
bloop (x * - x) = bloop mon_unit
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
?Goal pt = pt
G: Group
bloop pt = pt
apply 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 (B G) P (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
srapply (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 trunctype_type (ap codes (bloop x))) y = y * x
H: Univalence G: Group x, y: G
transport idmap
(ap trunctype_type
(path_trunctype
{|
equiv_fun := funt : G => t * x;
equiv_isequiv := isequiv_group_right_op G x
|})) y = y * x
H: Univalence G: Group x, y: G
transport idmap
(path_universe_uncurried
{|
equiv_fun := funt : G => t * x;
equiv_isequiv := isequiv_group_right_op G x
|}) y = y * x
byrewrite transport_path_universe_uncurried.Qed.
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%path
apply 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
intros x y; reflexivity.Defined.(* We also record this fact. *)
H: Univalence G: Group X, Y: pType IsTrunc0: IsTrunc 1 X IsTrunc1: IsTrunc 1 Y
(X ->** Y) ->*
[LoopGroup X $-> LoopGroup Y, grp_homo_const]
H: Univalence G: Group X, Y: pType IsTrunc0: IsTrunc 1 X IsTrunc1: IsTrunc 1 Y
(X ->** Y) ->*
[LoopGroup X $-> LoopGroup Y, grp_homo_const]
H: Univalence G: Group X, Y: pType IsTrunc0: IsTrunc 1 X IsTrunc1: IsTrunc 1 Y
(X ->** Y) ->
[LoopGroup X $-> LoopGroup Y, grp_homo_const]
H: Univalence G: Group X, Y: pType IsTrunc0: IsTrunc 1 X IsTrunc1: IsTrunc 1 Y
?Goal pt = pt
H: Univalence G: Group X, Y: pType IsTrunc0: IsTrunc 1 X IsTrunc1: IsTrunc 1 Y
(X ->** Y) ->
[LoopGroup X $-> LoopGroup Y, grp_homo_const]
H: Univalence G: Group X, Y: pType IsTrunc0: IsTrunc 1 X IsTrunc1: IsTrunc 1 Y f: X ->** Y
[LoopGroup X $-> LoopGroup Y, grp_homo_const]
H: Univalence G: Group X, Y: pType IsTrunc0: IsTrunc 1 X IsTrunc1: IsTrunc 1 Y f: X ->** Y
LoopGroup X -> LoopGroup Y
H: Univalence G: Group X, Y: pType IsTrunc0: IsTrunc 1 X IsTrunc1: IsTrunc 1 Y f: X ->** Y
IsSemiGroupPreserving ?f
H: Univalence G: Group X, Y: pType IsTrunc0: IsTrunc 1 X IsTrunc1: IsTrunc 1 Y f: X ->** Y
LoopGroup X -> LoopGroup Y
exact (fmap loops f).
H: Univalence G: Group X, Y: pType IsTrunc0: IsTrunc 1 X IsTrunc1: IsTrunc 1 Y f: X ->** Y
IsSemiGroupPreserving (fmap loops f)
nrapply fmap_loops_pp.
H: Univalence G: Group X, Y: pType IsTrunc0: IsTrunc 1 X IsTrunc1: IsTrunc 1 Y
(funf : X ->** Y =>
Build_GroupHomomorphism (fmap loops f)) pt = pt
H: Univalence G: Group X, Y: pType IsTrunc0: IsTrunc 1 X IsTrunc1: IsTrunc 1 Y
Build_GroupHomomorphism (fmap loops pt) = pt
H: Univalence G: Group X, Y: pType IsTrunc0: IsTrunc 1 X IsTrunc1: IsTrunc 1 Y
Build_GroupHomomorphism (fmap loops pt) == pt
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) 1%path 1%path
G: AbGroup x: G
DPath
(funb : ClassifyingSpace G => b = bg_mul bbase b)
(bloop x) 1%path 1%path
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
nrapply 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%path
(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%path
(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%path
(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%path
(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%path
(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%path =>
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%path =>
fun (px2 : bbase = bbase)
(e : 1%path = 1 @ px2) =>
match
e @ concat_1p px2 in (_ = p)
return
(1%path = 1 @ p ->
PathSquare 1 p 11)
with
| 1%path =>
fun_ : 1%path = 1%path =>
1%square
end e
end px1
end1%path
((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%path
(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%path =>
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%path =>
fun (px2 : bbase = bbase)
(e : 1%path = 1 @ px2) =>
match
e @ concat_1p px2 in (_ = p)
return
(1%path = 1 @ p ->
PathSquare 1 p 11)
with
| 1%path =>
fun_ : 1%path = 1%path => 1%square
end e
end px1
end1%path
((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%path
(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%path =>
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%path =>
fun (px2 : bbase = bbase)
(e : 1%path = 1 @ px2) =>
match ... in ... return ... with
| 1%path => fun ... => 1%square
end e
end px1
end1%path
((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%path
(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%path =>
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%path =>
fun (px2 : bbase = bbase)
(e : 1%path = 1 @ px2) =>
match
e @ concat_1p px2 in (_ = p)
return (... -> ...)
with
| 1%path =>
fun_ : 1%path = 1%path =>
1%square
end e
end px1
end1%path
((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%path
(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%path =>
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%path =>
fun (px2 : bbase = bbase)
(e : 1%path = 1 @ px2) =>
match
e @ concat_1p px2 in (_ = p)
return
(1%path = ... ->
PathSquare 1 p 11)
with
| 1%path =>
fun_ : 1%path = 1%path =>
1%square
end e
end px1
end1%path
((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%path
(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%path =>
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%path =>
fun (px2 : bbase = bbase)
(e : 1%path = 1 @ px2) =>
match
e @ concat_1p px2 in (_ = p)
return
(1%path = 1 @ p ->
PathSquare 1 p 11)
with
| 1%path =>
fun_ : 1%path = 1%path => 1%square
end e
end px1
end1%path
((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%path
(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%path =>
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%path =>
fun (px2 : bbase = bbase)
(e : 1%path = 1 @ px2) =>
match
e @ concat_1p px2 in (_ = p)
return
(1%path = ... ->
PathSquare 1 p 11)
with
| 1%path =>
fun_ : 1%path = 1%path =>
1%square
end e
end px1
end1%path
((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%path
(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%path =>
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%path =>
fun (px2 : bbase = bbase)
(e : 1%path = 1 @ px2) =>
match
e @ concat_1p px2 in (_ = p)
return
(1%path = 1 @ p ->
PathSquare 1 p 11)
with
| 1%path =>
fun_ : 1%path = 1%path => 1%square
end e
end px1
end1%path
((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%path = 1%path
G: AbGroup y: G
ap idmap (ap (bg_mul bbase) (bloop y)) @ 1 =
1 @ bloop y
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%path
(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)
nrapply 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, 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)
rapply is1natural_prewhisker.Defined.(** The classifying space functor and the fundamental group functor form an adjunction (pType needs to be restricted to the subcategory of 0-connected pTypes). 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.