{-# OPTIONS --without-K --safe #-}
module Categories.Functor.CartesianClosed where
open import Level
open import Categories.Category.CartesianClosed.Bundle using (CartesianClosedCategory)
open import Categories.Category.CartesianClosed using (CartesianClosed)
open import Categories.Functor using (Functor; _∘F_)
open import Categories.Functor.Cartesian using (IsCartesianF)
import Categories.Morphism as M
private
variable
o ℓ e o′ ℓ′ e′ : Level
record IsCartesianClosedF (C : CartesianClosedCategory o ℓ e) (D : CartesianClosedCategory o′ ℓ′ e′)
(F : Functor (CartesianClosedCategory.U C) (CartesianClosedCategory.U D)) : Set (o ⊔ ℓ ⊔ e ⊔ o′ ⊔ ℓ′ ⊔ e′) where
private
module C = CartesianClosedCategory C using (cartesianCategory; cartesianClosed)
module D = CartesianClosedCategory D using (cartesianCategory; cartesianClosed; _⇒_; _∘_; U)
module CC = CartesianClosed C.cartesianClosed using (_^_; eval′)
module DC = CartesianClosed D.cartesianClosed using (_^_; λg)
field
F-cartesian : IsCartesianF C.cartesianCategory D.cartesianCategory F
open Functor F
open IsCartesianF F-cartesian
F-mor : ∀ A B → F₀ (A CC.^ B) D.⇒ F₀ A DC.^ F₀ B
F-mor A B = DC.λg (F₁ CC.eval′ D.∘ ×-iso.to (A CC.^ B) B)
field
F-closed : ∀ {A B} → M.IsIso D.U (F-mor A B)
record CartesianClosedF (C : CartesianClosedCategory o ℓ e) (D : CartesianClosedCategory o′ ℓ′ e′) : Set (o ⊔ ℓ ⊔ e ⊔ o′ ⊔ ℓ′ ⊔ e′) where
private
module C = CartesianClosedCategory C
module D = CartesianClosedCategory D
field
F : Functor C.U D.U
isCartesianClosed : IsCartesianClosedF C D F
open Functor F public
open IsCartesianClosedF isCartesianClosed public