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

open import lib.Basics
open import 2Semigroup
open import 2SGrpMap
open import 2Grp
open import Delooping
open import K-hom-ind
open import KFunctor
open import KFunctor-idf
open import KFunctor-comp
open import apK

module KFunctor-comp-lunit-aux0 where

module KFCLU0 {i j} {G₁ : Type i} {G₂ : Type j} {{η₁ : CohGrp G₁}} {{η₂ : CohGrp G₂}}
  {f : G₁  G₂} (σ : WkSGrpHomStr f) (x : G₁) where

  private
    ν₁ =
      λ v 
        K₂-map-β-pts σ v 
        (! (K₂-map-β-pts (cohsgrphom  z  z) {{idf2G}} ∘2Mσ cohsgrphom f {{σ}}) v) :> (loop G₂ (f v) == ap (K₂-map (cohsgrphom  z  z) {{idf2G}} ∘2Mσ cohsgrphom f {{σ}})) (loop G₁ v)))
    ν₂-suff =
      λ v 
        ! (K₂-map-β-pts idf2G (f v)) 
        (! (ap (ap (K₂-map idf2G)) (K₂-map-β-pts σ v)) :> (ap (K₂-map idf2G) (loop G₂ (f v)) == ap (K₂-map idf2G) (ap (K₂-map σ) (loop G₁ v)))) 
        ∘-ap (K₂-map idf2G) (K₂-map σ) (loop G₁ v)
    ν₂ =
      λ v 
        K₂-map-β-pts (cohsgrphom  z  z) {{idf2G}} ∘2Mσ cohsgrphom f {{σ}}) v 
        (ν₂-suff v :> (loop G₂ (f v) == ap (K₂-map idf2G  K₂-map σ) (loop G₁ v)))
    ν₃ = λ v  K₂-map-β-pts idf2G v  ! (ap-idf (loop G₂ v))

  abstract

    K₂-β-1 :
      hmtpy-nat-∙' (fst (apK₂ (unit-wksgrphom-l (sgrphom-forg (cohsgrphom f {{σ}}))))) (loop G₁ x) ◃∎
        =ₛ
      K₂-map-β-pts σ x ◃∙
      ! (K₂-map-β-pts (cohsgrphom  z  z) {{idf2G}} ∘2Mσ cohsgrphom f {{σ}}) x) ◃∎
    K₂-β-1 = =ₛ-in $
      K₂-∼-ind-β (K₂-map σ) (K₂-map (cohsgrphom  z  z) {{idf2G}} ∘2Mσ cohsgrphom f {{σ}}))
        (idp :> (base G₂ == base G₂))
        ν₁
        _ x

    K₂-β-2 :
      hmtpy-nat-∙' (fst (K₂-map-∘ σ idf2G)) (loop G₁ x) ◃∎
        =ₛ
      K₂-map-β-pts (cohsgrphom  z  z) {{idf2G}} ∘2Mσ cohsgrphom f {{σ}}) x ◃∙
      ! (K₂-map-β-pts idf2G (f x)) ◃∙
      ! (ap (ap (K₂-map idf2G)) (K₂-map-β-pts σ x)) ◃∙
      ∘-ap (K₂-map idf2G) (K₂-map σ) (loop G₁ x) ◃∎
    K₂-β-2 = =ₛ-in $
      K₂-∼-ind-β
        (map₁-∘ σ idf2G)
        (map₂-∘ σ idf2G)
        (idp :> (base G₂ == base G₂))
        ν₂
        _ x

    K₂-β-3 :
      hmtpy-nat-∙' (fst (K₂-map-idf {{η₂}})) (ap (K₂-map σ) (loop G₁ x)) ◃∎
        =ₛ
      ap (ap (K₂-map idf2G)) (K₂-map-β-pts σ x) ◃∙
      K₂-map-β-pts idf2G (f x) ◃∙
      ! (ap-idf (loop G₂ (f x))) ◃∙
      ! (ap (ap (idf (K₂ G₂ η₂))) (K₂-map-β-pts σ x)) ◃∎
    K₂-β-3 =
      hmtpy-nat-∙' (fst (K₂-map-idf {{η₂}})) (ap (K₂-map σ) (loop G₁ x)) ◃∎
        =ₛ⟨ apCommSq2◃-rev  (p : base G₂ == base G₂)  hmtpy-nat-∙' (fst (K₂-map-idf {{η₂}})) p) (K₂-map-β-pts σ x) 
      ap (ap (K₂-map idf2G)) (K₂-map-β-pts σ x) ◃∙
      hmtpy-nat-∙' (fst (K₂-map-idf {{η₂}})) (loop G₂ (f x)) ◃∙
      ! (ap (ap (idf (K₂ G₂ η₂))) (K₂-map-β-pts σ x)) ◃∎
        =ₑ⟨ 1 & 1 & (K₂-map-β-pts idf2G (f x) ◃∙ ! (ap-idf (loop G₂ (f x))) ◃∎)
          % =ₛ-in (K₂-∼-ind-β (K₂-map idf2G) (idf (K₂ G₂ η₂)) idp ν₃ _ (f x)) 
      ap (ap (K₂-map idf2G)) (K₂-map-β-pts σ x) ◃∙
      K₂-map-β-pts idf2G (f x) ◃∙
      ! (ap-idf (loop G₂ (f x))) ◃∙
      ! (ap (ap (idf (K₂ G₂ η₂))) (K₂-map-β-pts σ x)) ◃∎ ∎ₛ