Dept. of Computer Science and Engineering
Oregon Graduate Center
Logic programming languages such as Prolog possess a relatively efficient evaluation procedure but restrict the expressiveness of full predicate logic. Various implementations of negation within logic programming are directed at restoring expressiveness. Negation by failure, the predominant implementation, can be both incorrect and incomplete. Furthermore, negative queries solved by failure do not return answer substitutions as do positive queries. Another implementation of negation, model elimination, is complete but may be as inefficient as resolution. Other implementations have a similar tradeoff between completeness and efficiency. Constructive negation is an effort to provide negation within logic programming based on ad hoc methods commonly used by programmers to obtain answer substitutions from negative queries. The ad hoc methods involve definition of both positive and negative information with definite clauses to retain efficient evaluation. While logic programs are described with reference to classical logic, programs incorporating constructive negation must be described by a three-valued logic containing an additional undefined value. Programs with constructive negation may be inconsistent, and syntactic restrictions are needed to ensure consistency. The resulting programs may contain universal quantifiers. An evaluation procedure for universal quantifiers is proposed that under further weak syntactic conditions is correct though necessarily incomplete. Thus, programs incorporating constructive negation are assured to be consistent and have a relatively efficient evaluation procedure.
Walinsky, Clifford, "Constructive negation in logic programs" (1987). Scholar Archive. 246.