{-# OPTIONS --type-in-type #-}
open import NeilPrelude
module Interval (A : Set) (_<_ : Rel A) where
data Interval : Set where
⟨_,_⟩ : A → A → Interval
⟨_,_] : A → A → Interval
[_,_⟩ : A → A → Interval
[_,_] : A → A → Interval
private _≤_ : Rel A
a ≤ b = (a < b) ⊎ (a ≡ b)
_∈_ : A → Interval → Set
t ∈ ⟨ t₁ , t₂ ⟩ = (t₁ < t) × (t < t₂)
t ∈ ⟨ t₁ , t₂ ] = (t₁ < t) × (t ≤ t₂)
t ∈ [ t₁ , t₂ ⟩ = (t₁ ≤ t) × (t < t₂)
t ∈ [ t₁ , t₂ ] = (t₁ ≤ t) × (t ≤ t₂)
leftBound : Interval → A
leftBound ⟨ a , _ ⟩ = a
leftBound ⟨ a , _ ] = a
leftBound [ a , _ ⟩ = a
leftBound [ a , _ ] = a
rightBound : Interval → A
rightBound ⟨ _ , a ⟩ = a
rightBound ⟨ _ , a ] = a
rightBound [ _ , a ⟩ = a
rightBound [ _ , a ] = a