> < ^ From:

> ^ Subject:

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

menu) about properties of subgroups which are class functions.

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>][1]' at position 'classes[<i>][2]'. ## ## 'sizes': ## a list of sizes ## ## 'maximals': ## a list of maximals ## ## an example ## ---------- ## ## MyLattice := rec( ## vertices := [ 1 .. 7 ], ## maximals := [ [3], [3], [4,6,7], [], [], [5], [] ], ## 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[1]); 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]