{-# OPTIONS --without-K --rewriting --lossy-unification #-}

open import lib.Basics
open import 2Grp
open import Codes
open import Decode-aux4a-defs
open import Decode-aux4b-defs
open import Decode-aux4a
open import Decode-aux4e

module Decode11 where

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

  open import Delooping G

  module _ (z : G) (p₁ p₂ : base == base)
    (q₂ : loop (coe (ap fst (ap codes p₁)) z)  p₂ == loop (coe (ap fst (ap codes p₂)) (coe (ap fst (ap codes p₁)) z)))
    where

    open Decode-defs4a z p₁ p₂ q₂
    open Decode-defs4b z p₁ p₂ q₂

    abstract
      long-aux7 : σ₁ =ₛ τ₂
      long-aux7 = long-aux7a z p₁ p₂ q₂ ∙ₛ long-aux7b z p₁ p₂ q₂

    module ends {t : base == base} (q₃ : t == loop (coe (ap fst (ap codes p₁)) z)) where

      private
        η₁ = ap loop (ap  q  coe q z) (ap-∘ fst codes (p₁  p₂)))
        η₂ = ! (ap  p  p  p₂) q₃)
        
      ε₁ =
        ! (ap loop (transp-∙ p₁ p₂ z)) ◃∙
        (ap loop (transp-coe (p₁  p₂) z)  η₁) ◃∙
        ap loop (ap  q  coe q z)
          (! ((∙-ap fst (ap codes p₁) (ap codes p₂) 
            ap (ap fst) (∙-ap codes p₁ p₂))  idp))) ◃∙
        ap loop (coe-∙ (ap fst (ap codes p₁)) (ap fst (ap codes p₂)) z) ◃∙
        ! q₂ ◃∙
        η₂ ◃∎

      private
        η₃ =
          transport  v  loop (transport codes-fst p₂ v) == loop v  p₂)
            (! (transp-coe p₁ z  ap  q  coe q z) (ap-∘ fst codes p₁)  idp))
            (ap loop (transp-coe p₂ (coe (ap fst (ap codes p₁)) z) 
              ap  q  coe q (coe (ap fst (ap codes p₁)) z))
                (ap-∘ fst codes p₂)  idp) 
             ! q₂)
             
      ε₂ =
        η₃ ◃∙
        ! (transp-cst=idf p₂ (loop (transport codes-fst p₁ z))) ◃∙
        ap (transport (_==_ base) p₂)
          (ap loop (transp-coe p₁ z  ap  q  coe q z) (ap-∘ fst codes p₁)  idp)) ◃∙
        ap (transport (_==_ base) p₂) (! q₃) ◃∙
        transp-cst=idf p₂ t ◃∎

    open ends

    long-aux6 : {t : base == base} (q₃ : t == loop (coe (ap fst (ap codes p₁)) z))    
       ε₁ q₃ =ₛ ε₂ q₃
    long-aux6 idp = pre-rotate'-out long-aux7