PCF.Domain Notation
\begin{code}
module PCF.Domain-Notation where
open import Relation.Binary.PropositionalEquality.Core
using (_≡_; refl) public
Domain = Set
variable D E : Domain
postulate
⊥ : {D : Domain} → D
postulate
fix : {D : Domain} → (D → D) → D
fix-fix : ∀ {D} (f : D → D) →
fix f ≡ f (fix f)
fix-app : ∀ {P D} (f : (P → D) → (P → D)) (p : P) →
fix f p ≡ f (fix f) p
postulate
𝕃 : Set → Domain
η : {P : Set} → P → 𝕃 P
_♯ : {P : Set} {D : Domain} → (P → D) → (𝕃 P → D)
elim-♯-η : ∀ {P D} (f : P → D) (p : P) →
(f ♯) (η p) ≡ f p
elim-♯-⊥ : ∀ {P D} (f : P → D) →
(f ♯) ⊥ ≡ ⊥
_+⊥ : Set → Domain
S +⊥ = 𝕃 S
open import Data.Bool.Base
using (Bool; true; false; if_then_else_) public
postulate
_⟶_,_ : {D : Domain} → Bool +⊥ → D → D → D
true-cond : ∀ {D} {d₁ d₂ : D} → (η true ⟶ d₁ , d₂) ≡ d₁
false-cond : ∀ {D} {d₁ d₂ : D} → (η false ⟶ d₁ , d₂) ≡ d₂
bottom-cond : ∀ {D} {d₁ d₂ : D} → (⊥ ⟶ d₁ , d₂) ≡ ⊥
\end{code}