module Cubical.Relation.Binary.Order.Loset.Instances.Int where

open import Cubical.Foundations.Prelude

open import Cubical.Data.Sum
open import Cubical.HITs.PropositionalTruncation

open import Cubical.Data.Empty as 

open import Cubical.Data.Int
open import Cubical.Data.Int.Order renaming (_<_ to _<ℤ_)

open import Cubical.Relation.Binary.Order.Loset

open LosetStr

ℤ<Loset : Loset ℓ-zero ℓ-zero
fst ℤ<Loset = 
_<_ (snd ℤ<Loset) = _<ℤ_
isLoset (snd ℤ<Loset) = isLosetℤ<
  where
    open IsLoset
    abstract
      isLosetℤ< : IsLoset _<ℤ_
      isLosetℤ< .is-set         = isSetℤ
      isLosetℤ< .is-prop-valued = λ _ _  isProp<
      isLosetℤ< .is-irrefl      = λ _  isIrrefl<
      isLosetℤ< .is-trans       = λ _ _ _  isTrans<
      isLosetℤ< .is-asym        = λ a b a<b b<a  isIrrefl< (isTrans< a<b b<a)
      isLosetℤ< .is-weakly-linear a b c a<b with a  c
      ... | lt a<c =  inl a<c ∣₁
      ... | eq a≡c =  inr (subst (_<ℤ b) a≡c a<b) ∣₁
      ... | gt c<a =  inr (isTrans< c<a a<b) ∣₁
      isLosetℤ< .is-connected a b (¬a<b , ¬b<a) with a  b
      ... | lt a<b = ⊥.rec (¬a<b a<b)
      ... | eq a≡b = a≡b
      ... | gt b<a = ⊥.rec (¬b<a b<a)