{-# OPTIONS --safe #-}
open import Cubical.Foundations.Function
open import Cubical.Foundations.Prelude
open import Cubical.Categories.Adjoint
open import Cubical.Categories.Category
open import Cubical.Categories.Functor
open import Cubical.Categories.NaturalTransformation
module Cubical.Categories.Equivalence.AdjointEquivalence
{ℓC ℓ'C : Level} {ℓD ℓ'D : Level}
where
open UnitCounit
module _ (C : Category ℓC ℓ'C) (D : Category ℓD ℓ'D) where
module _
(fun : Functor C D) (inv : Functor D C)
(η : 𝟙⟨ C ⟩ ≅ᶜ inv ∘F fun) (ε : fun ∘F inv ≅ᶜ 𝟙⟨ D ⟩)
(triang : TriangleIdentities fun inv (NatIso.trans η) (NatIso.trans ε))
where
open TriangleIdentities triang
private
module C = Category C
module D = Category D
module fun = Functor fun
module inv = Functor inv
reverse-triangle : TriangleIdentities inv fun
(NatIso.trans (symNatIso ε))
(NatIso.trans (symNatIso η))
reverse-triangle .Δ₁ d =
sym (C.⋆IdR _)
∙ cong (λ x → ( inv ⟪ NatIso.trans (symNatIso ε) ⟦ d ⟧ ⟫
⋆⟨ C ⟩ NatIso.trans (symNatIso η) ⟦ inv ⟅ d ⟆ ⟧)
⋆⟨ C ⟩ x)
(sym (Δ₂ d))
∙ C.⋆Assoc _ _ _
∙ cong (λ x → inv ⟪ NatIso.trans (symNatIso ε) ⟦ d ⟧ ⟫ ⋆⟨ C ⟩ x)
(sym $ C.⋆Assoc _ _ _)
∙ cong (λ x → inv ⟪ NatIso.trans (symNatIso ε) ⟦ d ⟧ ⟫ ⋆⟨ C ⟩
(x ⋆⟨ C ⟩ inv ⟪ NatIso.trans ε ⟦ d ⟧ ⟫))
(isIso.sec (NatIso.nIso η (inv ⟅ d ⟆)))
∙ cong (λ x → inv ⟪ NatIso.trans (symNatIso ε) ⟦ d ⟧ ⟫ ⋆⟨ C ⟩ x)
(C.⋆IdL _)
∙ sym (inv.F-seq _ _)
∙ cong (λ x → inv ⟪ x ⟫) (isIso.sec (NatIso.nIso ε d))
∙ inv.F-id
reverse-triangle .Δ₂ c =
sym (D.⋆IdL _)
∙ cong (λ x → x
⋆⟨ D ⟩ (NatIso.trans (symNatIso ε) ⟦ fun ⟅ c ⟆ ⟧
⋆⟨ D ⟩ fun ⟪ NatIso.trans (symNatIso η) ⟦ c ⟧ ⟫))
(sym (Δ₁ c))
∙ D.⋆Assoc _ _ _
∙ cong (λ x → fun ⟪ NatIso.trans η ⟦ c ⟧ ⟫ ⋆⟨ D ⟩ x)
(sym $ D.⋆Assoc _ _ _)
∙ cong (λ x → fun ⟪ NatIso.trans η ⟦ c ⟧ ⟫ ⋆⟨ D ⟩
(x ⋆⟨ D ⟩ fun ⟪ NatIso.trans (symNatIso η) ⟦ c ⟧ ⟫))
(isIso.ret (NatIso.nIso ε (fun ⟅ c ⟆)))
∙ cong (λ x → fun ⟪ NatIso.trans η ⟦ c ⟧ ⟫ ⋆⟨ D ⟩ x) (D.⋆IdL _)
∙ sym (fun.F-seq _ _)
∙ cong (λ x → fun ⟪ x ⟫) (isIso.ret (NatIso.nIso η c))
∙ fun.F-id
record AdjointEquivalence : Type (ℓ-max (ℓ-max ℓC ℓ'C) (ℓ-max ℓD ℓ'D)) where
field
fun : Functor C D
inv : Functor D C
η : 𝟙⟨ C ⟩ ≅ᶜ inv ∘F fun
ε : fun ∘F inv ≅ᶜ 𝟙⟨ D ⟩
triangleIdentities : TriangleIdentities fun inv (NatIso.trans η) (NatIso.trans ε)
module _
{C : Category ℓC ℓ'C} {D : Category ℓD ℓ'D}
(adj-equiv : AdjointEquivalence C D)
where
open AdjointEquivalence adj-equiv
adjunction : fun ⊣ inv
adjunction = record {
η = NatIso.trans η
; ε = NatIso.trans ε
; triangleIdentities = triangleIdentities }
reverse-adjunction : inv ⊣ fun
reverse-adjunction = record {
η = NatIso.trans (symNatIso ε)
; ε = NatIso.trans (symNatIso η)
; triangleIdentities = reverse-triangle C D fun inv η ε triangleIdentities }