#### GAP QA #5

# Constructing PGL as permutations and matrices

**Keywords:**
Projective Action
## Respondent:

Alexander Hulpke (
hulpke@math.colostate.edu)
## Question:

I want to use GAP(4r2) with grape to to construct a CayleyGraph

for the group PGL(2,q). My generators are a set of matrices of the

form [[a*Z(q)^0, b*Z(q)^0], [c*Z(q)^0, d*Z(q)^0]] which are Elements

of PGL(2,q).

When I create the PGL by
gap> Pgl:=PGL(2,q);

it seems, that I get an isomorphic permutation group.
gap> P:=PGL(IsMatrixGroup,2,13);

seems not to work. Also, if I do something like
gap> G:=GL(2,13);
gap> c:=Center(Gl);
gap> P:=FactorGroup(Gl,c);

I get again an isomorphic permutation group.

Now my question: How can I find the proper homomorphism to convert

the generators from the form [[a*Z(q)^0, b*Z(q)^0], [c*Z(q)^0, d*Z(q)^0]]

to a form suitable for the isomorphic permutation group representation

that is used by GAP for the PGL in order to use them with the

CayleyGraph-Function from grape.
## Answer:

What you need is hidden inside the function that creates PGL, to get the

correspondence you have to create the action of GL on lines by hand:

Lets take for example PGL(2,9) (but of course other `q' work the same.

First create GL(2,9):
gap> q:=9;
9
gap> g:=GL(2,q);
GL(2,9)

Next create the permutation domain. This is the set of all lines. GAP can

represent these by normed (first nonzero component is 1) vectors and since

we know that GL acts transitively on these we can construct them from one

vector:
gap> vec1:=[1,0]*Z(q)^0;
[ Z(3)^0, 0*Z(3) ]
gap> orb:=Orbit(g,vec1,OnLines);;
gap> Length(orb);
10

Now we create PGL as the permutation action on this orbit (if you look at

the code which creates PGL internally this is also what it does):
gap> act:=ActionHomomorphism(g,orb,OnLines);
<action homomorphism>
gap> pgl:=Image(act);
Group([ (2,3,5,7,10,9,6,8), (1,2,4)(3,6,9)(5,8,7) ])

Now we have PGL, but we also have the homomorphism `act' that can be used to

translate between matrices and permutations.

Just note that the homomorphism is not injective, so you will have to use

`PreImagesRepresentative' to get a matrix from a permutation
gap> a:=(1,10)(2,7)(3,4)(5,9);
(1,10)(2,7)(3,4)(5,9)
gap> a in pgl;
true
gap> PreImagesRepresentative(act,a);
[ [ Z(3^2)^2, Z(3^2)^2 ], [ Z(3^2)^3, Z(3^2)^6 ] ]

while `Image' will work for matrices:
gap> Image(act,mat);
(1,2,10,4)(5,9,6,8)

### Back
to the GAP QA list