{-# OPTIONS --cubical --safe #-} module Categories.Exponential where open import Prelude hiding (_×_) open import Categories open import Categories.Product module _ {ℓ₁ ℓ₂} (C : Category ℓ₁ ℓ₂) (hasProducts : HasProducts C) where open Category C open HasProducts hasProducts module _ (Y Z : Ob) where record Exponential : Type (ℓ₁ ℓ⊔ ℓ₂) where field obj : Ob eval : C [ obj × Y , Z ] uniq : ∀ (X : Ob) (f : C [ X × Y , Z ]) → ∃![ f~ ] (C [ eval ∘ (f~ |×| Category.Id C) ] ≡ f) HasExponentials : Type (ℓ₁ ℓ⊔ ℓ₂) HasExponentials = ∀ X Y → Exponential X Y