Skip to content

Product Domains

The carrier of the binary product D × E of two domains consists of all pairs (d , e) of elements of D and E with the pair (⊥{D} , ⊥{E}) as the bottom element ⊥{D × E}. The following operations can be used directly for binary products, and iterated for products of more than two domains.

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

module Notation.Products where

  open import Notation.Domains
  open import Notation.Functions

  postulate
    _×_  : Domain → Domain → Domain  -- D × E is the categorical product
    _,_  : ⟪ D →ᶜ E →ᶜ (D × E) ⟫     -- (δ , ε) is a pair of elements
    _↓₁  : ⟪ (D × E) →ᶜ D ⟫          -- (δ , ε)↓₁ is δ
    _↓₂  : ⟪ (D × E) →ᶜ E ⟫          -- (δ , ε)↓₂ is ε
  infixr 2 _×_
  infixr 4 _,_

Neither the product nor pairing is associative in the embedding – they are associative up to isomorphism, but the Agda type-checker does not take account of that.