Constructing PGL as permutations and matrices

Keywords: Projective Action


Alexander Hulpke (


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.


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;
gap> g:=GL(2,q);

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

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

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);
gap> a in pgl;
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);

Back to the GAP QA list