A Denotational Semantics for Logic Programming

A fully abstract denotational semantics for logic programming has not been constructed yet. In this paper we present a denotational semantics that is almost fully abstract. We take the meaning of a logic program to be an element in a Plotkin power domain of substitutions. In this way our result shows that standard domain constructions suffice, when giving a semantics for logic programming. Using the well-known fixpoint semantics of logic programming we have to consider two different fixpoints in order to obtain information about both successful and failed computations. In contrast, our semantics is uniform in that the (single) meaning of a logic program contains information about both successful, failed and infinite computations. Finally, based on the full abstractness result, we argue that the detail level of substitutions is needed in any denotational semantics for logic programming.