> < ^ Date: Mon, 11 Mar 1996 17:50:57 +0100
> < ^ From: Franz Gaehler <gaehler@itap.physik.uni-stuttgart.de >
> ^ Subject: GraphicLattice for Conjugacy Classes?

Dear GAP Forum:

I have been experimenting with XGAP, and I am very impressed how easy
it is to extract information about subgroups and the subgroup structure
of a group. However, with larger groups the Hasse diagram returned by
GraphicLattice quickly becomes very complicated. One possible solution
to this problem is to look at sublattices by means of InteractiveLattice.

I would like to suggest an other solution here, which might be provided
as a further option. The Hasse diagram would often be greatly simplified
if vertices belonging to the same conjugacy class of subgroups could be
merged. Vertices would then correspond to conjugacy classes of subgroups,
and two vertices would be connected if one conjugacy class contains
subgroups having maximal subgoups in the other conjugacy class. Having
such a graph, one could then still inquire (with the right mouse button

In XGAP library file glatlist.g it is claimed that:

```##  'GraphicLattice( <rec>[, <x>, <y>][, "prime"] )
##  ------------------------------------------------
##
##  'GraphicLattice' draws the lattice described by a record containing:
##
##  'vertices':
##    a list of objects
##
##  'classPositions':
##    A pair '[<c>,<p>]', where <c> is a class number and <p> is the position
##    in this  class    meaning  that  vertex number    <i>   lies in   class
##    'classes[<i>]' at position 'classes[<i>]'.
##
##  'sizes':
##    a list of sizes
##
##  'maximals':
##    a list of maximals
##
##  an example
##  ----------
##
##  MyLattice := rec(
##    vertices := [ 1 .. 7 ],
##    maximals := [ , , [4,6,7], [], [], , [] ],
##    classPositions := [ [1,1], [2,1], [3,1], [4,1], [5,1], [6,1], [4,2] ]
##  );
```

Well, I tried it. I also added a further record field called sizes,
which is mentioned elsewhere, and which makes the graph much nicer.
It almost works, but not quite. Here is an example:

a5:=AlternatingGroup(5);
l:=Lattice(a5);;
SetPrintLevel(l,2); l;

vert:=List(l.classes, x -> x.representative);

# I take the first representative in each conjugacy class
pos:=[]; for i in [1..Length(vert)] do Add(pos,[i,1]); od;

drop:=function(x)
if Length(x)=0 then return x; else return List(x,y->y); fi;
end;
max:=List(List(l.maximalSubgroups,drop),z->Set(z));

sz:=List([1..Length(vert)],z->Size(l.classes[z].representative));

lat:=rec(vertices:=vert, maximals:=max, classPositions:=pos, sizes:=sz);

Upon calling GraphicLattice, after drawing the vertices XGAP stalls:

gap> GraphicLattice(lat);
Error, String: cannot convert function ( obj )
Print( obj.name );
end into a string in
String( record.(nam) ) called from
StringRec( obj ) called from
String( record.(nam) ) called from
StringRec( obj ) called from
String( record.(nam) ) called from
...
brk> quit;

If I set lat.vertices:=[1..Length(l.classes)]; and call GraphicLattice(lat)
again, I get a nice graph - but that's it. Of course, since vertices now
correspond just to numbers, there is not much to inquire about them.
However, I also cannot relable the vertices, because that menu option
is missing.

It is most likely that I have been abusing features that are not yet
official or not yet finished, but here is my question anyway:

How can I tweak the records read by GraphicLattice (and which are these?)
so that all information GraphicLattice needs is there, and the initial
graph is displayed? And what can I do that the usual menus are enabled
so that I can relabel vertices, and inquire about properties of a subgroup
a vertex points to?

If this is not feasible in the present version, I hope that at least
in some future version I can type something like

GraphicLattice(g, "ConjugacyClasses");

and, perhaps,

InteractiveLattice(g, "ConjugacyClasses");

Best regards,

Franz G"ahler

> < [top]