{-# 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

module Decode9 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-decode4-pre : 
        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 (ap  q  coe q z)
          (! (ua-∘e ((λ z  mu z x) , mu-post-iso x) ((λ z  mu z y) , mu-post-iso y)))) ◃∙
        ap loop (app= (ap coe (ua-∘e ((λ v  mu v x) , mu-post-iso x)
          ((λ v  mu v y) , mu-post-iso y))) z) ◃∙
        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))) ◃∎
          =ₛ
        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-decode4-pre =
        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 (ap  q  coe q z)
          (! (ua-∘e ((λ v  mu v x) , mu-post-iso x) ((λ v  mu v y) , mu-post-iso y)))) ◃∙
        ap loop (app= (ap coe (ua-∘e ((λ v  mu v x) , mu-post-iso x)
          ((λ v  mu v y) , mu-post-iso y))) z) ◃∙
        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))) ◃∎
          =ₛ₁⟨ 2 & 1 &
            ap (ap loop) (
              ap-!  q  coe q z) (ua-∘e ((λ v  mu v x) , mu-post-iso x) ((λ v  mu v y) , mu-post-iso 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 (! (ap  q  coe q z)
          (ua-∘e ((λ v  mu v x) , mu-post-iso x) ((λ v  mu v y) , mu-post-iso y)))) ◃∙
        ap loop (app= (ap coe (ua-∘e ((λ v  mu v x) , mu-post-iso x)
          ((λ v  mu v y) , mu-post-iso y))) z) ◃∙
        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))) ◃∎
          =ₛ₁⟨ 3 & 1 &
            ap (ap loop) (
              ∘-ap  u  u z) coe (ua-∘e ((λ v  mu v x) , mu-post-iso x) ((λ v  mu v y) , mu-post-iso 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 (! (ap  q  coe q z)
          (ua-∘e ((λ v  mu v x) , mu-post-iso x) ((λ v  mu v y) , mu-post-iso y)))) ◃∙
        ap loop (ap  q  coe q z)
          (ua-∘e ((λ v  mu v x) , mu-post-iso x) ((λ v  mu v y) , mu-post-iso 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))) ◃∎
          =ₛ₁⟨ 2 & 2 & 
            ap-!-inv-l loop (ap  q  coe q z)
              (ua-∘e ((λ v  mu v x) , mu-post-iso x) ((λ v  mu v y) , mu-post-iso 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))) ◃∙
        idp ◃∙
        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))) ◃∎
          =ₛ₁⟨ 2 & 2 & idp 
        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))) ◃∎ ∎ₛ

    abstract 
      loop-comp-decode4 :
        ! (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 (ap  q  coe q z)
          (! (ua-∘e ((λ z  mu z x) , mu-post-iso x) ((λ z  mu z y) , mu-post-iso y)))) ◃∙
        ap loop (app= (ap coe (ua-∘e ((λ v  mu v x) , mu-post-iso x)
          ((λ v  mu v y) , mu-post-iso y))) z) ◃∙
        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))) ◃∎
          =ₛ
        ! (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-decode4 = 
        ∙∙-suff=ₛ
          (! (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)))) ◃∎)
          loop-comp-decode4-pre