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

open import lib.Basics
open import 2Grp
open import 2GrpProps2
open import 2GrpPropsMap

module 2GrpHom6 where

open CohGrp {{...}}

module MapUnit3 {i j} {G₁ : Type i} {G₂ : Type j} {{η₁ : CohGrp G₁}} {{η₂ : CohGrp G₂}}
  (map : G₁  G₂)
  (map-comp : (x y : G₁)  mu (map x) (map y) == map (mu x y))
  (map-al : (x y z : G₁) 
    ! (al (map x) (map y) (map z)) ◃∙
    ap (mu (map x)) (map-comp y z) ◃∙
    map-comp x (mu y z) ◃∎
      =ₛ
    ap  v  mu v (map z)) (map-comp x y) ◃∙
    map-comp (mu x y) z ◃∙
    ! (ap map (al x y z)) ◃∎)
  (map-inv : (x : G₁)  inv (map x) == map (inv x))
  (map-id : id == map id)
  (x : G₁) where

  lam-to-rho0 =
    ! (al (inv (map x)) (map x) id 
      ap2 mu (linv (map x)) idp 
      lam id) ◃∙
    ap (mu (inv (map x)))
      (rho (map x) 
      ! (ap map (rho x)) 
      ! (map-comp x id)) ◃∙
    al (inv (map x)) (map x) (map id) ◃∙
    ap2 mu (linv (map x)) idp ◃∙
    lam (map id) ◃∎
      =ₛ⟨ 1 & 1 & ap-∙◃ (mu (inv (map x))) (rho (map x)) _ 
    _
      =ₛ⟨ 0 & 1 & !-∙-seq (al (inv (map x)) (map x) id ◃∙ ap2 mu (linv (map x)) idp ◃∙ lam id ◃∎) 
    ! (lam id) ◃∙
    ! (ap2 (mu) (linv (map x)) idp) ◃∙
    ! (al (inv (map x)) (map x) id) ◃∙
    ap (mu (inv (map x))) (rho (map x)) ◃∙
    ap (mu (inv (map x))) (! (ap map (rho x))  ! (map-comp x id)) ◃∙
    al (inv (map x)) (map x) (map id) ◃∙
    ap2 (mu) (linv (map x)) idp ◃∙
    lam (map id) ◃∎
      =ₛ⟨ 0 & 4 & zz₁-linv-rot1 (map x) 
    ! (linv (map x)) ◃∙
    ap (mu (inv (map x))) (! (ap map (rho x))  ! (map-comp x id)) ◃∙
    al (inv (map x)) (map x) (map id) ◃∙
    ap2 mu (linv (map x)) idp ◃∙
    lam (map id) ◃∎
      =ₛ⟨ 1 & 1 & hmtpy-nat-∙◃  z  ap  v  mu v z) (map-inv x)) (! (ap map (rho x))  ! (map-comp x id)) 
    ! (linv (map x)) ◃∙
    ap  v  mu v (map x)) (map-inv x) ◃∙
    ap  z  mu (map (inv x)) z) (! (ap map (rho x))  ! (map-comp x id)) ◃∙
    ! (ap  v  mu v (mu (map x) (map id))) (map-inv x)) ◃∙
    al (inv (map x)) (map x) (map id) ◃∙
    ap2 (mu) (linv (map x)) idp ◃∙
    lam (map id) ◃∎
      =ₛ⟨ 2 & 1 & ap-∙-!-!◃ (mu (map (inv x))) (ap map (rho x)) (map-comp x id) 
    ! (linv (map x)) ◃∙
    ap  v  mu v (map x)) (map-inv x) ◃∙
    ! (ap (mu (map (inv x))) (ap map (rho x))) ◃∙
    ! (ap (mu (map (inv x))) (map-comp x id)) ◃∙
    ! (ap  v  mu v (mu (map x) (map id))) (map-inv x)) ◃∙
    al (inv (map x)) (map x) (map id) ◃∙
    ap2 mu (linv (map x)) idp ◃∙
    lam (map id) ◃∎
      =ₛ⟨ 5 & 1 & apCommSq2◃-rev  z  al z (map x) (map id)) (map-inv x) 
    ! (linv (map x)) ◃∙
    ap  v  mu v (map x)) (map-inv x) ◃∙
    ! (ap (mu (map (inv x))) (ap map (rho x))) ◃∙
    ! (ap (mu (map (inv x))) (map-comp x id)) ◃∙
    ! (ap  v  mu v (mu (map x) (map id))) (map-inv x)) ◃∙
    ap  z  mu z (mu (map x) (map id))) (map-inv x) ◃∙
    al (map (inv x)) (map x) (map id) ◃∙
    ! (ap  z  mu (mu z (map x)) (map id)) (map-inv x)) ◃∙
    ap2 (mu) (linv (map x)) idp ◃∙
    lam (map id) ◃∎
      =ₛ₁⟨ 4 & 2 & !-inv-l (ap  v  mu v (mu (map x) (map id))) (map-inv x)) 
    _
      =ₛ₁⟨ 4 & 2 & idp 
    ! (linv (map x)) ◃∙
    ap  v  mu v (map x)) (map-inv x) ◃∙
    ! (ap (mu (map (inv x))) (ap map (rho x))) ◃∙
    ! (ap (mu (map (inv x))) (map-comp x id)) ◃∙
    al (map (inv x)) (map x) (map id) ◃∙
    ! (ap  z  mu (mu z (map x)) (map id)) (map-inv x)) ◃∙
    ap2 mu (linv (map x)) idp ◃∙
    lam (map id) ◃∎ ∎ₛ

  lam-to-rho1 =
    ! (linv (map x)) ◃∙
    ap  v  mu v (map x)) (map-inv x) ◃∙
    ! (ap (mu (map (inv x))) (ap map (rho x))) ◃∙
    ! (ap (mu (map (inv x))) (map-comp x id)) ◃∙
    al (map (inv x)) (map x) (map id) ◃∙
    ! (ap  z  mu (mu z (map x)) (map id)) (map-inv x)) ◃∙
    ap2 mu (linv (map x)) idp ◃∙
    lam (map id) ◃∎
      =ₛ⟨ 3 & 2 & !ₛ (map-al-rot2◃ map map-comp map-al (inv x) x id) 
    ! (linv (map x)) ◃∙
    ap  v  mu v (map x)) (map-inv x) ◃∙
    ! (ap (mu (map (inv x))) (ap map (rho x))) ◃∙
    map-comp (inv x) (mu x id) ◃∙
    ap map (al (inv x) x id) ◃∙
    ! (map-comp (mu (inv x) x) id) ◃∙
    ! (ap  v  mu v (map id)) (map-comp (inv x) x)) ◃∙
    ! (ap  z  mu (mu z (map x)) (map id)) (map-inv x)) ◃∙
    ap2 mu (linv (map x)) idp ◃∙
    lam (map id) ◃∎
      =ₛ⟨ 5 & 1 & hmtpy-nat-!◃  z  map-comp z id) (linv x) 
    ! (linv (map x)) ◃∙
    ap  v  mu v (map x)) (map-inv x) ◃∙
    ! (ap (mu (map (inv x))) (ap map (rho x))) ◃∙
    map-comp (inv x) (mu x id) ◃∙
    ap map (al (inv x) x id) ◃∙
    ap  z  map (mu z id)) (linv x) ◃∙
    ! (map-comp id id) ◃∙
    ! (ap  z  mu (map z) (map id)) (linv x)) ◃∙
    ! (ap  v  mu v (map id)) (map-comp (inv x) x)) ◃∙
    ! (ap  z  mu (mu z (map x)) (map id)) (map-inv x)) ◃∙
    ap2 (mu) (linv (map x)) idp ◃∙
    lam (map id) ◃∎
      =ₛ⟨ 3 & 1 & apCommSq2◃-rev (map-comp (inv x)) (rho x) 
    ! (linv (map x)) ◃∙
    ap  v  mu v (map x)) (map-inv x) ◃∙
    ! (ap (mu (map (inv x))) (ap map (rho x))) ◃∙
    ap  z  mu (map (inv x)) (map z)) (rho x) ◃∙
    map-comp (inv x) x ◃∙
    ! (ap  z  map (mu (inv x) z)) (rho x)) ◃∙
    ap map (al (inv x) x id) ◃∙
    ap  z  map (mu z id)) (linv x) ◃∙
    ! (map-comp id id) ◃∙
    ! (ap  z  mu (map z) (map id)) (linv x)) ◃∙
    ! (ap  v  mu v (map id)) (map-comp (inv x) x)) ◃∙
    ! (ap  z  mu (mu z (map x)) (map id)) (map-inv x)) ◃∙
    ap2 mu (linv (map x)) idp ◃∙
    lam (map id) ◃∎
      =ₛ₁⟨ 3 & 1 & ap-∘ (mu (map (inv x))) map (rho x) 
    _
      =ₛ₁⟨ 2 & 2 & !-inv-l (ap (mu (map (inv x))) (ap map (rho x)))  
    ! (linv (map x)) ◃∙
    ap  v  mu v (map x)) (map-inv x) ◃∙
    idp ◃∙
    map-comp (inv x) x ◃∙
    ! (ap  z  map (mu (inv x) z)) (rho x)) ◃∙
    ap map (al (inv x) x id) ◃∙
    ap  z  map (mu z id)) (linv x) ◃∙
    ! (map-comp id id) ◃∙
    ! (ap  z  mu (map z) (map id)) (linv x)) ◃∙
    ! (ap  v  mu v (map id)) (map-comp (inv x) x)) ◃∙
    ! (ap  z  mu (mu z (map x)) (map id)) (map-inv x)) ◃∙
    ap2 mu (linv (map x)) idp ◃∙
    lam (map id) ◃∎ ∎ₛ

  lam-to-rho2 =
    ! (linv (map x)) ◃∙
    ap  v  mu v (map x)) (map-inv x) ◃∙
    idp ◃∙
    map-comp (inv x) x ◃∙
    ! (ap  z  map (mu (inv x) z)) (rho x)) ◃∙
    ap map (al (inv x) x id) ◃∙
    ap  z  map (mu z id)) (linv x) ◃∙
    ! (map-comp id id) ◃∙
    ! (ap  z  mu (map z) (map id)) (linv x)) ◃∙
    ! (ap  v  mu v (map id)) (map-comp (inv x) x)) ◃∙
    ! (ap  z  mu (mu z (map x)) (map id)) (map-inv x)) ◃∙
    ap2 mu (linv (map x)) idp ◃∙
    lam (map id) ◃∎
      =ₛ₁⟨ 4 & 1 & ap ! (ap-∘ map (mu (inv x)) (rho x)) 
    ! (linv (map x)) ◃∙
    ap  v  mu v (map x)) (map-inv x) ◃∙
    idp ◃∙
    map-comp (inv x) x ◃∙
    ! (ap map (ap  z  mu (inv x) z) (rho x))) ◃∙
    ap map (al (inv x) x id) ◃∙
    ap  z  map (mu z id)) (linv x) ◃∙
    ! (map-comp id id) ◃∙
    ! (ap  z  mu (map z) (map id)) (linv x)) ◃∙
    ! (ap  v  mu v (map id)) (map-comp (inv x) x)) ◃∙
    ! (ap  z  mu (mu z (map x)) (map id)) (map-inv x)) ◃∙
    ap2 mu (linv (map x)) idp ◃∙
    lam (map id) ◃∎
      =ₛ₁⟨ 6 & 1 & ap-∘ map  z  mu z id) (linv x) 
    _
      =ₛ₁⟨ 8 & 1 & ap ! (ap-∘  z  mu z (map id)) map (linv x)) 
    ! (linv (map x)) ◃∙
    ap  v  mu v (map x)) (map-inv x) ◃∙
    idp ◃∙
    map-comp (inv x) x ◃∙
    ! (ap map (ap (mu (inv x)) (rho x))) ◃∙
    ap map (al (inv x) x id) ◃∙
    ap map (ap  z  mu z id) (linv x)) ◃∙
    ! (map-comp id id) ◃∙
    ! (ap  z  mu z (map id)) (ap map (linv x))) ◃∙
    ! (ap  v  mu v (map id)) (map-comp (inv x) x)) ◃∙
    ! (ap  z  mu (mu z (map x)) (map id)) (map-inv x)) ◃∙
    ap2 mu (linv (map x)) idp ◃∙
    lam (map id) ◃∎ ∎ₛ

  lam-to-rho3 =
    ! (linv (map x)) ◃∙
    ap  z  mu z (map x)) (map-inv x) ◃∙
    idp ◃∙
    map-comp (inv x) x ◃∙
    ! (ap map (ap (mu (inv x)) (rho x))) ◃∙
    ap map (al (inv x) x id) ◃∙
    ap map (ap  z  mu z id) (linv x)) ◃∙
    ! (map-comp id id) ◃∙
    ! (ap  z  mu z (map id)) (ap map (linv x))) ◃∙
    ! (ap  z  mu z (map id)) (map-comp (inv x) x)) ◃∙
    ! (ap  z  mu (mu z (map x)) (map id)) (map-inv x)) ◃∙
    ap2 mu (linv (map x)) idp ◃∙
    lam (map id) ◃∎
      =ₛ₁⟨ 10 & 1 & ap ! (ap-∘  z  mu z (map id))  z  mu z (map x)) (map-inv x)) 
    ! (linv (map x)) ◃∙
    ap  z  mu z (map x)) (map-inv x) ◃∙
    idp ◃∙
    map-comp (inv x) x ◃∙
    ! (ap map (ap (mu (inv x)) (rho x))) ◃∙
    ap map (al (inv x) x id) ◃∙
    ap map (ap  z  mu z id) (linv x)) ◃∙
    ! (map-comp id id) ◃∙
    ! (ap  z  mu z (map id)) (ap map (linv x))) ◃∙
    ! (ap  z  mu z (map id)) (map-comp (inv x) x)) ◃∙
    ! (ap  z  mu z (map id)) (ap  z  mu z (map x)) (map-inv x))) ◃∙
    ap2 mu (linv (map x)) idp ◃∙
    lam (map id) ◃∎
      =ₛ₁⟨ 5 & 2 & ∙-ap map (al (inv x) x id) (ap  z  mu z id) (linv x)) 
    _
      =ₛ₁⟨ 10 & 1 & ap2-idp-r mu (linv (map x)) 
    ! (linv (map x)) ◃∙
    ap  z  mu z (map x)) (map-inv x) ◃∙
    idp ◃∙
    map-comp (inv x) x ◃∙
    ! (ap map (ap (mu (inv x)) (rho x))) ◃∙
    ap map (al (inv x) x id  ap  z  mu z id) (linv x)) ◃∙
    ! (map-comp id id) ◃∙
    ! (ap  z  mu z (map id)) (ap map (linv x))) ◃∙
    ! (ap  z  mu z (map id)) (map-comp (inv x) x)) ◃∙
    ! (ap  z  mu z (map id)) (ap  z  mu z (map x)) (map-inv x))) ◃∙
    ap  z  mu z (map id)) (linv (map x)) ◃∙
    lam (map id) ◃∎
      =ₛ⟨ 7 & 3 & !ₛ (ap-∙-!!!◃  z  mu z (map id)) (ap map (linv x)) (map-comp (inv x) x) _) 
    _
      =ₛ⟨ 7 & 2 & 
        ∙-ap◃  z  mu z (map id))
          (! (ap map (linv x))  ! (map-comp (inv x) x)  ! (ap  z  mu z (map x)) (map-inv x)))
          (linv (map x)) 
    ! (linv (map x)) ◃∙
    ap  z  mu z (map x)) (map-inv x) ◃∙
    idp ◃∙
    map-comp (inv x) x ◃∙
    ! (ap map (ap (mu (inv x)) (rho x))) ◃∙
    ap map (al (inv x) x id  ap  z  mu z id) (linv x)) ◃∙
    ! (map-comp id id) ◃∙
    ap  z  mu z (map id))
      ((! (ap map (linv x)) 
      ! (map-comp (inv x) x) 
      ! (ap  z  mu z (map x)) (map-inv x))) 
      linv (map x)) ◃∙
    lam (map id) ◃∎ ∎ₛ