How do aggregates work?
A sum aggregate consists of a set of elements consisting of a tuple together with a condition and a guard. Whenever the condition of an element is true wrt an answer set, its associated tuple contributes a value to a set. Hence, if two equal tuples have true conditions, then only one value is provided.
Consider for example the program
{a; b; c}.
:- #sum { 2,p : a; 1,q : a
; 1,q : b; 2,r : b
; 2,r : c; 1,s : c
} < 6.
If a
and b
are true, the values of tuples (2,p)
, (1,q)
, and (2,r)
are summed up.
Hence, the sum aggregate evaluates to 5
.
Note that the value of tuple (1,q)
provided by the second and third element of the sum aggregate is counted only once.
If a
and c
are true, the values of tuples (2,p)
, (1,q)
, (2,r)
, and (1,s)
are summed up.
Hence, the sum aggregate evaluates to 6
and {a, c}
is an answer set of the program.
In fact, there are only two answer sets: {a, c}
and {a, b, c}
.
Accumulation in #sum+
, #min
, and #max
aggregates as well as #minimize
and #maximize
constraints works the same.