Built with Alectryon. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
From HoTT Require Import Basics Types.From HoTT Require Import Basics Types.From HoTT.WildCat Require Import Core UniverseEquiv.Require Import Pointed.Require Import Cubical.DPath.Require Import Algebra.AbGroups.AbelianGroup.Require Import Homotopy.Suspension.Require Import Homotopy.ClassifyingSpace.Require Import Homotopy.HSpace.Coherent.Require Import Homotopy.HomotopyGroup.Require Import Homotopy.Hopf.Require Import Truncations.Core Truncations.Connectedness.(** * Eilenberg-Mac Lane spaces *)LocalOpen Scope pointed_scope.LocalOpen Scope nat_scope.LocalOpen Scope mc_mult_scope.(** The definition of the Eilenberg-Mac Lane spaces. Note that while we allow [G] to be non-abelian for [n > 1], later results will need to assume that [G] is abelian. *)FixpointEilenbergMacLane@{u v | u <= v} (G : Group@{u}) (n : nat) : pType@{v}
:= match n with
| 0 => G
| 1 => pClassifyingSpace@{u v} G
| m.+1 => pTr m.+1 (psusp (EilenbergMacLane G m))
end.Notation"'K(' G , n )" := (EilenbergMacLane G n).SectionEilenbergMacLane.Context `{Univalence}.
H: Univalence G: Group n: nat
IsTrunc n K( G, n)
H: Univalence G: Group n: nat
IsTrunc n K( G, n)
destruct n as [|[]]; exact _.Defined.(** This is subsumed by the next result, but Coq doesn't always find the next result when it should. *)
H: Univalence G: Group n: nat
IsConnected (Tr n) K( G, n.+1)
H: Univalence G: Group n: nat
IsConnected (Tr n) K( G, n.+1)
induction n; exact _.Defined.
H: Univalence G: Group n: nat
IsConnected (Tr n.-1) K( G, n)
H: Univalence G: Group n: nat
IsConnected (Tr n.-1) K( G, n)
H: Univalence G: Group
IsConnected (Tr 0%nat.-1) K( G, 0)
H: Univalence G: Group n: nat
IsConnected (Tr n.+1%nat.-1) K( G, n.+1)
H: Univalence G: Group n: nat
IsConnected (Tr n.+1%nat.-1) K( G, n.+1)
apply isconnected_em.Defined.
H: Univalence G: Group n: nat
IsConnected (Tr 0%nat) K( G, n.+1)
H: Univalence G: Group n: nat
IsConnected (Tr 0%nat) K( G, n.+1)
rapply (is0connected_isconnected n.-2).Defined.LocalOpen Scope trunc_scope.(** This is a variant of [pequiv_ptr_loop_psusp] from pSusp.v. All we are really using is that [n.+2 <= n +2+ n], but because of the use of [isconnmap_pred_add], the proof is a bit more specific to this case. *)
exact iscohhspace_loops.Defined.(** If [G] and [G'] are isomorphic, then [K(G,n)] and [K(G',n)] are equivalent. TODO: We should show that [K(-,n)] is a functor, which implies this. *)
H: Univalence G, G': Group n: nat e: G $<~> G'
K( G, n) <~>* K( G', n)
H: Univalence G, G': Group n: nat e: G $<~> G'
K( G, n) <~>* K( G', n)
bydestruct (equiv_path_group e).Defined.(** Every pointed (n-1)-connected n-type is an Eilenberg-Mac Lane space. *)
H: Univalence X: pType n: nat H0: IsConnected (Tr n) X IsTrunc0: IsTrunc n.+1 X
K( Pi n.+1 X, n.+1) <~>* X
H: Univalence X: pType n: nat H0: IsConnected (Tr n) X IsTrunc0: IsTrunc n.+1 X
K( Pi n.+1 X, n.+1) <~>* X
H: Univalence X: pType isC: IsConnected (Tr 0%nat) X isT: IsTrunc 0%nat.+1 X