Q:

symmetry breaking predicates in Alloy

Say I have a simple model as follows:
    sig P{r:some P}
    sig Q{}
 run {} for 2 P, 2 Q
Does anyone here know how alloy generates symmetry breaking predicates to reduce the number of instances for this model?  

A:

Alloy itself relies on another relational model finder called Kodkod as its backend.  Kodkod generates symmetry breaking predicates using a technique called greedy base partitioning, which is detailed in Emina Torlak's thesis (chapter 3):
http://people.csail.mit.edu/emina/pubs/kodkod.phd.pdf

