> < ^ Date: Mon, 20 Nov 1995 22:38:00 +0100 (MET)
> < ^ From: Martin Schoenert <martin.schoenert@math.rwth-aachen.de >
< ^ Subject: Re: PreImagesRepresentative
```Claude Quitte wrote in his e-mail message of 1995/11/18
```

Here a problem with the function "PreImagesRepresentatives" wich
returns "false" instead of an antecedent (which exists !).

...definition of PGL2Fq and K ommited...

K_Left_Cosets := LeftCosets(PGL2Fq, K) ;
Operation_Of_PGL2Fq_On_K_Left_Cosets := Operation(
PGL2Fq, K_Left_Cosets, OnLeft) ;
perm := OperationHomomorphism(
PGL2Fq, Operation_Of_PGL2Fq_On_K_Left_Cosets) ;

The problem is that 'PGL2Fq' does *not* operate on the left cosets via
'OnLeft' (because 'OnLeft(OnLeft(<cos>,<g1>),<g2>) = <g2>*<g1>*<cos>',
which is different from '<g1>*<g2>*<cos> = OnLeft(<cos>,<g1>*<g2>)').
Note that 'Operation' does not check whether one really has an operation,
because this is too expensive in general.

We will probably rename 'OnLeft' to something like 'OnLeftAntiOperation'
and add the following function 'OnLeftInverse' in a future release.

```OnLeftInverse := function ( pnt, g )
return g^-1 * pnt;
end;
```

If you really want to find an element of 'PGL2Fq' that permutes the left
cosets of 'K' in a prescribed way by multiplication from the left (in
this example exchanging the first and fourth coset), you should use

Operation_Of_PGL2Fq_On_K_Left_Cosets := Operation(
PGL2Fq, K_Left_Cosets, OnLeftInverse) ;
perm := OperationHomomorphism(
PGL2Fq, Operation_Of_PGL2Fq_On_K_Left_Cosets) ;

and then you must take the inverse of the preimage of course

```gap> PreImagesRepresentative(perm, (1,4,2)) ^-1 ;
FactorGroupElement( C, [ [ Z(5)^2, Z(5)^0 ], [ Z(5)^2, 0*Z(5) ] ] )
gap> PreImagesRepresentative(perm, (1,4)) ^-1 ;
FactorGroupElement( C, [ [ Z(5)^0, Z(5)^0 ], [ Z(5), Z(5)^2 ] ] )
```

Alternatively you could use right cosets instead of left cosets and
'OnRight' instead of 'OnLeft'. (GAP calculates left cosets by computing
right cosets and inverting representatives anyway).

As a final hint, if you plan to do a lot of computations with a matrix
group or even a factor group of a matrix group like PGL_2(F_q), it is
advisable to replace this group by an isomorphic permutation group
together with an isomorphism back to the matrix group. For example, take
the action of GL_2(5) on lines (i.e., projective points).

```gap> G := GL( 2, 5 );
GL(2,5)
gap> v := [1,0] * GF(5).one;
[ Z(5)^0, 0*Z(5) ]
gap> orb := Orbit( G, v, OnLines );;
gap> P := Operation( G, orb, OnLines );
Group( (2,3,5,6), (1,2,4)(3,6,5) )
gap> hom := OperationHomomorphism( G, P );
OperationHomomorphism( GL(2,5), Group( (2,3,5,6), (1,2,4)(3,6,5) ) )
gap> Kernel( hom );
Subgroup( GL(2,5), [ [ [ Z(5), 0*Z(5) ], [ 0*Z(5), Z(5) ] ] ] )
```

Now you can use the homomorphism functions to convert between matrices in
GL_2(5) and permutations in the permutation group isomorphic to PGL_2(5).

Hope this helps,

Martin.

```-- .- .-. - .. -.  .-.. --- ...- . ...  .- -. -. .. -.- .-
Martin Sch"onert,   Martin.Schoenert@Math.RWTH-Aachen.DE,   +49 241 804551
Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany
```

> < [top]