Dear GAP-forum,
Many people are using GRAPE to study Cayley graphs, and I am often
asked how to construct Cayley graphs in GRAPE. My answer is "use the
wonderfully general Graph function in GRAPE". Everyone who uses
GRAPE should learn this function well, as it's usually the one to use
when the question is "how do I construct an XXX-type graph?".
So below, I enclose an example for the construction of a Cayley graph.
Suppose G is a group, and gens a generating list of elements of
G. Then to construct in caygraph the Cayley graph for G such that
x is joined to y iff there is a g in gens with y=g*x,
the following statement will do:
caygraph := Graph(G, Elements(G), OnRight, function(x,y) return ForAny(gens,g->y=g*x); end, true);
Note that caygraph.group comes from the right regular action of
G as a group of automorphisms of the Cayley graph constructed. It is
a good idea to use the statement:
StabChain(caygraph.group,rec(size:=caygraph.order));
to make efficiently a stabilizer chain for caygraph.group of known
order (= the number of vertices of caygraph).
Finally, if gens is not closed under inversion, but you want the
underlying undirected graph of caygraph, then set:
caygraph:=UnderlyingGraph(caygraph);
Hope this is useful,
Leonard Soicher.
P.S. As always, I want to hear about applications of GRAPE, especially
publications referencing GRAPE. The reference for GRAPE is:
L.H.~Soicher, {\sf GRAPE}: a system for computing with graphs and
groups, in {\it Groups and Computation}, L.~Finkelstein and
W.M.~Kantor, eds., DIMACS Series in Discrete Mathematics and
Theoretical Computer Science {\bf 11}, A.M.S., 1993, pp.~287--291.
GRAPE is freely available for non-commercial, non-military use.