Skip to content

Domains

Domains are embedded in Agda as elements of the type Domain. A domain D is not itself a type, but it has a carrier type ⟪ D ⟫ : Set, which always contains an element ⊥{D} (written ⊥ when Agda can infer D).

module Notation.Domains where
  postulate
    Domain : Set              -- Domain is the type of all domains
    ⟪_⟫ : Domain → Set        -- ⟪ D ⟫ is the carrier type of D
    ⊥ : {D : Domain} → ⟪ D ⟫  -- ⊥{D} is the 'bottom' element of D
    𝟙 : Domain                -- 𝟙 is a unit domain
  variable A B C : Set; D E F : Domain

Some previous papers on embedding denotational semantics in Agda (Mosses2025CDS) (Mosses2025CSE) (Mosses2025LAF) defined domains to be types: Domain = Set. However, postulating ⊥ : D for all D : Domain was then inconsistent with the existence of an empty type in Agda. Postulating Domain : Set avoids that inconsistency.

The notation for domains postulated here supports type-checking embeddings of denotational semantics in Agda such as those in the illustrative examples. It does not define or constrain the mathematical structure of domains, nor the algebraic and universal properties of the associated functions.