Skip to content

Scm.Domain-Equations

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

module Scm.Domain-Equations where

open import Scm.Notation
open import Scm.Abstract-Syntax using (Ide; Int)

-- Domain declarations

postulate  𝐋   :  Domain  -- locations
variable   Ξ±   :  βŸͺ 𝐋 ⟫
𝐍              :  Domain  -- natural numbers
𝐓              :  Domain  -- booleans
𝐑              :  Domain  -- numbers
𝐏              :  Domain  -- pairs
𝐌              :  Domain  -- miscellaneous
variable   ΞΌ   :  βŸͺ 𝐌 ⟫
𝐅              :  Domain  -- procedure values
variable   Ο†   :  βŸͺ 𝐅 ⟫
postulate  𝐄   :  Domain  -- expressed values
variable   Ο΅   :  βŸͺ 𝐄 ⟫
𝐒              :  Domain  -- stores
variable   Οƒ   :  βŸͺ 𝐒 ⟫
𝐔              :  Domain  -- environments
variable   ρ   :  βŸͺ 𝐔 ⟫
𝐂              :  Domain  -- command continuations
variable   ΞΈ   :  βŸͺ 𝐂 ⟫
postulate  𝐀   :  Domain  -- answers

𝐄⋆             =  𝐄 ⋆
variable   ϡ⋆  :  βŸͺ 𝐄⋆ ⟫

-- Domain equations

data Misc : Set where
  null unallocated undefined unspecified : Misc

𝐍     =  NatβŠ₯
𝐓     =  BoolβŠ₯
𝐑     =  Int +βŠ₯
𝐏     =  𝐋 Γ— 𝐋
𝐌     =  Misc +βŠ₯
𝐅     =  𝐄⋆ β†’αΆœ (𝐄 β†’αΆœ 𝐂) β†’αΆœ 𝐂
-- 𝐄  =  𝐓 + 𝐑 + 𝐏 + 𝐌 + 𝐅
𝐒     =  𝐋 β†’αΆœ 𝐄
𝐔     =  Ide β†’Λ’ 𝐋
𝐂     =  𝐒 β†’αΆœ 𝐀
-- Injections, tests, and projections

postulate
  _𝐓-in-𝐄    : βŸͺ 𝐓   β†’αΆœ 𝐄 ⟫
  _∈-𝐓       : βŸͺ 𝐄   β†’αΆœ Bool +βŠ₯ ⟫
  _|-𝐓       : βŸͺ 𝐄   β†’αΆœ 𝐓 ⟫

  _𝐑-in-𝐄    : βŸͺ 𝐑   β†’αΆœ 𝐄 ⟫
  _∈-𝐑       : βŸͺ 𝐄   β†’αΆœ Bool +βŠ₯ ⟫
  _|-𝐑       : βŸͺ 𝐄   β†’αΆœ 𝐑 ⟫

  _𝐏-in-𝐄    : βŸͺ 𝐏  β†’αΆœ 𝐄 ⟫
  _∈-𝐏       : βŸͺ 𝐄   β†’αΆœ Bool +βŠ₯ ⟫
  _|-𝐏       : βŸͺ 𝐄   β†’αΆœ 𝐏 ⟫

  _𝐌-in-𝐄    : βŸͺ 𝐌   β†’αΆœ 𝐄 ⟫
  _∈-𝐌       : βŸͺ 𝐄   β†’αΆœ Bool +βŠ₯ ⟫
  _|-𝐌       : βŸͺ 𝐄   β†’αΆœ 𝐌 ⟫

  _𝐅-in-𝐄    : βŸͺ 𝐅   β†’αΆœ 𝐄 ⟫
  _∈-𝐅       : βŸͺ 𝐄   β†’αΆœ Bool +βŠ₯ ⟫
  _|-𝐅       : βŸͺ 𝐄   β†’αΆœ 𝐅 ⟫

-- Operations on flat domains

postulate
  _==α΄Έ_  : βŸͺ 𝐋 β†’αΆœ 𝐋 β†’αΆœ 𝐓 ⟫
  _==α΄Ή_  : βŸͺ 𝐌 β†’αΆœ 𝐌 β†’αΆœ 𝐓 ⟫
  _==α΄Ώ_  : βŸͺ 𝐑 β†’αΆœ 𝐑 β†’αΆœ 𝐓 ⟫
  _==α΅€_  : βŸͺ 𝐓 β†’αΆœ 𝐓 β†’αΆœ 𝐓 ⟫
  _<α΄Ώ_   : βŸͺ 𝐑 β†’αΆœ 𝐑 β†’αΆœ 𝐓 ⟫
  _+α΄Ώ_   : βŸͺ 𝐑 β†’αΆœ 𝐑 β†’αΆœ 𝐑 ⟫
  _βˆ§α΅€_   : βŸͺ 𝐓 β†’αΆœ 𝐓 β†’αΆœ 𝐓 ⟫