> < ^ From:

< ^ Subject:

Dear GAP Forum:

Regarding my problem with a graphic lattice for conjugacy classes

of subgroups, I see now much clearer. I still don't know why XGAP

stalls on my example, but I realize now that GraphicLatticeRecord

is invoked, and for GraphicLatticeRecord no mouse button menus

are installed, and nor is the relabel entry in the CleanUp menu.

So without additional programming GraphicLatticeRecord won't do

the job. Meanwhile, I found a different solution, however.

I have modified my copy of XGAP library file glatgrp.g.

Routine GroupOps.GraphicLattice now checks for the presence of an

optional argument "conjugacy classes". If present, it sets the

operations record of the sheet it returns to ConjugacyClassLatticeOps,

instead of GraphicLatticeOps. ConjugacyClassLatticeOps basically is

a copy of GraphicLatticeOps, except for three routines which I have

modified:

1) In ConjugacyClassLatticeOps.MakeLattice, I set all class lengths to 1:

sheet.init.classLengths := List( sheet.classes, x -> 1 );

2) In ConjugacyClassLatticeOps.MakeMenus, the subgroups menu is NOT

installed, as its use is potentially dangerous. It could be added

again after the routines it calls have been adapted to the new

situation (e.g., when asking for the normalizer of a conjugacy

class of subgroups, return the conjugacy class of the normalizer

of any representative).

3) The routine ConjugacyClassLatticeOps.MakeMaximalSubgroups has been

rewritten. It returns the initial setup for the ConjugacyClassLattice:

ConjugacyClassLatticeOps.MakeMaximalSubgroups := function ( sheet ) local maxs, # maximals (result) lat, # lattice rel, # maximal subgroup relation (for reps) rep, # representative of a class reps, # representatives of classes i; # loop variable

# get the maximals relation

lat := sheet.lattice;

rel := lat.operations.MaximalSubgroups( lat );# now construct the maximals relation for conjugacy classes

# class 1 (trivial subgroup) has no maximals

for i in [2..Length(lat.classes)] do

rel[i] := Set( List( rel[i], pair -> pair[1] ) );

od;# construct the initial setup maxs := []; for i in [ 1 .. Length(lat.classes) ] do rep := lat.classes[i].representative; maxs[i] := [ i, Size( rep ), rel[i], i, 1]; od; reps := [1..Length(lat.classes)];

# assign the result sheet.init.vertices := maxs; sheet.init.reps := reps; end;

This solution works quite nicely. If there is interest, I'd be happy

to make the details of my modifications available. Perhaps the

developers wish to include the new option in the official version -

provided my modifications do not cause any unwanted side effects,

which I might have overlooked.

Best regards,

Franz G"ahler

> < [top]