  We introduce a new flexible paradigm of grounding and solving in Answer Set
Programming (ASP), which we refer to as multi-shot ASP solving, and present its
implementation in the ASP system clingo.
  Multi-shot ASP solving features grounding and solving processes that deal
with continuously changing logic programs. In doing so, they remain operative
and accommodate changes in a seamless way. For instance, such processes allow
for advanced forms of search, as in optimization or theory solving, or
interaction with an environment, as in robotics or query-answering. Common to
them is that the problem specification evolves during the reasoning process,
either because data or constraints are added, deleted, or replaced. This
evolutionary aspect adds another dimension to ASP since it brings about state
changing operations. We address this issue by providing an operational
semantics that characterizes grounding and solving processes in multi-shot ASP
solving. This characterization provides a semantic account of grounder and
solver states along with the operations manipulating them.
  The operative nature of multi-shot solving avoids redundancies in relaunching
grounder and solver programs and benefits from the solver's learning
capacities. clingo accomplishes this by complementing ASP's declarative input
language with control capacities. On the declarative side, a new directive
allows for structuring logic programs into named and parameterizable
subprograms. The grounding and integration of these subprograms into the
solving process is completely modular and fully controllable from the
procedural side. To this end, clingo offers a new application programming
interface that is conveniently accessible via scripting languages.
