AbstractThe refinement calculus for logic programs consists of a wide-spectrum language and a notion of refinement that can be used to develop programs from specifications. In a refinement, the refined program must return the same set of answers as the original program, because the meaning of a logic program is defined in terms of all the answers computed by the program. “Don't know” non-determinism is supported in the language by allowing more than one answer. In the traditional refinement calculus for imperative programs, there is another form of non-determinism, called “don't care” (or demonic) non-determinism, which allows non-determinism to be eliminated during refinement. Thus, non-deterministic specifications can be refined to determ...