module Cubical.Relation.Binary.Order.StrictOrder.Properties where
open import Cubical.Data.Sum as ⊎
open import Cubical.Data.Empty as ⊥
open import Cubical.Foundations.Prelude
open import Cubical.Functions.Embedding
open import Cubical.HITs.PropositionalTruncation as ∥₁
open import Cubical.Relation.Binary.Base
open import Cubical.Relation.Binary.Order.Apartness.Base
open import Cubical.Relation.Binary.Order.Toset
open import Cubical.Relation.Binary.Order.Poset.Base
open import Cubical.Relation.Binary.Order.Proset.Base
open import Cubical.Relation.Binary.Order.Quoset.Base
open import Cubical.Relation.Binary.Order.StrictOrder.Base
open import Cubical.Relation.Nullary
private
variable
ℓ ℓ' ℓ'' : Level
module _
{A : Type ℓ}
{R : Rel A A ℓ'}
where
open BinaryRelation
isStrictOrder→isQuoset : IsStrictOrder R → IsQuoset R
isStrictOrder→isQuoset strictorder = isquoset
(IsStrictOrder.is-set strictorder)
(IsStrictOrder.is-prop-valued strictorder)
(IsStrictOrder.is-irrefl strictorder)
(IsStrictOrder.is-trans strictorder)
(IsStrictOrder.is-asym strictorder)
private
transrefl : isTrans R → isTrans (ReflClosure R)
transrefl trans a b c (inl Rab) (inl Rbc) = inl (trans a b c Rab Rbc)
transrefl trans a b c (inl Rab) (inr b≡c) = inl (subst (R a) b≡c Rab)
transrefl trans a b c (inr a≡b) (inl Rbc) = inl (subst (λ z → R z c) (sym a≡b) Rbc)
transrefl trans a b c (inr a≡b) (inr b≡c) = inr (a≡b ∙ b≡c)
antisym : isIrrefl R → isTrans R → isAntisym (ReflClosure R)
antisym irr trans a b (inl Rab) (inl Rba) = ⊥.rec (irr a (trans a b a Rab Rba))
antisym irr trans a b (inl _) (inr b≡a) = sym b≡a
antisym irr trans a b (inr a≡b) _ = a≡b
isStrictOrder→isApartnessSymClosure : IsStrictOrder R
→ IsApartness (SymClosure R)
isStrictOrder→isApartnessSymClosure strict
= isapartness (IsStrictOrder.is-set strict)
(λ a b → isProp⊎ (IsStrictOrder.is-prop-valued strict a b)
(IsStrictOrder.is-prop-valued strict b a)
(IsStrictOrder.is-asym strict a b))
(λ a x → ⊎.rec (IsStrictOrder.is-irrefl strict a)
(IsStrictOrder.is-irrefl strict a) x)
(λ a b c x → ⊎.rec (λ Rab → ∥₁.map (⊎.map (λ Rac → inl Rac)
(λ Rcb → inr Rcb))
(IsStrictOrder.is-weakly-linear strict a b c Rab))
(λ Rba → ∥₁.rec isPropPropTrunc
(λ y → ∣ ⊎.rec (λ Rbc → inr (inl Rbc))
(λ Rca → inl (inr Rca)) y ∣₁)
(IsStrictOrder.is-weakly-linear strict b a c Rba)) x)
(isSymSymClosure R)
isStrictOrder→isProsetNegationRel : IsStrictOrder R
→ IsProset (NegationRel R)
isStrictOrder→isProsetNegationRel strict
= isproset (IsStrictOrder.is-set strict)
(λ _ _ → isProp¬ _)
(IsStrictOrder.is-irrefl strict)
λ a b c ¬Rab ¬Rbc Rac →
∥₁.rec isProp⊥ (⊎.rec ¬Rab ¬Rbc)
(IsStrictOrder.is-weakly-linear strict a c b Rac)
isStrictOrderInduced : IsStrictOrder R → (B : Type ℓ'') → (f : B ↪ A)
→ IsStrictOrder (InducedRelation R (B , f))
isStrictOrderInduced strict B (f , emb)
= isstrictorder (Embedding-into-isSet→isSet (f , emb) (IsStrictOrder.is-set strict))
(λ a b → IsStrictOrder.is-prop-valued strict (f a) (f b))
(λ a → IsStrictOrder.is-irrefl strict (f a))
(λ a b c → IsStrictOrder.is-trans strict (f a) (f b) (f c))
(λ a b → IsStrictOrder.is-asym strict (f a) (f b))
λ a b c → IsStrictOrder.is-weakly-linear strict (f a) (f b) (f c)
isStrictOrderDual : IsStrictOrder R → IsStrictOrder (Dual R)
isStrictOrderDual strict
= isstrictorder (IsStrictOrder.is-set strict)
(λ a b → IsStrictOrder.is-prop-valued strict b a)
(IsStrictOrder.is-irrefl strict)
(λ a b c Rab Rbc → IsStrictOrder.is-trans strict c b a Rbc Rab)
(λ a b → IsStrictOrder.is-asym strict b a)
(λ a b c Rba → ∥₁.map (⊎.rec inr inl)
(IsStrictOrder.is-weakly-linear strict b a c Rba))
StrictOrder→Quoset : StrictOrder ℓ ℓ' → Quoset ℓ ℓ'
StrictOrder→Quoset (_ , strict)
= quoset _ (StrictOrderStr._<_ strict)
(isStrictOrder→isQuoset (StrictOrderStr.isStrictOrder strict))
StrictOrder→Apartness : StrictOrder ℓ ℓ' → Apartness ℓ ℓ'
StrictOrder→Apartness (_ , strict)
= apartness _ (BinaryRelation.SymClosure (StrictOrderStr._<_ strict))
(isStrictOrder→isApartnessSymClosure (StrictOrderStr.isStrictOrder strict))
StrictOrder→Proset : StrictOrder ℓ ℓ' → Proset ℓ ℓ'
StrictOrder→Proset (_ , strict)
= proset _ (BinaryRelation.NegationRel (StrictOrderStr._<_ strict))
(isStrictOrder→isProsetNegationRel (StrictOrderStr.isStrictOrder strict))
DualStrictOrder : StrictOrder ℓ ℓ' → StrictOrder ℓ ℓ'
DualStrictOrder (_ , strict)
= strictorder _ (BinaryRelation.Dual (StrictOrderStr._<_ strict))
(isStrictOrderDual (StrictOrderStr.isStrictOrder strict))