[Haskell-cafe] Monad laws in presence of bottoms

wren ng thornton wren at freegeek.org
Wed Feb 22 06:30:46 CET 2012

On 2/21/12 11:27 AM, MigMit wrote:
> Ehm... why exactly don't domain products form domains?

One important property of domains[1] is that they have a unique bottom 
element. Given domains A and B, let us denote the domain product as:

     (A,B) def= { (a,b) | a <- A, b <- B }

Which will inherit an ordering in the obvious/free way from the domain 
orderings on A and B. Since both A and B are domains, they have bottom 

     exists a0:A. forall a:A. (a0  <=_A  a)
     exists b0:B. forall b:B. (b0  <=_B  b)

However, there is no free ordering on:

     { (a0,b) | b <- B } \cup { (a,b0) | a <- A }

So all of those are minimal elements of (A,B) but none of them is a 
unique minimum; hence (A,B) is not a domain.

The smash product gets around this because it takes all those elements 
and makes them equal, just like a strict tuple would in Haskell.

[1] This is in the sense of domain theory. It has nothing (per se) to do 
with the many other uses of the term "domain" in mathematics.

Live well,

More information about the Haskell-Cafe mailing list