Sum Domains
{-# OPTIONS --rewriting --confluence-check --lossy-unification #-}
module Properties.Sums where
open import Notation.Domains
open import Notation.Functions
open import Notation.Sums using (_+_; inj₁; inj₂; [_,_]) public
variable φ : ⟪ D →ᶜ F ⟫; ψ : ⟪ E →ᶜ F ⟫; δ : ⟪ D ⟫; ε : ⟪ E ⟫
postulate
elim-inj₁ : [ φ , ψ ] (inj₁ δ) ≡ φ δ
elim-inj₂ : [ φ , ψ ] (inj₂ ε) ≡ ψ ε
elim-[]-⊥ : [ φ , ψ ] ⊥ ≡ ⊥
{-# REWRITE elim-inj₁ elim-inj₂ #-}
open import Notation.Sums using (n; _≳_↦_; _in⊥_; _|⊥_; _∈⊥_) public
open import Notation.Flat
open import Notation.Flat.Booleans
open import Notation.Flat.Naturals
open import Relation.Binary.PropositionalEquality.Core using (_≢_)
variable D′ : Domain; n′ : Nat
postulate
elim-∈⊥ : {{_ : E ≳ n ↦ D}} → {{_ : E ≳ n′ ↦ D′}} → (δ : ⟪ D ⟫) →
(δ in⊥ E) ∈⊥ D′ ≡ ↑ (n ==ᴺ n′)
elim-|⊥ : {{_ : E ≳ n ↦ D}} → (δ : ⟪ D ⟫) → (δ in⊥ E) |⊥ D ≡ δ
elim-∈⊥-⊥ : {{_ : E ≳ n ↦ D}} → {{_ : E ≳ n′ ↦ D′}} → (δ : ⟪ D ⟫) →
{n ≢ n′} → (δ in⊥ E) |⊥ D′ ≡ ⊥
{-# REWRITE elim-∈⊥ elim-|⊥ #-}