Declarative methodologies for logic program construction have been proposed for Prolog. They roughly consist of 1) building
a purely logical version of the program based on a clear declarative semantics and 2) performing a number of checks about
modes, types, termination and multiplicity. We plan to define a similar methodology for Mercury. This choice is motivated
by the fact that type, mode, and multiplicity must be explicitly specified in Mercury, allowing the compiler to perform the
second step above. In order to propose a methodology to perform the first step, we need a declarative semantics for Mercury,
which has not yet been explicitly defined. The goal of the paper is to propose such a semantics pursuing simplicity and naturalness.
We chose to define the semantics with respect to a unique interpretation domain, called the “universe”, which is a kind of
higher-order version of the Herbrand universe. Based on this simple domain, the denotation of terms and goals is naturally
defined as well as the models of programs. Although the declarative semantics is primarily introduced to improve “manual”
program construction by programmers, it could be used in a synthesis context.