{-# OPTIONS --without-K --safe #-} module Categories.Kan.Duality where open import Level open import Relation.Binary.PropositionalEquality as ≡ using (_≡_) open import Categories.Category open import Categories.Functor open import Categories.NaturalTransformation open import Categories.Kan private variable o ℓ e : Level C D E : Category o ℓ e F G : Functor C D module _ {F : Functor C D} {G : Functor C E} where private module F = Functor F module G = Functor G coLan⇒Ran : Lan F.op G.op → Ran F G coLan⇒Ran lan = record { R = L.op ; ε = η.op ; δ = λ M α → NaturalTransformation.op (σ (Functor.op M) (NaturalTransformation.op α)) ; δ-unique = λ δ′ eq → σ-unique (NaturalTransformation.op δ′) eq ; commutes = λ M α → commutes (Functor.op M) (NaturalTransformation.op α) } where open Lan lan coRan⇒Lan : Ran F.op G.op → Lan F G coRan⇒Lan ran = record { L = R.op ; η = ε.op ; σ = λ M α → NaturalTransformation.op (δ (Functor.op M) (NaturalTransformation.op α)) ; σ-unique = λ σ′ eq → δ-unique (NaturalTransformation.op σ′) eq ; commutes = λ M α → commutes (Functor.op M) (NaturalTransformation.op α) } where open Ran ran private module _ {F : Functor C D} {G : Functor C E} where module F = Functor F module G = Functor G coLan⟺Ran : (R : Ran F.op G.op) → coLan⇒Ran (coRan⇒Lan R) ≡ R coLan⟺Ran _ = ≡.refl coRan⟺Lan : (L : Lan F.op G.op) → coRan⇒Lan (coLan⇒Ran L) ≡ L coRan⟺Lan _ = ≡.refl