  We introduce a stepping methodology for answer-set programming (ASP) that
allows for debugging answer-set programs and is based on the stepwise
application of rules. Similar to debugging in imperative languages, where the
behaviour of a program is observed during a step-by-step execution, stepping
for ASP allows for observing the effects that rule applications have in the
computation of an answer set. While the approach is inspired from debugging in
imperative programming, it is conceptually different to stepping in other
paradigms due to non-determinism and declarativity that are inherent to ASP. In
particular, unlike statements in an imperative program that are executed
following a strict control flow, there is no predetermined order in which to
consider rules in ASP during a computation. In our approach, the user is free
to decide which rule to consider active in the next step following his or her
intuition. This way, one can focus on interesting parts of the debugging search
space. Bugs are detected during stepping by revealing differences between the
actual semantics of the program and the expectations of the user. As a solid
formal basis for stepping, we develop a framework of computations for
answer-set programs. For fully supporting different solver languages, we build
our framework on an abstract ASP language that is sufficiently general to
capture different solver languages. To this end, we make use of abstract
constraints as an established abstraction for popular language constructs such
as aggregates. Stepping has been implemented in SeaLion, an integrated
development environment for ASP. We illustrate stepping using an example
scenario and discuss the stepping plugin of SeaLion. Moreover, we elaborate on
methodological aspects and the embedding of stepping in the ASP development
process.
