{-# OPTIONS --without-K --rewriting #-} open import HoTT open import homotopy.HSpace module homotopy.EM1HSpace where module EM₁HSpace {i} (G : AbGroup i) where private module G = AbGroup G mult-loop : (g : G.El) (x : EM₁ G.grp) → x == x mult-loop g = EM₁-elim {P = λ x → x == x} (λ _ → =-preserves-level EM₁-level) (emloop g) loop' (λ _ _ → set-↓-has-all-paths-↓ (EM₁-level embase embase)) where abstract loop' : (g' : G.El) → emloop' G.grp g == emloop g [ (λ x → x == x) ↓ emloop g' ] loop' g' = ↓-idf=idf-in' $ emloop g ∙ emloop g' =⟨ ! (emloop-comp' G.grp g g') ⟩ emloop (G.comp g g') =⟨ ap (emloop' G.grp) (G.comm g g') ⟩ emloop (G.comp g' g) =⟨ emloop-comp' G.grp g' g ⟩ emloop g' ∙ emloop g =⟨ ∙=∙' (emloop g') (emloop g) ⟩ emloop g' ∙' emloop g ∎ mult-hom : GroupHom G.grp (Ω^S-group 0 ⊙[ (EM₁ G.grp → EM₁ G.grp) , (λ x → x) ] (Π-level (λ _ → EM₁-level))) mult-hom = record {f = f; pres-comp = pres-comp} where f = λ g → λ= (mult-loop g) pres-comp = λ g₁ g₂ → ap λ= (λ= (EM₁-elim {P = λ x → mult-loop (G.comp g₁ g₂) x == mult-loop g₁ x ∙ mult-loop g₂ x} (λ _ → =-preserves-level (=-preserves-level EM₁-level)) (emloop-comp g₁ g₂) (λ _ → prop-has-all-paths-↓ (EM₁-level _ _ _ _)) (λ _ _ → set-↓-has-all-paths-↓ (=-preserves-level (EM₁-level _ _))))) ∙ ! (∙-λ= _ _) mult : EM₁ G.grp → EM₁ G.grp → EM₁ G.grp mult = EM₁-rec {C = EM₁ G.grp → EM₁ G.grp} (Π-level (λ _ → EM₁-level)) (λ x → x) mult-hom H-⊙EM₁ : HSpaceStructure (⊙EM₁ G.grp) H-⊙EM₁ = record { μ = mult; μ-e-l = μ-e-l; μ-e-r = μ-e-r; μ-coh = μ-coh } where μ-e-l : (x : EM₁ G.grp) → mult embase x == x μ-e-l = EM₁-elim {P = λ x → mult embase x == x} (λ _ → =-preserves-level EM₁-level) idp (λ g → ↓-app=idf-in $ ∙'-unit-l (emloop g) ∙ (! (ap-idf (emloop g))) ∙ ! (∙-unit-r (ap (mult embase) (emloop g)))) (λ _ _ → set-↓-has-all-paths-↓ (EM₁-level _ _)) μ-e-r : (x : EM₁ G.grp) → mult x embase == x μ-e-r = EM₁-elim {P = λ x → mult x embase == x} (λ _ → =-preserves-level EM₁-level) idp (λ g → ↓-app=idf-in $ idp ∙' emloop g =⟨ ∙'-unit-l (emloop g) ⟩ emloop g =⟨ ! (app=-β (mult-loop g) embase) ⟩ app= (λ= (mult-loop g)) embase =⟨ ! (EM₁Rec.emloop-β {C = EM₁ G.grp → EM₁ G.grp} (Π-level (λ _ → EM₁-level)) (λ x → x) mult-hom g) |in-ctx (λ w → app= w embase) ⟩ app= (ap mult (emloop g)) embase =⟨ ∘-ap (λ f → f embase) mult (emloop g) ⟩ ap (λ z → mult z embase) (emloop g) =⟨ ! (∙-unit-r (ap (λ z → mult z embase) (emloop g))) ⟩ ap (λ z → mult z embase) (emloop g) ∙ idp ∎) (λ _ _ → set-↓-has-all-paths-↓ (EM₁-level _ _)) μ-coh : μ-e-l embase == μ-e-r embase μ-coh = idp open HSpaceStructure H-⊙EM₁