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

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

module Decode1 where

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

  open CohGrp {{...}}
  open WkSGrpNatIso

  abstract
    code-β-mu-opt-g : (x y : G) {e : G == G} (p : e == _) 
      p ◃∙
      ap2 _∙_ (θ codes-β x) (θ codes-β y) ◃∙
      (! (ua-∘e ((λ z  mu z x) , mu-post-iso x) ((λ z  mu z y) , mu-post-iso y)) 
      ap ua (pair= (λ=  v  ! (al v x y))) {b' = mu-post-iso (mu x y)} prop-has-all-paths-↓)) ◃∎
        =ₛ
      p ◃∙
      ap2 _∙_ (θ codes-β x) (θ codes-β y) ◃∙
      ! (ua-∘e ((λ z  mu z x) , mu-post-iso x) ((λ z  mu z y) , mu-post-iso y)) ◃∙
      ap ua (pair= (λ=  v  ! (al v x y))) prop-has-all-paths-↓) ◃∎
    code-β-mu-opt-g x y p =
      p ◃∙
      ap2 _∙_ (θ codes-β x) (θ codes-β y) ◃∙
      (! (ua-∘e ((λ z  mu z x) , mu-post-iso x) ((λ z  mu z y) , mu-post-iso y)) 
      ap ua (pair= (λ=  v  ! (al v x y))) {b' = mu-post-iso (mu x y)} prop-has-all-paths-↓)) ◃∎
        =ₛ⟨ 2 & 1 & =ₛ-in idp 
      p ◃∙
      ap2 _∙_ (θ codes-β x) (θ codes-β y) ◃∙
      ! (ua-∘e ((λ z  mu z x) , mu-post-iso x) ((λ z  mu z y) , mu-post-iso y)) ◃∙
      ap ua (pair= (λ=  v  ! (al v x y))) prop-has-all-paths-↓) ◃∎ ∎ₛ