Skip to content

Flat Domains

{-# OPTIONS --rewriting --confluence-check --lossy-unification #-}

module Properties.Flat where
  open import Notation.Domains
  open import Notation.Flat public
  open import Agda.Builtin.Equality public using (_≡_; refl)
  open import Agda.Builtin.Equality.Rewrite using ()

  variable f : A → ⟪ D ⟫; a′ : A
  postulate
    elim-♯-↑  : (f ♯) (↑ a′)  ≡ f a′
    elim-♯-⊥  : (f ♯) ⊥      ≡ ⊥
  {-# REWRITE elim-♯-↑ #-}

The elim-♯-⊥ property could be added as a rewrite rule for automatic use in proofs about an embedding of denotations that represent errors or failures by ⊥. When ⊥ only represents nontermination, rewrite rules that propagate it are irrelevant.