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

open import lib.Basics
open import 2Grp
open import Delooping
open import K-hom-ind
open import KFunctor

module KFunctor-idf-aux2 where

open CohGrp {{...}}

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

  module _ (x y : G) where

    K₂-map-idf-coher2 =
      idp ◃∙
      ap2 _∙_ (K₂-map-β-pts idf2G x) (K₂-map-β-pts idf2G y) ◃∙
      idp ◃∙
      ! (ap-idf (loop G x  loop G y)) ◃∙
      ap  p  ap (idf (K₂ G η)) p) (loop-comp G x y) ◃∎
        =ₑ⟨ 0 & 4 &
          (ap2 _∙_
            (K₂-map-β-pts idf2G x  ! (ap-idf (loop G x)))
            (K₂-map-β-pts idf2G y  ! (ap-idf (loop G y))) ◃∙
          ∙-assoc2-!-inv-l (idf (K₂ G η)) idp idp (loop G x) (loop G y) ◃∎)
          % =ₛ-in (lemma (K₂-map-β-pts idf2G x) (K₂-map-β-pts idf2G y)) 
      ap2 _∙_
        (K₂-map-β-pts idf2G x  ! (ap-idf (loop G x)))
        (K₂-map-β-pts idf2G y  ! (ap-idf (loop G y))) ◃∙
      ∙-assoc2-!-inv-l (idf (K₂ G η)) idp idp (loop G x) (loop G y) ◃∙
      ap  p  ap (idf (K₂ G η)) p) (loop-comp G x y) ◃∎ ∎ₛ
        where
          lemma : {p₃ p₄ : base G == base G}
            (p₁ : ap (K₂-map idf2G) (loop G x) == p₃)
            (p₂ : ap (K₂-map idf2G) (loop G y) == p₄) 
            ap2 _∙_ p₁ p₂ 
            ! (ap-idf (p₃  p₄))
              ==
            ap2 _∙_ (p₁  ! (ap-idf p₃)) (p₂  ! (ap-idf p₄)) 
            ∙-assoc2-!-inv-l (idf (K₂ G η)) idp idp p₃ p₄
          lemma idp idp = aux (ap (K₂-map idf2G) (loop G x)) (ap (K₂-map idf2G) (loop G y))
            where
              aux : {b : K₂ G η} (q₁ : base G == b) (q₂ : b == base G) 
                ! (ap-idf (q₁  q₂))
                  ==
                ap2 _∙_ (! (ap-idf q₁)) (! (ap-idf q₂)) 
                ∙-assoc2-!-inv-l (idf (K₂ G η)) idp idp q₁ q₂
              aux idp q₂ = aux2 q₂
                where
                  aux2 : {b : K₂ G η} (q : b == base G) 
                    ! (ap-idf q)
                      ==
                    ap2 _∙_ idp (! (ap-idf q)) 
                    ∙-assoc2-!-inv-l-aux (idf (K₂ G η)) q idp idp idp
                  aux2 idp = idp