# [GAP Forum] Re: Forum Digest, Vol 8, Issue 3

Michael Hartley Michael.Hartley at nottingham.edu.my
Wed Jul 14 03:54:19 BST 2004

```Dear Stefan,

Thanks. I'll try your method and see if it works out as more
efficiently.

Yours, Mike H...

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 :
> [snip]
> 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

```