What is failure? or: constructive negation by fail answers

A standard approach to negation in logic programming is negation as failure. Its major drawback is that it cannot produce answer substitutions to negated queries. Approaches to overcoming this limitation are termed constructive negation. The paper presents an approach based on construction of finitely failed trees for some instances of a negated query. A correct definition of a failed tree is given (it turns out that a straightforward definition leads to unsoundness). The method is applicable to normal programs. If finitely failed trees are concerned then its semantics is given by Clark's completion (and the author's approach is a proper extension of SLDNF-resolution). If infinite failed trees are allowed then the method is sound for the well-founded semantics.<<ETX>>