{-# OPTIONS --safe #-}
module Cubical.Categories.Functors.HomFunctor where
open import Cubical.Foundations.Prelude
open import Cubical.Categories.Category
open import Cubical.Categories.Functor.Base
open import Cubical.Categories.Instances.Sets
open import Cubical.Categories.Constructions.BinProduct
private
variable
ℓC ℓC' : Level
module _ (C : Category ℓC ℓC') where
open Functor
open Category C
HomFunctor : Functor (C ^op ×C C) (SET ℓC')
F-ob HomFunctor (x , y) = Hom[ x , y ] , isSetHom
F-hom HomFunctor {x , y} {x' , y'} (φ , ψ) θ = ψ ∘ (θ ∘ φ)
F-id HomFunctor = funExt λ θ → ⋆IdR (id ⋆ θ) ∙ ⋆IdL θ
F-seq HomFunctor {x , y} {x' , y'} {x'' , y''} (φ , ψ) (φ' , ψ') = funExt λ θ →
((φ' ⋆ φ) ⋆ θ) ⋆ (ψ ⋆ ψ')
≡⟨ sym (⋆Assoc ((φ' ⋆ φ) ⋆ θ) ψ ψ') ⟩
(((φ' ⋆ φ) ⋆ θ) ⋆ ψ) ⋆ ψ'
≡⟨ cong (_⋆ ψ') (
((φ' ⋆ φ) ⋆ θ) ⋆ ψ
≡⟨ cong (_⋆ ψ) (⋆Assoc φ' φ θ) ⟩
(φ' ⋆ (φ ⋆ θ)) ⋆ ψ
≡⟨ ⋆Assoc φ' (φ ⋆ θ) ψ ⟩
φ' ⋆ ((φ ⋆ θ) ⋆ ψ) ∎
) ⟩
(φ' ⋆ ((φ ⋆ θ) ⋆ ψ)) ⋆ ψ' ∎