public static void main(String[] args) {
   DefaultRule a = new DefaultRule(Clause.parse("a(X)"), Clause.parse("a(Y)"));
   DefaultRule b = new DefaultRule(Clause.parse("a(A)"), Clause.parse("a(B)"));
   DefaultRule c = new DefaultRule(Clause.parse("a(A)"), Clause.parse("a(A)"));
   DefaultRule d = new DefaultRule(Clause.parse("a(A,a)"), Clause.parse("b(B,b)"));
   DefaultRule e = new DefaultRule(Clause.parse("a(A,b)"), Clause.parse("b(B,a)"));
   DefaultRule f = new DefaultRule(Clause.parse("a(A,c)"), Clause.parse("b(B,d)"));
   for (DefaultRule r : selectNonisomorphicDefaultRules(Sugar.list(a, b, c, d))) {
     System.out.println(r);
   }
   System.out.println(
       partitionInterchangeableConstants(Sugar.list(a, b, c, d, e, f), Sugar.<Clause>set()));
 }