1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768{-# OPTIONS --without-K --safe #-} module Categories.Adjoint.Equivalence where open import Level open import Categories.Adjointopen import Categories.Adjoint.TwoSidedopen import Categories.Adjoint.TwoSided.Composeopen import Categories.Category.Core using (Category)open import Categories.Functor using (Functor; _∘F_) renaming (id to idF)open import Categories.NaturalTransformation.NaturalIsomorphism as ≃ using (_≃_) open import Relation.Binary using (Setoid; IsEquivalence) private variable o ℓ e o′ ℓ′ e′ : Level C D E : Category o ℓ e record ⊣Equivalence (C : Category o ℓ e) (D : Category o′ ℓ′ e′) : Set (o ⊔ ℓ ⊔ e ⊔ o′ ⊔ ℓ′ ⊔ e′) where field L : Functor C D R : Functor D C L⊣⊢R : L ⊣⊢ R module L = Functor L module R = Functor R open _⊣⊢_ L⊣⊢R public refl : ⊣Equivalence C Crefl = record { L = idF ; R = idF ; L⊣⊢R = id⊣⊢id } sym : ⊣Equivalence C D → ⊣Equivalence D Csym e = record { L = R ; R = L ; L⊣⊢R = op₂ } where open ⊣Equivalence e trans : ⊣Equivalence C D → ⊣Equivalence D E → ⊣Equivalence C Etrans e e′ = record { L = e′.L ∘F e.L ; R = e.R ∘F e′.R ; L⊣⊢R = e.L⊣⊢R ∘⊣⊢ e′.L⊣⊢R } where module e = ⊣Equivalence e using (L; R; L⊣⊢R) module e′ = ⊣Equivalence e′ using (L; R; L⊣⊢R) isEquivalence : ∀ {o ℓ e} → IsEquivalence (⊣Equivalence {o} {ℓ} {e})isEquivalence = record { refl = refl ; sym = sym ; trans = trans } setoid : ∀ o ℓ e → Setoid _ _setoid o ℓ e = record { Carrier = Category o ℓ e ; _≈_ = ⊣Equivalence ; isEquivalence = isEquivalence }