{-# OPTIONS --without-K --rewriting #-} open import HoTT module homotopy.EilenbergMacLane1 {i} (G : Group i) where private module G = Group G comp-equiv : ∀ g → G.El ≃ G.El comp-equiv g = equiv (λ x → G.comp x g) (λ x → G.comp x (G.inv g)) (λ x → G.assoc x (G.inv g) g ∙ ap (G.comp x) (G.inv-l g) ∙ G.unit-r x) (λ x → G.assoc x g (G.inv g) ∙ ap (G.comp x) (G.inv-r g) ∙ G.unit-r x) comp-equiv-id : comp-equiv G.ident == ide G.El comp-equiv-id = pair= (λ= G.unit-r) (prop-has-all-paths-↓ {B = is-equiv} is-equiv-is-prop) comp-equiv-comp : (g₁ g₂ : G.El) → comp-equiv (G.comp g₁ g₂) == (comp-equiv g₂ ∘e comp-equiv g₁) comp-equiv-comp g₁ g₂ = pair= (λ= (λ x → ! (G.assoc x g₁ g₂))) (prop-has-all-paths-↓ {B = is-equiv} is-equiv-is-prop) Ω-group : Group (lsucc i) Ω-group = Ω^S-group 0 ⊙[ (0 -Type i) , (G.El , G.El-level) ] (0 -Type-level i) Codes-hom : G →ᴳ Ω-group Codes-hom = group-hom (nType=-out ∘ ua ∘ comp-equiv) pres-comp where abstract pres-comp : ∀ g₁ g₂ → nType=-out {A = G.El , G.El-level} {B = G.El , G.El-level} (ua (comp-equiv (G.comp g₁ g₂))) == nType=-out {A = G.El , G.El-level} {B = G.El , G.El-level} (ua (comp-equiv g₁)) ∙ nType=-out {A = G.El , G.El-level} {B = G.El , G.El-level} (ua (comp-equiv g₂)) pres-comp g₁ g₂ = nType=-out {A = G.El , G.El-level} {B = G.El , G.El-level} (ua (comp-equiv (G.comp g₁ g₂))) =⟨ comp-equiv-comp g₁ g₂ |in-ctx nType=-out ∘ ua ⟩ nType=-out {A = G.El , G.El-level} {B = G.El , G.El-level} (ua (comp-equiv g₂ ∘e comp-equiv g₁)) =⟨ ua-∘e (comp-equiv g₁) (comp-equiv g₂) |in-ctx nType=-out ⟩ nType=-out {A = G.El , G.El-level} {B = G.El , G.El-level} (ua (comp-equiv g₁) ∙ ua (comp-equiv g₂)) =⟨ ! $ nType-∙ {A = G.El , G.El-level} {B = G.El , G.El-level} {C = G.El , G.El-level} (ua (comp-equiv g₁)) (ua (comp-equiv g₂)) ⟩ nType=-out {A = G.El , G.El-level} {B = G.El , G.El-level} (ua (comp-equiv g₁)) ∙ nType=-out {A = G.El , G.El-level} {B = G.El , G.El-level} (ua (comp-equiv g₂)) =∎ Codes : EM₁ G → 0 -Type i Codes = EM₁-rec {G = G} {C = 0 -Type i} (0 -Type-level i) (G.El , G.El-level) Codes-hom abstract ↓-Codes-loop : ∀ g g' → g' == G.comp g' g [ fst ∘ Codes ↓ emloop g ] ↓-Codes-loop g g' = ↓-ap-out fst Codes (emloop g) $ ↓-ap-out (idf _) fst (ap Codes (emloop g)) $ transport (λ w → g' == G.comp g' g [ idf _ ↓ ap fst w ]) (! (EM₁Rec.emloop-β (0 -Type-level i) (G.El , G.El-level) Codes-hom g)) $ transport (λ w → g' == G.comp g' g [ idf _ ↓ w ]) (! (fst=-β (ua $ comp-equiv g) _)) $ ↓-idf-ua-in (comp-equiv g) idp encode : {x : EM₁ G} → embase == x → fst (Codes x) encode α = transport (fst ∘ Codes) α G.ident encode-emloop : ∀ g → encode (emloop g) == g encode-emloop g = to-transp $ transport (λ x → G.ident == x [ fst ∘ Codes ↓ emloop g ]) (G.unit-l g) (↓-Codes-loop g G.ident) decode : {x : EM₁ G} → fst (Codes x) → embase == x decode {x} = EM₁-elim {P = λ x' → fst (Codes x') → embase == x'} (λ _ → Π-level (λ _ → =-preserves-level EM₁-level)) emloop loop' (λ _ _ → prop-has-all-paths-↓ (↓-level (Π-level (λ _ → EM₁-level _ _)))) x where loop' : (g : G.El) → emloop == emloop [ (λ x' → fst (Codes x') → embase == x') ↓ emloop g ] loop' g = ↓-→-from-transp $ λ= $ λ y → transport (λ z → embase == z) (emloop g) (emloop y) =⟨ transp-cst=idf (emloop g) (emloop y) ⟩ emloop y ∙ emloop g =⟨ ! (emloop-comp y g) ⟩ emloop (G.comp y g) =⟨ ap emloop (! (to-transp (↓-Codes-loop g y))) ⟩ emloop (transport (λ z → fst (Codes z)) (emloop g) y) =∎ decode-encode : ∀ {x} (α : embase' G == x) → decode (encode α) == α decode-encode idp = emloop-ident {G = G} emloop-equiv : G.El ≃ (embase' G == embase) emloop-equiv = equiv emloop encode decode-encode encode-emloop Ω¹-EM₁ : Ω^S-group 0 (⊙EM₁ G) EM₁-level ≃ᴳ G Ω¹-EM₁ = ≃-to-≃ᴳ (emloop-equiv ⁻¹) (λ l₁ l₂ → <– (ap-equiv emloop-equiv _ _) $ emloop (encode (l₁ ∙ l₂)) =⟨ decode-encode (l₁ ∙ l₂) ⟩ l₁ ∙ l₂ =⟨ ! $ ap2 _∙_ (decode-encode l₁) (decode-encode l₂) ⟩ emloop (encode l₁) ∙ emloop (encode l₂) =⟨ ! $ emloop-comp (encode l₁) (encode l₂) ⟩ emloop (G.comp (encode l₁) (encode l₂)) =∎) π₁-EM₁ : πS 0 (⊙EM₁ G) ≃ᴳ G π₁-EM₁ = Ω¹-EM₁ ∘eᴳ unTrunc-iso (Ω^S-group-structure 0 (⊙EM₁ G)) (EM₁-level _ _)