Monotonic predicates can be debugged by applying declarative reasoning.
In pure Prolog, a programming mistake can lead to one or all of the following phenomena:
As an example, consider how we can debug case (2) by declarative reasoning: We can systematically remove goals of the predicate's clauses and see if the query still fails. In monotonic code, removing goals can at most make the resulting program more general. Hence, we can pinpoint errors by seeing which of the goals leads to the unexpected failure.