  Aggregation functions are widely used in answer set programming for
representing and reasoning on knowledge involving sets of objects collectively.
Current implementations simplify the structure of programs in order to optimize
the overall performance. In particular, aggregates are rewritten into simpler
forms known as monotone aggregates. Since the evaluation of normal programs
with monotone aggregates is in general on a lower complexity level than the
evaluation of normal programs with arbitrary aggregates, any faithful
translation function must introduce disjunction in rule heads in some cases.
However, no function of this kind is known. The paper closes this gap by
introducing a polynomial, faithful, and modular translation for rewriting
common aggregation functions into the simpler form accepted by current solvers.
A prototype system allows for experimenting with arbitrary recursive
aggregates, which are also supported in the recent version 4.5 of the grounder
\textsc{gringo}, using the methods presented in this paper.
  To appear in Theory and Practice of Logic Programming (TPLP), Proceedings of
ICLP 2015.
