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

open import lib.Basics
open import lib.FTID
open import lib.types.Pointed
open import lib.types.LoopSpace
open import 2GrpMap
open import Hmtpy2Grp
open import 2Semigroup
open import 2Grp

module LoopFunctor-ap where

open WkSGrpNatIso

module _ {ℓ₁ ℓ₂} {X₁ : Ptd ℓ₁} {X₂ : Ptd ℓ₂} {{η₁ : has-level 2 (de⊙ X₁)}} {{η₂ : has-level 2 (de⊙ X₂)}} where

  Loop2Grp-map-ap : {f* g* : X₁ ⊙→ X₂}  f* ⊙-crd∼ g*  CohGrpNatIso (Loop2Grp-map f*) (Loop2Grp-map g*)
  Loop2Grp-map-ap {f*} = 
    ⊙hom-ind f*
       g* _  CohGrpNatIso (Loop2Grp-map f*) (Loop2Grp-map g*))
      (natiso-id2G (Loop2Grp-map f*))
      
  Loop2Grp-map-ap-β : (f* : X₁ ⊙→ X₂)  Loop2Grp-map-ap (⊙∼-id f*) == natiso-id2G (Loop2Grp-map f*)
  Loop2Grp-map-ap-β f* =
    ⊙hom-ind-β f*  g* _  CohGrpNatIso (Loop2Grp-map f*) (Loop2Grp-map g*)) (natiso-id2G (Loop2Grp-map f*))

  Loop2Grp-map-ap-fst : {f* g* : X₁ ⊙→ X₂} (H : f* ⊙-crd∼ g*)  θ (Loop2Grp-map-ap H)  Ω-fmap-ap H
  Loop2Grp-map-ap-fst {f*} =
    ⊙hom-ind f*
       _ H  θ (Loop2Grp-map-ap H)  Ω-fmap-ap H)
       x  app= (ap θ (Loop2Grp-map-ap-β f*)) x  ! (Ω-fmap-ap-β f* x))

  Ω-fmap-ap-pres : {f* g* : X₁ ⊙→ X₂} (H : f* ⊙-crd∼ g*)
     ap Loop2Grp-map (⊙-crd∼-to-== H) == natiso2G-to-== (Loop2Grp-map-ap H)
  Ω-fmap-ap-pres {f*} =
    ⊙hom-ind f*
       g* H  ap Loop2Grp-map (⊙-crd∼-to-== H) == natiso2G-to-== (Loop2Grp-map-ap H))
      (ap (ap Loop2Grp-map) (⊙-crd∼-to-==-β f*) 
      ! (ap natiso2G-to-== (Loop2Grp-map-ap-β f*)  natiso2G-to-==-β (Loop2Grp-map f*)))