Disjunctive Logic Programming (DLP) under the answer set semantics is an advanced formalism for knowledge representation and reasoning. It is generally considered more expressive than normal (disjunction-free) Logic Programming, whose expressiveness is limited to properties decidable in NP.
However, this higher expressiveness comes at a computational cost, and while there are several efficient systems for the normal case, we are only aware of few solid implementations for full DLP.
In this paper we investigate novel techniques to couple two main modules (a model generator and a model checker) commonly found in DLP systems more tightly. Instead of using the checker only as a boolean oracle, in our approach, upon a failed check it also returns a so-called unfounded set. Intuitively, this set explains why a model candidate is not an answer set, and the generator employs this knowledge to backtrack until that set is no longer unfounded, which is vastly more efficient than employing full-fledged model checks to control backtracking.
Furthermore, we invoke the checker not only for actual model candidates, but also on partial models during model generation to possibly prune the search space.
We implemented these approaches in DLV, a state-of-the-art implementation of DLP according to recent comparisons, and carried out experiments; tests on hard benchmark instances show a significant speedup of a factor of two and above.