{-# OPTIONS --safe #-} module Cubical.Relation.Binary.Order.Preorder.Properties where open import Cubical.Foundations.Prelude open import Cubical.Foundations.HLevels open import Cubical.Functions.Embedding open import Cubical.HITs.PropositionalTruncation as ∥₁ open import Cubical.Relation.Binary.Base open import Cubical.Relation.Binary.Order.Preorder.Base open import Cubical.Relation.Binary.Order.StrictPoset.Base open import Cubical.Relation.Nullary private variable ℓ ℓ' ℓ'' : Level module _ {A : Type ℓ} {R : Rel A A ℓ'} where open BinaryRelation isPreorder→isEquivRelSymKernel : IsPreorder R → isEquivRel (SymKernel R) isPreorder→isEquivRelSymKernel preorder = equivRel (λ a → (IsPreorder.is-refl preorder a) , (IsPreorder.is-refl preorder a)) (isSymSymKernel R) (λ a b c (Rab , Rba) (Rbc , Rcb) → IsPreorder.is-trans preorder a b c Rab Rbc , IsPreorder.is-trans preorder c b a Rcb Rba) isPreorder→isStrictPosetAsymKernel : IsPreorder R → IsStrictPoset (AsymKernel R) isPreorder→isStrictPosetAsymKernel preorder = isstrictposet (IsPreorder.is-set preorder) (λ a b → isProp× (IsPreorder.is-prop-valued preorder a b) (isProp¬ (R b a))) (λ a (Raa , ¬Raa) → ¬Raa (IsPreorder.is-refl preorder a)) (λ a b c (Rab , ¬Rba) (Rbc , ¬Rcb) → IsPreorder.is-trans preorder a b c Rab Rbc , λ Rca → ¬Rcb (IsPreorder.is-trans preorder c a b Rca Rab)) (isAsymAsymKernel R) isPreorderInduced : IsPreorder R → (B : Type ℓ'') → (f : B ↪ A) → IsPreorder (InducedRelation R (B , f)) isPreorderInduced pre B (f , emb) = ispreorder (Embedding-into-isSet→isSet (f , emb) (IsPreorder.is-set pre)) (λ a b → IsPreorder.is-prop-valued pre (f a) (f b)) (λ a → IsPreorder.is-refl pre (f a)) λ a b c → IsPreorder.is-trans pre (f a) (f b) (f c) Preorder→StrictPoset : Preorder ℓ ℓ' → StrictPoset ℓ ℓ' Preorder→StrictPoset (_ , pre) = _ , strictposetstr (BinaryRelation.AsymKernel (PreorderStr._≲_ pre)) (isPreorder→isStrictPosetAsymKernel (PreorderStr.isPreorder pre))