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())); }