open import Relation.Binary
open import Relation.Unary
open import Agda.Primitive
open import Data.Product
open import Relation.Nullary
open import Data.Sum hiding (map₂)
open import Function

module Interval (Inst : StrictPartialOrder lzero lzero lzero) where

open import Instant Inst public

data Interval : Set where
  ⟦_-_⟧ : (α β : Support)  Interval
  ⟦_-∞⟦ : (α : Support)  Interval

_∈ᵢ_ : Support  Interval  Set
v ∈ᵢ  α -∞⟦ = α  v
v ∈ᵢ  α - β  = α  v × ¬ (β  v)

inf : Interval  Support
inf  α - _  = α
inf  α -∞⟦ = α

_⊂ᵢ_ : Rel Interval _
I ⊂ᵢ J = (_∈ᵢ I)  (_∈ᵢ J)

≈∈ :  {i₁ i₂ I}  i₁  i₂  i₁ ∈ᵢ I  i₂ ∈ᵢ I
≈∈ {I =  α - β } i₁≈i₂ (α≼i₁ , ¬β≺i₁)
  = ≼-resp-≈₁ i₁≈i₂ α≼i₁ ,
     β≺i₂  ¬β≺i₁ (≺-resp-≈₁ (sym≈ i₁≈i₂) β≺i₂))
≈∈ {I =  α -∞⟦} i₁≈i₂ (inj₁ α≈i₁) = inj₁ (trans≈ α≈i₁ i₁≈i₂)
≈∈ {I =  α -∞⟦} i₁≈i₂ (inj₂ α≺i₁) = inj₂ (≺-resp-≈₁ i₁≈i₂ α≺i₁)

trans⊂ : Transitive _⊂ᵢ_
trans⊂ u v = v  u

sameB :  {i j k}  j  k  i ∈ᵢ  j - k   i  j
sameB j≈k = sym≈  (uncurry ≼→¬≺→≈)  map₂ (_∘ (≺-resp-≈₂ j≈k))