{-# OPTIONS --safe #-}
module Cubical.Categories.Equivalence.More where
open import Cubical.Categories.Category
open import Cubical.Categories.Functor.Base
open import Cubical.Categories.NaturalTransformation.Base
open import Cubical.Categories.NaturalTransformation.Properties
open import Cubical.Categories.NaturalTransformation.More
open import Cubical.Foundations.Prelude
open import Cubical.Categories.Equivalence.Base
private
variable
ℓC ℓC' ℓD ℓD' ℓE ℓE' : Level
module _
{C : Category ℓC ℓC'} {D : Category ℓD ℓD'} {E : Category ℓE ℓE'}
{F : Functor C D} {G : Functor D E}
where
open Category
open Functor
open NatTrans
open WeakInverse
open NatIso
open isIso
isEquivalenceComp : WeakInverse F → WeakInverse G → WeakInverse (G ∘F F)
isEquivalenceComp Feq Geq = record { invFunc = F'∘G' ;
η = η-iso ;
ε = ε-iso } where
F'∘G' : Functor E C
F'∘G' = Feq .invFunc ∘F Geq .invFunc
η-iso : NatIso 𝟙⟨ C ⟩ (F'∘G' ∘F (G ∘F F))
η-iso = seqNatIso
(Feq .η)
(seqNatIso
((Feq .invFunc) ∘ʳi seqNatIso
(seqNatIso
(symNatIso (CAT⋆IdR {F = F}))
(F ∘ˡi (Geq .η)))
(symNatIso (CAT⋆Assoc F G (Geq .invFunc)))
)
(CAT⋆Assoc (G ∘F F) (Geq .invFunc) (Feq .invFunc))
)
ε-iso : NatIso ((G ∘F F) ∘F F'∘G') 𝟙⟨ E ⟩
ε-iso = seqNatIso
(seqNatIso
(symNatIso (CAT⋆Assoc (F'∘G') F G))
(G ∘ʳi seqNatIso
(seqNatIso
(CAT⋆Assoc (Geq .invFunc) (Feq .invFunc) F)
((Geq .invFunc) ∘ˡi (Feq .ε))
)
(CAT⋆IdR {F = Geq .invFunc})
)
)
(Geq .ε)