Scm.Notation
{-# OPTIONS --rewriting --confluence-check --lossy-unification #-}
open import Agda.Builtin.Equality
open import Agda.Builtin.Equality.Rewrite
module Scm.Notation where
open import Data.Bool.Base using (Bool; false; true) public
open import Data.Nat.Base renaming (ℕ to Nat) using (suc) public
open import Data.String.Base using (String) public
open import Data.Unit.Base using (⊤)
open import Function using (id; _∘_) public
postulate
Domain : Set₁
⟪_⟫ : Domain → Set
variable
A B C : Set
D E F : Domain
n : Nat
postulate
⊥ : ⟪ D ⟫
postulate
_→ᶜ_ : Domain → Domain → Domain
_→ˢ_ : Set → Domain → Domain
dom-cts : ⟪ D →ᶜ E ⟫ ≡ (⟪ D ⟫ → ⟪ E ⟫)
set-cts : ⟪ A →ˢ E ⟫ ≡ (A → ⟪ E ⟫)
{-# REWRITE dom-cts set-cts #-}
postulate
fix : ⟪ (D →ᶜ D) →ᶜ D ⟫
postulate
_+⊥ : Set → Domain
η : ⟪ A →ˢ A +⊥ ⟫
_♯ : ⟪ (A →ˢ D) →ᶜ A +⊥ →ᶜ D ⟫
Bool⊥ = Bool +⊥
Nat⊥ = Nat +⊥
String⊥ = String +⊥
postulate
_==⊥_ : ⟪ Nat⊥ →ᶜ Nat →ˢ Bool⊥ ⟫
_>=⊥_ : ⟪ Nat⊥ →ᶜ Nat →ˢ Bool⊥ ⟫
_⟶_,_ : ⟪ Bool⊥ →ᶜ D →ᶜ D →ᶜ D ⟫
postulate
_+_ : Domain → Domain → Domain
inj₁ : ⟪ D →ᶜ D + E ⟫
inj₂ : ⟪ E →ᶜ D + E ⟫
[_,_] : ⟪ (D →ᶜ F) →ᶜ (E →ᶜ F) →ᶜ (D + E →ᶜ F) ⟫
postulate
_×_ : Domain → Domain → Domain
_,_ : ⟪ D →ᶜ E →ᶜ D × E ⟫
_↓²1 : ⟪ D × E →ᶜ D ⟫
_↓²2 : ⟪ D × E →ᶜ E ⟫
_↓³1 : ⟪ D × E × F →ᶜ D ⟫
_↓³2 : ⟪ D × E × F →ᶜ E ⟫
_↓³3 : ⟪ D × E × F →ᶜ F ⟫
_^_ : Domain → Nat → Domain
D ^ 0 = ⊤ +⊥
D ^ 1 = D
D ^ suc (suc n) = D × (D ^ suc n)
postulate
_⋆ : Domain → Domain
⟨⟩ : ⟪ D ⋆ ⟫
⟨_⟩ : ⟪ (D ^ suc n) →ᶜ D ⋆ ⟫
# : ⟪ D ⋆ →ᶜ Nat⊥ ⟫
_§_ : ⟪ D ⋆ →ᶜ D ⋆ →ᶜ D ⋆ ⟫
_↓_ : ⟪ D ⋆ →ᶜ Nat →ˢ D ⟫
_†_ : ⟪ D ⋆ →ᶜ Nat →ˢ D ⋆ ⟫
infixr 0 _→ᶜ_
infixr 0 _→ˢ_
infixr 1 _+_
infixr 2 _×_
infixr 4 _,_
infix 8 _^_
infix 10 _+⊥
infixr 20 _⟶_,_