> I don't think it is correct to say that the notion of _|_ invariably
> creeps into the denotational semantics.
> But perhaps I am misusing the term "denotational semantics".
> 
> In languages such as Goedel and Mercury, the declarative
> semantics does not deal with nontermination or runtime errors.
> Instead, those issues are handled by a separate operational semantics.
> 
> So, wouldn't the declarative semantics of Goedel and Mercury count
> as denotational semantics, if suitably expressed?

I suppose so, although a common goal of semanticists is that the
denotational semantics and operational semantics are the same.  What
does the declarative semantics say for the denotation of a program,
written in one of these languages, that does not terminate?  (A
denotational semantics aims to give a "denotation" -- a value -- to
every program.  So if you say that the declarative semantics is
undefined in the case of a nonterminating program, then in some sense
the semantics is incomplete.  To make it complete, perhaps all you have
to do is equate "undefined" with _|_ !)

> In Goedel, `a & b' has the same declarative semantics as `b & a'.
> However, `a & b' may have different operational semantics to `b & a'.

That's unusual (to me, anyway; see above).

  -Paul



Reply via email to