Dear Robert, Mike, Ralf, since I was asked to, I'll try to clarify my ideas to marry finite group actions with species. Actually, I believe that most of what we would need is implemented in Symmetrica, and that species are mostly just another language to formulate problems in combinatorial generation.
-- skip this if you know species ---------------------------------------------- Why bother with species? One strong point of species is that it provides us with a very intuitive language to describe many combinatorial objects. For example, binary trees are just B = 1 + B*X*B read: a binary tree is either the empty tree or two trees attached to a vertex. In the equation above, 1, X and B are species, and + and * are operations on species. Thus we can build more interesting species from very simple ones, by using a few operations, the more important ones being: +, *, composition (AKA as plethystic substitution), pointing, functorial composition. In the traditional description of combinatorial species, one desire was to unify tools for labelled and unlabelled objects. This is achieved by having two "versions" of all the operations +, *, ... Really, what is happening is that one lets the symmetric group act on the labels of the object and generates the isomorphism types. ------------------------------------------------------------------------------- Why general isomorphism types? Now, it turned out that for implementing the unlabelled version of plethystic substitution, one actually needs the ability to generate isomorphism types of objects where a Young subgroup S_n1 x S_n2 x ... acts on the labels. This was done in aldor combinat (in the iso-experiment branch). Next, I wanted to implement the unlabelled version of functorial composition (to generate unlabelled graphs, for example), and it turned out that I need the ability to generate isomorphism types of objects under yet another family of group actions. Since we want both plethystic and functorial substitution, we actually need to be able to generate iosomorphism types of objects under an *arbitrary* group action. ------------------------------------------------------------------------------- What we need and how to do it? Basically, we need for every species a function (in Pseudo-Aldor notation, but it should be very similar in Sage) isomorphismTypes(U: Set, H: Subgroup of S_U) that returns representatives of the objects labelled with the elements in U under the group action given by H. I guess, that it's easiest to describe H as a list of generators, but that's not so important for now. (It will probably be important for speed, though) .. two basic species .......................................................... Now, there are not many Species that we need. Actually, to get started we only need implementations for the species of k-Subsets and the species of set partitions. The species of k-Subsets produces for every set U all subsets of U with k elements. I have no idea whether this is feasible with Roberts code, but it is available in symmetrica, see http://www.mathe2.uni-bayreuth.de/frib/html/symman/manual_37.html The species of set partitions is probably more complicated, it is already quite complicated when the group acting is a Young subgroup S_n1 x S_n2 x ... But maybe Robert's code could help here. Of course, there are other species for which we would like to have implementations, for example, the species of cycles. Curiously, cycles and necklaces (which are cycles under the action of a Young subgroup) can themselves be described as mappings Y^X under the action of the cyclic group (acting on X). I didn't check, but I guess that arbitrary actions on cycles fall in the same framework. .. and a few operations ....................................................... Given implementations for k-subsets and set partitions, it is straightforward to implement all the operations I mentioned before, the trickiest probably being plethystic composition. Actually, the algorithms for + and * stay exactly as they are. I guess that for plethystic composition one can reuse the one in aldor-combinat. --- speed --------------------------------------------------------------------- Very likely, using this very general framework imposes a speed penalty. But I believe that it's better to have something working, albeit slow, than to try to get something fast immediately. ------------------------------------------------------------------------------- I'm not sure whether this makes my idea clearer in comparison to http://groups.google.com/group/sage-combinat-devel/browse_thread/thread/a8bed1604cc6053a?hl=en But maybe it's now easier to pinpoint things that are unclear. If you could send me an example that shows how to call all_orbits_right(g,m,v) from symmetrica, maybe I could provide some code. Martin ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Aldor-combinat-devel mailing list Aldor-combinat-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/aldor-combinat-devel