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))