[GAP Forum] orbits...

Stefan Kohl kohl at mathematik.uni-stuttgart.de
Thu Jul 8 11:26:51 BST 2004


Dear Forum,

Michael Hartley wrote:

> On another topic - suppose I want a representative of each orbit of
> group acting on a set, without actually finding the whole orbits?
> Specifically, I am trying to get Automorphism classes of involutions of
> a group.
> 
> So far, I do this :
> 
> AutomorphismClassesInvolutions := function(grp) # should probably be
> called AutomorphismClassRepresentativeInvolutions.
>    local ss,inv,cr,au;
>    au := AutomorphismGroup(grp);   # find the automorphism group
>    ss := SylowSubgroup(grp,2);       # find a sylow 2-subgroup ss
>    inv := Filtered(Elements(ss),x -> Order(x) = 2);   # get the
> involutions in ss
>    cr := List(Orbits(au,inv),Representative);   # get representatives
> of the orbits of the involutions under the automorphism group.
>    return cr;
> end;
> 
> Note that the last line before the return will actually compute the
> whole Orbit.
> 
> I really just want a representative from each orbit. Or is there a
> faster way to get the involutions??

Of course there is a faster way to get the involutions -- you can
use `ConjugacyClasses' to compute the conjugacy classes of your
group, and then check which conjugacy classes of involutions are fused
under outer automorphisms. You might try the following -- of course
significant algorithmic improvements are possible depending on the
representation of your groups, and it may happen for various reasons
that you can save the work of actually computing the automorphism
group, thus the following is just a `general purpose' approach:

AutomorphismClassRepresentativeInvolutions := function ( G )

local  ccl, rep, A, autgen, outer, pos, Out, orb, i;

  ccl    := Filtered( ConjugacyClasses( G ),
                      cl -> Order( Representative( cl ) ) = 2 );
  if Length( Set ( List( ccl, Size ) ) ) = Length( ccl )
  then return List( ccl, Representative ); fi;
  rep    := List( ccl, Representative );
  A      := AutomorphismGroup( G );
  autgen := GeneratorsOfGroup( A );
  outer  := Filtered( autgen, a -> not IsInnerAutomorphism( a ) );
  Out := Group(()); pos := [ ];
  for i in [ 1 .. Length( outer ) ] do
    pos[i] := List([ 1 .. Length( ccl ) ],
                   j -> Position(List(rep,g->IsConjugate(G,g,Image(outer[i],
                                                                   rep[j]))),
                                 true));
    Out := ClosureGroup( Out, SortingPerm( pos[ i ] ) );
  od;
  return List( Orbits( Out, [ 1 .. Length( ccl ) ] ),
               orb -> Representative( ccl[ orb[ 1 ] ] ) );
end;

Hope this helps,

    Stefan Kohl




More information about the Forum mailing list