Category Archives: Answer Set Programming

The use of recursive aggregates in Answer Set Programming (ASP) was so far limited because current solvers only deal with monotone aggregates. The grounder is thus in charge for rewriting aggregates into the more constrained form accepted by solvers. However, until now, no rewriting that correctly transform non-convex aggregates was known. This is going to change soon! Give a try to this script on my GitHub. File README, reported below, should give enough information on how to use the script.

$ ./f-aggregates.py --help-syntax
The syntax is almost conformant to ASP Core 2.0, with the exception of aggregates.
Moreover, predicates starting with the prefix 'f_' are reserved for internal use
and must not be used by the user. Remember also to not hide them!
Supported aggregates are COUNT, SUM, AVG, MIN, and MAX. Aggregate sets are
declared by means of predicate f_set/3, where:
- the first argument is the ID of an aggregate;
- the second argument is an integer;
- the third argument is an atom.
The second argument is optional, with default value 1.
A COUNT aggregate can be added in a rule body by using predicate f_count/3, where:
- the first argument is the ID of an aggregate;
- the second argument is a comparator among ">=", ">", "<=", "<", "=", "!=";
- the third argument is an integer.
Aggregates SUM, AVG, MIN, and MAX are similar, and use predicates f_sum/3, f_avg/3,
f_min/3, and f_max/3.
Remember that COUNT is applied on true atoms in the aggregate set, while SUM, AVG,
MIN, and MAX are applied on the multiset of integers associated with true atoms in
the aggregate set.
Variables can be used taking into account the previous description.

$ ./f-aggregates.py --help-syntax
The syntax is almost conformant to ASP Core 2.0, with the exception of aggregates.
Moreover, predicates starting with the prefix 'f_' are reserved for internal use
and must not be used by the user. Remember also to not hide them!
Supported aggregates are COUNT, SUM, AVG, MIN, and MAX. Aggregate sets are
declared by means of predicate f_set/3, where:
- the first argument is the ID of an aggregate;
- the second argument is an integer;
- the third argument is an atom.
The second argument is optional, with default value 1.
A COUNT aggregate can be added in a rule body by using predicate f_count/3, where:
- the first argument is the ID of an aggregate;
- the second argument is a comparator among ">=", ">", "<=", "<", "=", "!=";
- the third argument is an integer.
Aggregates SUM, AVG, MIN, and MAX are similar, and use predicates f_sum/3, f_avg/3,
f_min/3, and f_max/3.
Remember that COUNT is applied on true atoms in the aggregate set, while SUM, AVG,
MIN, and MAX are applied on the multiset of integers associated with true atoms in
the aggregate set.
Variables can be used taking into account the previous description.