{-# OPTIONS --without-K --rewriting --lossy-unification --overlapping-instances --instance-search-depth=4 #-}

open import lib.Basics
open import lib.NType2
open import lib.Equivalence2 hiding (linv; rinv)
open import lib.types.LoopSpace
open import 2Semigroup
open import 2Grp
open import Hmtpy2Grp
open import Codes
open import Decode8
open import Decode9

module Decode10 where

module _ {i} {G : Type i} {{η : CohGrp G}} where

  open CohGrp {{...}}

  open import Delooping G

  open WkSGrpNatIso

  module _ (x y z : G) where

    abstract
      loop-comp-decode04 :
        ! (ap loop (transp-∙ (loop x) (loop y) z)) ◃∙
        ap loop (ap  p  transport codes-fst p z) (loop-comp x y)) ◃∙
        ap loop ( (transp-codes (mu x y) z)) ◃∙
        ! (loop-comp z (mu x y)) ◃∙
        ! (transp-cst=idf (loop (mu x y)) (loop z)) ◃∎
          =ₛ
        ! (ap loop (transp-∙ (loop x) (loop y) z)) ◃∙
        ap loop (ap  p  transport codes-fst p z) (loop-comp x y)) ◃∙
        transport  v  loop (transport codes-fst v z) == loop (coe (ap fst (ap codes v)) z))
          (loop-comp x y)
          (ap loop (transp-coe (loop x  loop y) z) 
          ap loop (ap  q  coe q z) (ap-∘ fst codes (loop x  loop y)))) ◃∙
        ap loop (ap  q  coe q z)
          (! ((∙-ap fst (ap codes (loop x)) (ap codes (loop y)) 
            ap (ap fst) (∙-Ω-fmap (codes , idp) (loop x) (loop y))) 
            ap (ap fst  ap codes) (loop-comp x y)))) ◃∙
        ap loop (ap  q  coe q z) (ap2 _∙_ (θ codes-β x) (θ codes-β y))) ◃∙
        ap loop (coe-∙ (ua ((λ v  mu v x) , mu-post-iso x)) (ua ((λ v  mu v y) , mu-post-iso y)) z) ◃∙
        ap loop (ap (coe (ua ((λ v  mu v y) , mu-post-iso y)))
          (coe-β ((λ v  mu v x) , mu-post-iso x) z)) ◃∙
        ap loop (coe-β ((λ v  mu v y) , mu-post-iso y) (mu z x)) ◃∙
        ! (loop-comp (mu z x) y) ◃∙
        ! (ap  p  p  loop y) (loop-comp z x)) ◃∙
        ∙-assoc (loop z) (loop x) (loop y) ◃∙
        ap  p  loop z  p) (loop-comp x y) ◃∙
        ! (transport
             v  transport (_==_ base) v (loop z) == loop z  v)
            (loop-comp x y)
            (transp-cst=idf (loop x  loop y) (loop z))) ◃∎
      loop-comp-decode04 = loop-comp-decode03 x y z ∙ₛ loop-comp-decode4 x y z