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

open import lib.Basics
open import lib.NType2
open import lib.types.LoopSpace
open import 2Semigroup
open import 2Grp
open import Hmtpy2Grp
open import Codes
open import Decode10
open import Decode13

module Decode14 where

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

  open CohGrp {{...}}

  open import Delooping G

  open WkSGrpNatIso

  module LCD5 (x y z : G) where

    Δ =
      transport
         v  loop (transport codes-fst (loop y) v) == loop v  loop y)
        (! (transp-coe {B = codes-fst} (loop x) z 
            ap  q  coe q z) (ap-∘ fst codes (loop x)) 
            ap  q  coe q z) (θ codes-β x) 
            coe-β ((λ v  mu v x) , mu-post-iso x) z))
        (ap loop
          (transp-coe {B = codes-fst} (loop y) (mu z x) 
          ap  q  coe q (mu z x)) (ap-∘ fst codes (loop y)) 
          ap  q  coe q (mu z x)) (θ codes-β y) 
          coe-β ((λ v  mu v y) , mu-post-iso y) (mu z x)) 
        ! (loop-comp (mu z x) y))

    abstract
      loop-comp-decode5 :
        ! (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))) ◃∎
          =ₛ
        Δ ◃∙
        ! (transp-cst=idf (loop y) (loop (transport codes-fst (loop x) z))) ◃∙
        ap (transport  b  base == b) (loop y))
          (ap loop (transp-coe {B = codes-fst} (loop x) z 
                    ap  q  coe q z) (ap-∘ fst codes (loop x)) 
                    ap  q  coe q z) (θ codes-β x) 
                    coe-β ((λ v  mu v x) , mu-post-iso x) z)) ◃∙
        ap (transport  b  base == b) (loop y)) (! (loop-comp z x)) ◃∙
        ap (transport  b  base == b) (loop y)) (! (transp-cst=idf (loop x) (loop z))) ◃∙
        ! (transp-∙ (loop x) (loop y) (loop z)) ◃∙
        ap  p  transport  b  base == b) p (loop z)) (loop-comp x y) ◃∎
      loop-comp-decode5 =
        long-aux z (loop x) (loop y) (loop z)
          ((λ v  mu v x) , mu-post-iso x) ((λ v  mu v y) , mu-post-iso y)
          (θ codes-β x) (θ codes-β y)
          (coe-β ((λ v  mu v x) , mu-post-iso x) z) (coe-β ((λ v  mu v y) , mu-post-iso y) (mu z x))
          (loop-comp x y) (loop-comp (mu z x) y) (loop-comp z x)

  module _ (x y z : G) where
  
    open LCD5 x y z

    abstract
      loop-comp-decode05 :
        ! (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)) ◃∎
          =ₛ
        Δ ◃∙
        ! (transp-cst=idf (loop y) (loop (transport codes-fst (loop x) z))) ◃∙
        ap (transport  b  base == b) (loop y))
          (ap loop (transp-coe {B = codes-fst} (loop x) z 
                    ap  q  coe q z) (ap-∘ fst codes (loop x)) 
                    ap  q  coe q z) (θ codes-β x) 
                    coe-β ((λ v  mu v x) , mu-post-iso x) z)) ◃∙
        ap (transport  b  base == b) (loop y)) (! (loop-comp z x)) ◃∙
        ap (transport  b  base == b) (loop y)) (! (transp-cst=idf (loop x) (loop z))) ◃∙
        ! (transp-∙ (loop x) (loop y) (loop z)) ◃∙
        ap  p  transport  b  base == b) p (loop z)) (loop-comp x y) ◃∎
      loop-comp-decode05 = loop-comp-decode04 x y z ∙ₛ loop-comp-decode5