First of all: how is the operator “{}” really called? The documentation ist not very good at answering this.
I call it powerset operator because it creates a powerset of all elements.
{ z(1) ; z(2)}.
Creates the output:
$ clingo 001.lp 0
clingo version 5.4.1
Reading from 001.lp
Solving...
Answer: 1
Answer: 2
z(2)
Answer: 3
z(1)
Answer: 4
z(1) z(2)
SATISFIABLE
Models : 4
Calls : 1
Time : 0.000s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.000s
When I constrict the cardinality to 0, 1 or 2 elements by writing:
{ z(1) ; z(2)} = cardinality.
then I get the output
$ clingo 002.lp -c cardinality=0 0
clingo version 5.4.1
Reading from 002.lp
Solving...
Answer: 1
SATISFIABLE
Models : 1
Calls : 1
Time : 0.000s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.000s
$ clingo 002.lp -c cardinality=1 0
clingo version 5.4.1
Reading from 002.lp
Solving...
Answer: 1
z(1)
Answer: 2
z(2)
SATISFIABLE
Models : 2
Calls : 1
Time : 0.000s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.000s
$ clingo 002.lp -c cardinality=2 0
clingo version 5.4.1
Reading from 002.lp
Solving...
Answer: 1
z(2) z(1)
SATISFIABLE
Models : 1
Calls : 1
Time : 0.001s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.001s
This is all easy understandable so far.
Lets go to a different notation with a similar result:
{ z(Y) } :- Y=(1;2).
$ clingo 003.lp 0
clingo version 5.4.1
Reading from 003.lp
Solving...
Answer: 1
Answer: 2
z(1)
Answer: 3
z(2)
Answer: 4
z(2) z(1)
SATISFIABLE
Models : 4
Calls : 1
Time : 0.000s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.000s
But when I constrain this construct
{ z(Y) } = cardinality :- Y=(1;2).
then I get:
$ clingo 004.lp -c cardinality=0 0
clingo version 5.4.1
Reading from 004.lp
Solving...
Answer: 1
SATISFIABLE
Models : 1
Calls : 1
Time : 0.000s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.000s
$ clingo 004.lp -c cardinality=1 0
clingo version 5.4.1
Reading from 004.lp
Solving...
Answer: 1
z(2) z(1)
SATISFIABLE
Models : 1
Calls : 1
Time : 0.001s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.001s
$ clingo 004.lp -c cardinality=2 0
clingo version 5.4.1
Reading from 004.lp
Solving...
UNSATISFIABLE
Models : 0
Calls : 1
Time : 0.001s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.001s
I have at this point no idea what actually happens and what it is good for.
Thanks in advance for your answers.
1