{-# OPTIONS --safe #-}
module Cubical.Categories.Instances.Posets where

open import Cubical.Foundations.Prelude
open import Cubical.Foundations.Function as Function
open import Cubical.Foundations.HLevels
open import Cubical.Foundations.Structure

open import Cubical.Relation.Binary.Order.Poset
open import Cubical.Relation.Binary.Order.Poset.Mappings

open import Cubical.Categories.Category

open Category hiding (_∘_)

PosetsCategory :   ℓ'  Category (ℓ-max (ℓ-suc ) (ℓ-suc ℓ')) (ℓ-max  ℓ')
PosetsCategory  ℓ' .ob = Poset  ℓ'
PosetsCategory  ℓ' .Hom[_,_] P Q = Σ[ f  ( P    Q ) ] IsIsotone (str P) f (str Q)
PosetsCategory  ℓ' .id = idfun _ , isisotone λ _ _  idfun _
PosetsCategory  ℓ' ._⋆_ (f , fMon) (g , gMon) = g  f , IsIsotone-∘ _ _ _ _ _ fMon gMon
PosetsCategory  ℓ' .⋆IdL _ = refl
PosetsCategory  ℓ' .⋆IdR _ = refl
PosetsCategory  ℓ' .⋆Assoc _ _ _ = refl
PosetsCategory  ℓ' .isSetHom {x = P} {y = Q} = isSetΣSndProp (isSet→ Q.is-set) λ _  isPropIsIsotone _ _ _
  where module Q = PosetStr (str Q)