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

open import lib.Basics
open import 2Grp
open import Codes

module Decode-aux4a-defs where

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

  open import Delooping G

  module Decode-defs4a (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

    σ₁ =
      ! (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₂)) ◃∙
      ! (ap loop (transp-∙ p₁ p₂ z)) ◃∙
      (ap loop (transp-coe (p₁  p₂) z) 
      ap loop (ap  q  coe q z) (ap-∘ fst codes (p₁  p₂)))) ◃∙
      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₂ ◃∙
      idp ◃∎

    σ₂ =
      ap  v  loop v  p₂)
        (transp-coe p₁ z  ap  q  coe q z) (ap-∘ fst codes p₁)  idp) ◃∙
      q₂ ◃∙
      ! (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)) ◃∙
      ! (ap  v  loop (transport codes-fst p₂ v))
          (transp-coe p₁ z  ap  q  coe q z) (ap-∘ fst codes p₁)  idp)) ◃∙
      ! (ap loop (transp-∙ p₁ p₂ z)) ◃∙
      (ap loop (transp-coe (p₁  p₂) z) 
      ap loop (ap  q  coe q z) (ap-∘ fst codes (p₁  p₂)))) ◃∙
      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₂ ◃∙
      idp ◃∎