{-# OPTIONS --without-K --safe #-} open import Categories.Category open import Categories.Category.Monoidal module Categories.Category.Monoidal.BiClosed {o ℓ e} {C : Category o ℓ e} (M : Monoidal C) where private module C = Category C open Category C variable X Y A B : Obj open import Categories.Adjoint open import Categories.Adjoint.Equivalents using (Hom-NI′) open import Categories.Adjoint.Mate open import Categories.Functor renaming (id to idF) open import Categories.Functor.Bifunctor open import Categories.Functor.Hom open import Categories.Category.Instance.Setoids open import Categories.NaturalTransformation hiding (id) open import Categories.NaturalTransformation.Properties open import Categories.NaturalTransformation.NaturalIsomorphism as NI using (NaturalIsomorphism) open import Level open import Data.Product using (_,_) record BiClosed : Set (levelOfTerm M) where open Monoidal M field [-,-] ⟦-,-⟧ : Bifunctor C.op C C adjointˡ : (-⊗ X) ⊣ appˡ [-,-] X adjointʳ : (X ⊗-) ⊣ appˡ ⟦-,-⟧ X mateˡ : (f : X ⇒ Y) → Mate (adjointˡ {X}) (adjointˡ {Y}) (appʳ-nat ⊗ f) (appˡ-nat [-,-] f) mateʳ : (f : X ⇒ Y) → Mate (adjointʳ {X}) (adjointʳ {Y}) (appˡ-nat ⊗ f) (appˡ-nat ⟦-,-⟧ f) open import Categories.Category.Monoidal.Closed using (Closed) closed : Closed M closed = record { [-,-] = [-,-] ; adjoint = adjointˡ ; mate = mateˡ } open Closed closed hiding ([-,-]) public module ⟦-,-⟧ = Functor ⟦-,-⟧ module adjointˡ {X} = Adjoint (adjointˡ {X}) module adjointʳ {X} = Adjoint (adjointʳ {X}) ⟦-,_⟧ : Obj → Functor C.op C ⟦-,_⟧ = appʳ ⟦-,-⟧ ⟦_,-⟧ : Obj → Functor C C ⟦_,-⟧ = appˡ ⟦-,-⟧ ⟦_,_⟧₀ : Obj → Obj → Obj ⟦ X , Y ⟧₀ = ⟦-,-⟧.F₀ (X , Y) ⟦_,_⟧₁ : A ⇒ B → X ⇒ Y → ⟦ B , X ⟧₀ ⇒ ⟦ A , Y ⟧₀ ⟦ f , g ⟧₁ = ⟦-,-⟧.F₁ (f , g)