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

open import lib.Basics
open import lib.types.Pointed
open import lib.types.PtdMap-conv
open import 2SGrpMap
open import 2Grp
open import 2GrpMap
open import KFunctor
open import KFunctor-comp
open import apK
open import KFunctor-comp-assoc

module KFunctor-conv-assoc where

module _ {ℓ₁ ℓ₂ ℓ₃ ℓ₄} {G₁ : Type ℓ₁} {G₂ : Type ℓ₂} {G₃ : Type ℓ₃} {G₄ : Type ℓ₄}
  {{η₁ : CohGrp G₁}} {{η₂ : CohGrp G₂}} {{η₃ : CohGrp G₃}} {{η₄ : CohGrp G₄}}
  (φ₃@(cohgrphom f₃ {{σ₃}}) : CohGrpHom {{η₃}} {{η₄}})
  (φ₂@(cohgrphom f₂ {{σ₂}}) : CohGrpHom {{η₂}} {{η₃}})
  (φ₁@(cohgrphom f₁ {{σ₁}}) : CohGrpHom {{η₁}} {{η₂}}) where

  abstract
    K₂-α :
      ! (ap  m  K₂-action-hom φ₃ ⊙∘ m) (⊙-crd∼-to-== (K₂-map-∘ σ₁ σ₂))) 
      ! (⊙-crd∼-to-== (K₂-map-∘ (φ₂ ∘2Gσ φ₁) σ₃)) 
      ap K₂-action-hom (natiso2G-to-== (assoc-wksgrphom (grphom-forg φ₃) (grphom-forg φ₂) (grphom-forg φ₁))) 
      ⊙-crd∼-to-== (K₂-map-∘ σ₁ (φ₃ ∘2Gσ φ₂)) 
      ap  m  m ⊙∘ K₂-action-hom φ₁) (⊙-crd∼-to-== (K₂-map-∘ σ₂ σ₃))
        ==
      ⊙-crd∼-to-== (⊙∘-α-crd (K₂-action-hom φ₃) (K₂-action-hom φ₂) (K₂-action-hom φ₁))
    K₂-α =  =ₛ-out $
      ! (ap  m  K₂-action-hom φ₃ ⊙∘ m) (⊙-crd∼-to-== (K₂-map-∘ σ₁ σ₂))) ◃∙
      ! (⊙-crd∼-to-== (K₂-map-∘ (φ₂ ∘2Gσ φ₁) σ₃)) ◃∙
      ap K₂-action-hom (natiso2G-to-== (assoc-wksgrphom (grphom-forg φ₃) (grphom-forg φ₂) (grphom-forg φ₁))) ◃∙
      ⊙-crd∼-to-== (K₂-map-∘ σ₁ (φ₃ ∘2Gσ φ₂)) ◃∙
      ap  m  m ⊙∘ K₂-action-hom φ₁) (⊙-crd∼-to-== (K₂-map-∘ σ₂ σ₃)) ◃∎
        =ₛ₁⟨ 0 & 1 & ap ! (! (whisk⊙-conv-l {f₁ = K₂-action-hom φ₃} (K₂-map-∘ σ₁ σ₂))) 
      ! (⊙-crd∼-to-== (⊙∘-post (K₂-action-hom φ₃) (K₂-map-∘ σ₁ σ₂))) ◃∙
      ! (⊙-crd∼-to-== (K₂-map-∘ (φ₂ ∘2Gσ φ₁) σ₃)) ◃∙
      ap K₂-action-hom (natiso2G-to-== (assoc-wksgrphom (grphom-forg φ₃) (grphom-forg φ₂) (grphom-forg φ₁))) ◃∙
      ⊙-crd∼-to-== (K₂-map-∘ σ₁ (φ₃ ∘2Gσ φ₂)) ◃∙
      ap  m  m ⊙∘ K₂-action-hom φ₁) (⊙-crd∼-to-== (K₂-map-∘ σ₂ σ₃)) ◃∎
        =ₛ₁⟨ 0 & 1 & ! (!⊙-conv (⊙∘-post (K₂-action-hom φ₃) (K₂-map-∘ σ₁ σ₂))) 
      ⊙-crd∼-to-== (!-⊙∼ (⊙∘-post (K₂-action-hom φ₃) (K₂-map-∘ σ₁ σ₂))) ◃∙
      ! (⊙-crd∼-to-== (K₂-map-∘ (φ₂ ∘2Gσ φ₁) σ₃)) ◃∙
      ap K₂-action-hom (natiso2G-to-== (assoc-wksgrphom (grphom-forg φ₃) (grphom-forg φ₂) (grphom-forg φ₁))) ◃∙
      ⊙-crd∼-to-== (K₂-map-∘ σ₁ (φ₃ ∘2Gσ φ₂)) ◃∙
      ap  m  m ⊙∘ K₂-action-hom φ₁) (⊙-crd∼-to-== (K₂-map-∘ σ₂ σ₃)) ◃∎
        =ₛ₁⟨ 1 & 1 & ! (!⊙-conv (K₂-map-∘ (φ₂ ∘2Gσ φ₁) σ₃)) 
      ⊙-crd∼-to-== (!-⊙∼ (⊙∘-post (K₂-action-hom φ₃) (K₂-map-∘ σ₁ σ₂))) ◃∙
      ⊙-crd∼-to-== (!-⊙∼ (K₂-map-∘ (φ₂ ∘2Gσ φ₁) σ₃)) ◃∙
      ap K₂-action-hom (natiso2G-to-== (assoc-wksgrphom (grphom-forg φ₃) (grphom-forg φ₂) (grphom-forg φ₁))) ◃∙
      ⊙-crd∼-to-== (K₂-map-∘ σ₁ (φ₃ ∘2Gσ φ₂)) ◃∙
      ap  m  m ⊙∘ K₂-action-hom φ₁) (⊙-crd∼-to-== (K₂-map-∘ σ₂ σ₃)) ◃∎
        =ₛ₁⟨ 2 & 1 & apK₂-pres (assoc-wksgrphom (grphom-forg φ₃) (grphom-forg φ₂) (grphom-forg φ₁)) 
      ⊙-crd∼-to-== (!-⊙∼ (⊙∘-post (K₂-action-hom φ₃) (K₂-map-∘ σ₁ σ₂))) ◃∙
      ⊙-crd∼-to-== (!-⊙∼ (K₂-map-∘ (φ₂ ∘2Gσ φ₁) σ₃)) ◃∙
      ⊙-crd∼-to-== (apK₂ (assoc-wksgrphom (grphom-forg φ₃) (grphom-forg φ₂) (grphom-forg φ₁))) ◃∙
      ⊙-crd∼-to-== (K₂-map-∘ σ₁ (φ₃ ∘2Gσ φ₂)) ◃∙
      ap  m  m ⊙∘ K₂-action-hom φ₁) (⊙-crd∼-to-== (K₂-map-∘ σ₂ σ₃)) ◃∎
        =ₛ₁⟨ 4 & 1 & ! (whisk⊙-conv-r {f₁ = K₂-action-hom φ₁} (K₂-map-∘ σ₂ σ₃)) 
      ⊙-crd∼-to-== (!-⊙∼ (⊙∘-post (K₂-action-hom φ₃) (K₂-map-∘ σ₁ σ₂))) ◃∙
      ⊙-crd∼-to-== (!-⊙∼ (K₂-map-∘ (φ₂ ∘2Gσ φ₁) σ₃)) ◃∙
      ⊙-crd∼-to-== (apK₂ (assoc-wksgrphom (grphom-forg φ₃) (grphom-forg φ₂) (grphom-forg φ₁))) ◃∙
      ⊙-crd∼-to-== (K₂-map-∘ σ₁ (φ₃ ∘2Gσ φ₂)) ◃∙
      ⊙-crd∼-to-== (⊙∘-pre (K₂-action-hom φ₁) (K₂-map-∘ σ₂ σ₃)) ◃∎
        =ₛ⟨ ⊙∘-conv-quint
              (!-⊙∼ (⊙∘-post (K₂-action-hom φ₃) (K₂-map-∘ σ₁ σ₂)))
              (!-⊙∼ (K₂-map-∘ (φ₂ ∘2Gσ φ₁) σ₃))
              (apK₂ (assoc-wksgrphom (grphom-forg φ₃) (grphom-forg φ₂) (grphom-forg φ₁)))
              (K₂-map-∘ σ₁ (φ₃ ∘2Gσ φ₂))
              (⊙∘-pre (K₂-action-hom φ₁) (K₂-map-∘ σ₂ σ₃)) 
      ⊙-crd∼-to-==
        (!-⊙∼ (⊙∘-post (K₂-action-hom φ₃) (K₂-map-∘ σ₁ σ₂)) ∙⊙∼
        !-⊙∼ (K₂-map-∘ (φ₂ ∘2Gσ φ₁) σ₃) ∙⊙∼
        apK₂ (assoc-wksgrphom (grphom-forg φ₃) (grphom-forg φ₂) (grphom-forg φ₁)) ∙⊙∼
        K₂-map-∘ σ₁ (φ₃ ∘2Gσ φ₂) ∙⊙∼
        ⊙∘-pre (K₂-action-hom φ₁) (K₂-map-∘ σ₂ σ₃)) ◃∎
        =ₛ₁⟨ ap ⊙-crd∼-to-== (⊙→∼-to-== (KFunc-assoc σ₁ σ₂ σ₃)) 
      ⊙-crd∼-to-== (⊙∘-α-crd (K₂-action-hom φ₃) (K₂-action-hom φ₂) (K₂-action-hom φ₁)) ◃∎ ∎ₛ