5 Projective Groups

A *collineation* of a projective space is a type preserving bijection of the elements of the projective space, that preserves incidence. The Fundamental Theorem of Projective Geometry states that every collineation of a Desarguesian projective space of dimension at least two is induced by a semilinear map of the underlying vector space. The group of all linear maps of a given \(n+1\)-dimensional vector space over a given field \(\mathrm{GF}(q)\) is denoted by \(\mathrm{GL}(n+1,q)\). This is a matrix group consisting of all non-singular square \(n+1\)-dimensional matrices over \(\mathrm{GF}(q)\). The group of all semilinear maps of the vector space \(V(n+1,q)\) is obtained as the semidirect product of \(\mathrm{GL}(n+1,q)\) and \(\mathrm{Aut}(\mathrm{GF}(q))\), and is denoted by \(\Gamma\mathrm{L}(n+1,q)\). Each semilinear map induces a collineation of \(\mathrm{PG}(n,q)\). The Fundamental theorem of Projective Geometry also guarantees that the converse holds. Note also that \(\Gamma\mathrm{L}(n+1,q)\) does not act faithfully on the projective points, and the kernel of its action is the group of scalar matrices, \(\mathrm{Sc}(n+1,q)\). So the group \(\mathrm{P}\Gamma\mathrm{L}(n+1,q)\) is defined as the group \(\Gamma{}\mathrm{L}(n+1,q) / \mathrm{Sc}(n+1,q)\) , and the group \(\mathrm{PGL}(n+1,q)\) as \(\mathrm{GL}(n+1,q) / \mathrm{Sc}(n+1,q)\) . An element of the group \(\mathrm{PGL}(n+1,q)\) is also called a *projectivity* or *homography* of \(\mathrm{PG}(n,q)\), and the group \(\mathrm{PGL}(n+1,q)\) is called the *projectivity group* or *homography group* of \(\mathrm{PG}(n,q)\). An element of \(\mathrm{P}\Gamma\mathrm{L}(n+1,q)\) is called a *collineation* of \(\mathrm{PG}(n,q)\) and the group \(\mathrm{P}\Gamma\mathrm{L}(n+1,q)\) is the *collineation group* of \(\mathrm{PG}(n,q)\).

As usual, we also consider the special linear group \(\mathrm{SL}(n+1,q)\), which is the subgroup of \(\mathrm{GL}(n+1,q)\) of all matrices having determinant one. Its projective variant, i.e. \(\mathrm{PSL}(n+1,q)\) is defined as \(\mathrm{SL}(n+1,q) / (\mathrm{SL}(n+1,q) \cap \mathrm{Sc}(n+1,q))\) and is called the *special homography group* or *special projectivity group* of \(\mathrm{PG}(n,q)\).

Consider the projective space \(\mathrm{PG}(n,q)\). As described in Chapter 4, a point of \(\mathrm{PG}(n,q)\) is represented by a row vector. A \(k\)-dimensional subspace of \(\mathrm{PG}(n,q)\) is represented by a generating set of \(k+1\) points, and as such, by a \((k+1) \times (n+1)\) matrix. The convention in **FinInG** is that a collineation \(\phi\) with underlying matrix \(A\) and field automorphism \(\theta\) maps the projective point represented by row vector \((x_0, x_1, \ldots, x_n)\) to the projective point represented by row vector \((y_0,y_1,\ldots,y_n) = ((x_0, x_1, \ldots, x_n) A)^{\theta}\). This convention determines completely the action of collineations on all elements of a projective space, and it follows that the product of two collineations \(\phi_1,\phi_2\) with respective underlying matrices \(A_1,A_2\) and respective underlying field automorphisms \(\theta_1,\theta_2\) is the collineation with underlying matrix \(A_1 \cdot A_2^{\theta_1^{-1}}\) and underlying field automorphism \(\theta_1 \theta_2\) .

A *correlation* of the projective space \(\mathrm{PG}(n,q)\) is a collineation from \(\mathrm{PG}(n,q)\) to its dual. A projectivity from \(\mathrm{PG}(n,q)\) to its dual is sometimes called a *reciprocity*. The *standard duality* of the projective space \(\mathrm{PG}(n,q)\) maps any point \(v\) with coordinates \((x_0,x_1,\ldots,x_n)\) on the hyperplane with equation \(x_0X_0 + x_1X_1 + \cdots + x_nX_n\) . The standard duality acts as an automorphism on \(\mathrm{P}\Gamma\mathrm{L}(n+1,q)\) by mapping the underlying matrix of a collineation to its inverse transpose matrix. (Recall that the frobenius automorphism and the standard duality commute.) The convention in **FinInG** is that a correlation \(\phi\) with underlying matrix \(A\) and field automorphism \(\theta\) maps that projective point represented by row vector \((x_0, x_1, \ldots, x_n)\) to the projective hyperplane represented by row vector \((y_0,y_1,\ldots,y_n) = ((x_0, x_1, \ldots, x_n) A)^{\theta.}\) , i.e. \((y_0,y_1,\ldots,y_n) = ((x_0, x_1, \ldots, x_n) A)^{\theta.}\) are the dual coordinates of the hyperplane.

The product of two correlations of \(\mathrm{PG}(n,q)\) is a collineation, and the product of a collineation and a correlation is a correlation. So the set of all collineations and correlations of \(\mathrm{PG}(n,q)\) forms a group, called the *correlation-collineation group* of \(\mathrm{PG}(n,q)\). The correlation-collineation group of \(\mathrm{PG}(n,q)\) is isomorphic to the semidirect product of PΓL(n+1,q) with the cyclic group of order 2 generated by the *standard duality* of the projective space \(\mathrm{PG}(n,q)\). The convention determines completely the action of correlations and collineations on all elements of a projective space, and it follows that the product of two elements of the correlation-collineation group \(\phi_1,\phi_2\) with respective underlying matrices \(A_1,A_2\), respective underlying field automorphisms \(\theta_1,\theta_2\) , and respective underlying projective space isomorphisms (standard duality or identity map) \(\delta_1,\delta_2\), is the element of the correlation-collineation group with underlying matrix \(A_1 (A_2^{\theta_1^{-1}})^{\delta_1}\) , underlying field automorphism \(\theta_1 \theta_2\) , and underlying projective space automorphism \(\delta_1 \delta_2\) , where the action of \(\delta_1\) on a matrix is defined as taking the transpose inverse if \(\delta_1\) is the standard duality, and as the identity map if \(\delta_1\) is the identity.

Action functions for collineations and correlations on the subspaces of a projective space are described in detail in Section 5.8

We mention that the commands `PGL`

(and `ProjectiveGeneralLinearGroup`

) and `PSL`

(and `ProjectiveSpecialLinearGroup`

) are available in GAP and return a (permutation) group isomorphic to the required group. Therefore we do not provide new methods for these commands, but assume that the user will obtain these groups as homography or special homography group of the appropriate projective space. We will follow this philosophy for the other classical groups. The terminology *projective semilinear group* will be used for a group generated by collineations of a projective space.

These are the different type of actions on projective spaces in **FinInG**, and they naturally give rise to the following distinct categories and representations. Note that these categories and representations are to be considered on a non-user level. Below we describe all user construction methods that hide nicely these technical details.

`‣ IsProjGrpEl` | ( category ) |

`‣ IsProjGrpElWithFrob` | ( category ) |

`‣ IsProjGrpElWithFrobWithPSIsom` | ( category ) |

`IsProjGrpEl`

, `IsProjGrpElWithFrob`

, and `IsProjGrpElWithFrobWithPSIsom`

are the categories naturally induced by the notions of projectivities, collineations, and correlations of a projective space.

`‣ IsProjGrpElRep` | ( representation ) |

`‣ IsProjGrpElWithFrobRep` | ( representation ) |

`‣ IsProjGrpElWithFrobWithPSIsomRep` | ( representation ) |

`IsProjGrpElRep`

is the representation naturally induced by a projectivity; `IsProjGrpElWithFrobRep`

is the representation naturally induced by the notion of a collineation of projective space; and `IsProjGrpElWithFrobWithPSIsomRep`

is the representation naturally induced by a correlation of a projective space. This means that an object in the representation `IsProjGrpElRep`

has as underlying object a matrix; an object in the category `IsProjGrpElWithFrobRep`

has as underlying object a pair consisting of a matrix and a field automorphism; and `IsProjGrpElWithFrobWithPSIsomRep`

has as underlying object a triple consisting of a matrix, a field automorphism and an isomorphism from the projective space to its dual space. Also the base field is stored as a component in the representation.

The above mentioned categories allow us to make a distinction between projectivities, collineations and correlations apart from their representation. However, in **FinInG**, a group element constructed in the categories `IsProjGrpElMore`

is always constructed in the representation `IsProjGrpElMoreRep`

. Furthermore, projectivities of projective spaces (and also collineations of projective spaces) will by default be constructed in the category `IsProjGrpElWithFrobRep`

. This technical choice was made by the developers to have the projectivity groups naturally embedded in the collineation groups. Correlations of projective spaces will be constructed in the category `IsProjGrpElWithFrobWithPSIsom`

.

`‣ IsProjectivity` | ( property ) |

`IsProjectivity`

is a property. Projectivities are the elements of \(\mathrm{PGL}(n+1,q)\). Every element belonging to `IsProjGrpEl`

is by construction a projectivity. If `IsProjectivity`

is applied to a an element belonging to `IsProjGrpElWithFrob`

, then it verifies whether the underlying field automorphism is the identity. If `IsProjectivity`

is applied to a an element belonging to `IsProjGrpElWithFrobWithPSIsom`

, then it verifies whether the underlying field automorphism is the identity, and whether the projective space isomorphism is the identity. This operation provides a user-friendly method to distinguish the projectivities from the projective strictly semilinear maps, and the correlations of a projective space.

gap> g := Random(HomographyGroup(PG(3,4))); < a collineation: <cmat 4x4 over GF(2,2)>, F^0> gap> IsProjectivity(g); true gap> g := Random(CollineationGroup(PG(3,4))); < a collineation: <cmat 4x4 over GF(2,2)>, F^0> gap> IsProjectivity(g); true gap> g := Random(CorrelationCollineationGroup(PG(3,4))); <projective element with Frobenius with projectivespace isomorphism: <immutabl e cmat 4x4 over GF(2,2)>, F^ 2, StandardDuality( AllElementsOfIncidenceStructure( ProjectiveSpace( 3,GF(2^2)) ) ) > gap> IsProjectivity(g); false

`‣ IsCollineation` | ( property ) |

`IsCollineation`

is property. All elements of \(\mathrm{P}\Gamma\mathrm{L}(n+1,q)\) are collineations, and therefore all elements belonging to `IsProjGrpElWithFrob`

are collineations. But also a projectivity is a collineation, as well as an element belonging to `IsProjGrpElWithFrobWithPSIsom`

with projective space isomorphism equal to the identity, is a collineation.

gap> g := Random(HomographyGroup(PG(2,27))); < a collineation: <cmat 3x3 over GF(3,3)>, F^0> gap> IsCollineation(g); true gap> g := Random(CollineationGroup(PG(2,27))); < a collineation: <cmat 3x3 over GF(3,3)>, F^0> gap> IsCollineation(g); true gap> g := Random(CorrelationCollineationGroup(PG(2,27))); <projective element with Frobenius with projectivespace isomorphism: <cmat 3x 3 over GF(3,3)>, F^0, IdentityMapping( <All elements of ProjectiveSpace(2, 27)> ) > gap> IsCollineation(g); true

`‣ IsStrictlySemilinear` | ( property ) |

`IsStrictlySemilinear`

is a property that checks whether a given collineation has a nontrivial underlying field automorphisms, i.e. whether the element belongs to \(\mathrm{P}\Gamma\mathrm{L}(n+1,q)\), but not to \(\mathrm{PGL}(n+1,q)\). If `IsStrictlySemilinear`

is applied to a an element belonging to `IsProjGrpElWithFrobWithPSIsom`

, then it verifies whether the underlying field automorphism is different from the identity, and whether the projective space isomorphism equals the identity. This operation provides a user-friendly method to distinguish the projective strictly semilinear maps from projectivities inside the category of collineations of a projective space.

gap> g := Random(HomographyGroup(PG(3,25))); < a collineation: <cmat 4x4 over GF(5,2)>, F^0> gap> IsStrictlySemilinear(g); false gap> g := Random(CollineationGroup(PG(3,25))); < a collineation: <cmat 4x4 over GF(5,2)>, F^5> gap> IsStrictlySemilinear(g); true gap> g := Random(CorrelationCollineationGroup(PG(3,25))); <projective element with Frobenius with projectivespace isomorphism: <cmat 4x 4 over GF(5,2)>, F^5, IdentityMapping( <All elements of ProjectiveSpace(3, 25)> ) > gap> IsStrictlySemilinear(g); true

`‣ IsProjGrpElWithFrobWithPSIsom` | ( category ) |

`‣ IsCorrelationCollineation` | ( category ) |

`‣ IsCorrelation` | ( property ) |

The underlying objects of a correlation-collineation in **FinInG** are a nonsingular matrix, a field automorphism and a projective space isomorphism. `IsProjGrpElWithFrobWithPSIsom`

is the category of these objects. If the projective space isomorphism is not the identity, then the element is a correlation, and `IsCorrelation`

will return true. `IsCorrelationCollineation`

is a synonym of `IsProjGrpElWithFrobWithPSIsom`

.

gap> g := Random(CollineationGroup(PG(4,7))); < a collineation: <cmat 5x5 over GF(7,1)>, F^0> gap> IsCorrelationCollineation(g); false gap> IsCorrelation(g); false gap> g := Random(CorrelationCollineationGroup(PG(4,7))); <projective element with Frobenius with projectivespace isomorphism: <cmat 5x 5 over GF(7,1)>, F^0, IdentityMapping( <All elements of ProjectiveSpace(4, 7)> ) > gap> IsCorrelationCollineation(g); true gap> IsCorrelation(g); false

In **FinInG**, projectivities and collineations are both constructed in the category `IsProjGrpElWithFrob`

; correlations are constructed in the category `IsProjGrpElWithFrobWithPSIsom`

.

`‣ Projectivity` ( mat, f ) | ( operation ) |

`‣ Projectivity` ( pg, mat ) | ( operation ) |

Returns: a projectivity of a projective space

The argument `mat` must be a nonsingular matrix over the finite field `f`. In the second variant, the size of the nonsingular matrix `mat` must be one more than the dimension of the projective space `pg`. This creates an element of a projectivity group. But the returned object belongs to `IsProjGrpElWithFrob`

!

gap> mat := [[1,0,0],[0,1,0],[0,0,1]]*Z(9)^0; [ [ Z(3)^0, 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3)^0, 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3)^0 ] ] gap> Projectivity(mat,GF(9)); < a collineation: <cmat 3x3 over GF(3,2)>, F^0>

`‣ CollineationOfProjectiveSpace` ( mat, frob, f ) | ( operation ) |

`‣ CollineationOfProjectiveSpace` ( mat, f ) | ( operation ) |

`‣ CollineationOfProjectiveSpace` ( mat, frob, f ) | ( operation ) |

`‣ CollineationOfProjectiveSpace` ( mat, f ) | ( operation ) |

`‣ CollineationOfProjectiveSpace` ( pg, mat ) | ( operation ) |

`‣ CollineationOfProjectiveSpace` ( pg, mat, frob ) | ( operation ) |

`‣ Collineation` ( pg, mat ) | ( operation ) |

`‣ Collineation` ( pg, mat, frob ) | ( operation ) |

`mat` is a nonsingular matrix, `frob` is a field automorphism, `f` is a field, and `pg` is a projective space. This function (and its shorter version) returns the collineation with matrix `mat` and automorphism `frob` of the field `f`. If `frob` is not specified then the companion automorphism of the resulting group element will be the identity map. The returned object belongs to the category `IsProjGrpElWithFrob`

. When the argument `frob` is given, it is checked whether the source of `frob` equals `f`. When the arguments `pg` and `mat` are used, then it is checked that these two arguments are compatible.

gap> mat:= > [[Z(2^3)^6,Z(2^3),Z(2^3)^3,Z(2^3)^3],[Z(2^3)^6,Z(2)^0,Z(2^3)^2,Z(2^3)^3], > [0*Z(2),Z(2^3)^4,Z(2^3),Z(2^3)],[Z(2^3)^6,Z(2^3)^5,Z(2^3)^3,Z(2^3)^5 ]]; [ [ Z(2^3)^6, Z(2^3), Z(2^3)^3, Z(2^3)^3 ], [ Z(2^3)^6, Z(2)^0, Z(2^3)^2, Z(2^3)^3 ], [ 0*Z(2), Z(2^3)^4, Z(2^3), Z(2^3) ], [ Z(2^3)^6, Z(2^3)^5, Z(2^3)^3, Z(2^3)^5 ] ] gap> frob := FrobeniusAutomorphism(GF(8)); FrobeniusAutomorphism( GF(2^3) ) gap> phi := ProjectiveSemilinearMap(mat,frob^2,GF(8)); < a collineation: <cmat 4x4 over GF(2,3)>, F^4> gap> mat2 := [[Z(2^8)^31,Z(2^8)^182,Z(2^8)^49],[Z(2^8)^224,Z(2^8)^25,Z(2^8)^45], > [Z(2^8)^128,Z(2^8)^165,Z(2^8)^217]]; [ [ Z(2^8)^31, Z(2^8)^182, Z(2^8)^49 ], [ Z(2^8)^224, Z(2^8)^25, Z(2^8)^45 ], [ Z(2^8)^128, Z(2^8)^165, Z(2^8)^217 ] ] gap> psi := CollineationOfProjectiveSpace(mat2,GF(256)); < a collineation: <cmat 3x3 over GF(2,8)>, F^0>

`‣ ProjectiveSemilinearMap` ( mat, frob, f ) | ( operation ) |

Returns: a projectivity of a projective space

`mat` is a nonsingular matrix, `frob` is a field automorphism, and `f` is a field. This function returns the collineation with matrix `mat` and automorphism `frob`. The returned object belongs to the category `IsProjGrpElWithFrob`

. When the argument `frob` is given, it is checked whether the source of `frob` equals `f`.

`‣ IdentityMappingOfElementsOfProjectiveSpace` ( ps ) | ( operation ) |

This operation returns the identity mapping on the collection of subspaces of a projective space `ps`.

`‣ StandardDualityOfProjectiveSpace` ( ps ) | ( operation ) |

This operation returns the standard duality of the projective space `ps`

gap> ps := ProjectiveSpace(4,5); ProjectiveSpace(4, 5) gap> delta := StandardDualityOfProjectiveSpace(ps); StandardDuality( AllElementsOfIncidenceStructure( ProjectiveSpace(4,GF(5)) ) ) gap> delta^2; IdentityMapping( <All elements of ProjectiveSpace(4, 5)> ) gap> p := VectorSpaceToElement(ps,[1,2,3,0,1]*Z(5)^0); <a point in ProjectiveSpace(4, 5)> gap> h := p^delta; <a solid in ProjectiveSpace(4, 5)> gap> UnderlyingObject(h); <cmat 4x5 over GF(5,1)> gap> Unpack(last); [ [ Z(5)^0, 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^2 ], [ 0*Z(5), Z(5)^0, 0*Z(5), 0*Z(5), Z(5)^3 ], [ 0*Z(5), 0*Z(5), Z(5)^0, 0*Z(5), Z(5) ], [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0, 0*Z(5) ] ]

`‣ CorrelationOfProjectiveSpace` ( mat, f ) | ( operation ) |

`‣ CorrelationOfProjectiveSpace` ( mat, frob, f ) | ( operation ) |

`‣ CorrelationOfProjectiveSpace` ( mat, f, delta ) | ( operation ) |

`‣ CorrelationOfProjectiveSpace` ( mat, frob, f, delta ) | ( operation ) |

`‣ CorrelationOfProjectiveSpace` ( pg, mat, frob, delta ) | ( operation ) |

`‣ Correlation` ( pg, mat, frob, delta ) | ( operation ) |

`mat` is a nonsingular matrix, `frob` is a field automorphism, `f` is a field, and `delta` is the standard duality of the projective space \(\mathrm{PG}(n,q)\). This function returns the correlation with matrix `mat`, automorphism `frob`, and standard duality `delta`. If `frob` is not specified then the companion automorphism of the resulting group element will be the identity map. If the user specifies `delta`, then it must be the standard duality of a projective space, created using `StandardDualityOfProjectiveSpace`

(5.2-5), or the identity mapping on the collection of subspaces of a projective space, created using `IdentityMappingOfElementsOfProjectiveSpace`

(5.2-4). If not specified, then the companion vector space isomorphism is the identity mapping. The returned object belongs to the category `IsProjGrpElWithFrobWithPSIsom`

gap> mat := [[1,0,0],[3,0,2],[0,5,4]]*Z(7^3); [ [ Z(7^3), 0*Z(7), 0*Z(7) ], [ Z(7^3)^58, 0*Z(7), Z(7^3)^115 ], [ 0*Z(7), Z(7^3)^286, Z(7^3)^229 ] ] gap> phi1 := CorrelationOfProjectiveSpace(mat,GF(7^3)); <projective element with Frobenius with projectivespace isomorphism: <cmat 3x 3 over GF(7,3)>, F^0, IdentityMapping( <All elements of ProjectiveSpace(2, 343)> ) > gap> frob := FrobeniusAutomorphism(GF(7^3)); FrobeniusAutomorphism( GF(7^3) ) gap> phi2 := CorrelationOfProjectiveSpace(mat,frob,GF(7^3)); <projective element with Frobenius with projectivespace isomorphism: <cmat 3x 3 over GF(7,3)>, F^7, IdentityMapping( <All elements of ProjectiveSpace(2, 343)> ) > gap> delta := StandardDualityOfProjectiveSpace(ProjectiveSpace(2,GF(7^3))); StandardDuality( AllElementsOfIncidenceStructure( ProjectiveSpace( 2,GF(7^3)) ) ) gap> phi3 := CorrelationOfProjectiveSpace(mat,GF(7^3),delta); <projective element with Frobenius with projectivespace isomorphism: <cmat 3x 3 over GF(7, 3)>, F^0, StandardDuality( AllElementsOfIncidenceStructure( ProjectiveSpace( 2,GF(7^3)) ) ) > gap> phi4 := CorrelationOfProjectiveSpace(mat,frob,GF(7^3),delta); <projective element with Frobenius with projectivespace isomorphism: <cmat 3x 3 over GF(7,3)>, F^ 7, StandardDuality( AllElementsOfIncidenceStructure( ProjectiveSpace( 2,GF(7^3)) ) ) >

`‣ Representative` ( g ) | ( operation ) |

`g` is a projectivity, collineation or correlation of a projective space. This function returns the representative components that determine `g`, i.e. a matrix, a matrix and a field automorphism, and a matrix, a field automorphism, and a vector space isomorphism, respectively.

gap> g:=CollineationGroup( ProjectiveSpace(2,49)); The FinInG collineation group PGammaL(3,49) gap> x:=Random(g);; gap> Representative(x); [ <immutable cmat 3x3 over GF(7,2)>, FrobeniusAutomorphism( GF(7^2) ) ]

`‣ MatrixOfCollineation` ( g ) | ( operation ) |

`g` is a collineation (including a projectivity) of a projective space. This function returns the matrix that was used to construct `g`.

gap> g:=CollineationGroup( ProjectiveSpace(3,3)); The FinInG collineation group PGL(4,3) gap> x:=Random(g);; gap> MatrixOfCollineation(x); <cmat 4x4 over GF(3,1)> gap> Unpack(last); [ [ 0*Z(3), 0*Z(3), Z(3)^0, Z(3) ], [ Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ Z(3)^0, Z(3)^0, Z(3), 0*Z(3) ], [ Z(3), Z(3), 0*Z(3), 0*Z(3) ] ]

`‣ MatrixOfCorrelation` ( g ) | ( operation ) |

`g` is a correlation of a projective space. This function returns the matrix that was used to construct `g`.

gap> g:=CorrelationCollineationGroup( ProjectiveSpace(4,9)); The FinInG correlation-collineation group PGammaL(5,9) : 2 gap> x:=Random(g);; gap> MatrixOfCorrelation(x); <cmat 5x5 over GF(3,2)> gap> Unpack(last); [ [ Z(3^2)^3, Z(3^2)^6, 0*Z(3), 0*Z(3), 0*Z(3) ], [ Z(3^2), Z(3^2)^3, Z(3^2)^2, Z(3^2)^5, Z(3^2) ], [ Z(3^2)^2, Z(3^2)^3, Z(3^2), Z(3^2), Z(3^2)^3 ], [ Z(3^2)^2, Z(3^2), Z(3^2)^6, Z(3^2), Z(3^2)^5 ], [ Z(3^2), Z(3^2)^3, Z(3)^0, 0*Z(3), Z(3^2)^6 ] ]

`‣ BaseField` ( g ) | ( operation ) |

Returns: a field

`g` is a projectivity, collineation or correlation of a projective space. This function returns the base field that was used to construct `g`.

gap> mat := [[0,1,0],[1,0,0],[0,0,2]]*Z(3)^0; [ [ 0*Z(3), Z(3)^0, 0*Z(3) ], [ Z(3)^0, 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3) ] ] gap> g := Projectivity(mat,GF(3^6)); < a collineation: <cmat 3x3 over GF(3,6)>, F^0> gap> BaseField(g); GF(3^6)

`‣ FieldAutomorphism` ( g ) | ( operation ) |

`g` is a collineation of a projective space or a correlation of a projective space. This function returns the companion field automorphism which defines `g`. Note that in the following example, you may want to execute it several times to see the different possible results generated by the random choice of projective semilinear map here.

gap> g:=CollineationGroup( ProjectiveSpace(3,9)); The FinInG collineation group PGammaL(4,9) gap> x:=Random(g);; gap> FieldAutomorphism(x); IdentityMapping( GF(3^2) )

`‣ ProjectiveSpaceIsomorphism` ( g ) | ( operation ) |

`g` is a correlation of a projective space. This function returns the companion isomorphism of the projective space which defines `g`.

gap> mat := [[1,0,0],[3,0,2],[0,5,4]]*Z(7^3); [ [ Z(7^3), 0*Z(7), 0*Z(7) ], [ Z(7^3)^58, 0*Z(7), Z(7^3)^115 ], [ 0*Z(7), Z(7^3)^286, Z(7^3)^229 ] ] gap> frob := FrobeniusAutomorphism(GF(7^3)); FrobeniusAutomorphism( GF(7^3) ) gap> delta := StandardDualityOfProjectiveSpace(ProjectiveSpace(2,GF(7^3))); StandardDuality( AllElementsOfIncidenceStructure( ProjectiveSpace( 2,GF(7^3)) ) ) gap> phi := CorrelationOfProjectiveSpace(mat,frob,GF(7^3),delta); <projective element with Frobenius with projectivespace isomorphism: <cmat 3x 3 over GF(7,3)>, F^ 7, StandardDuality( AllElementsOfIncidenceStructure( ProjectiveSpace( 2,GF(7^3)) ) ) > gap> ProjectiveSpaceIsomorphism(phi); StandardDuality( AllElementsOfIncidenceStructure( ProjectiveSpace( 2,GF(7^3)) ) )

`‣ Order` ( g ) | ( operation ) |

`g` is a projectivity, collineation or correlation of a projective space. This function returns the order of `g`.

gap> x := Random(CollineationGroup(PG(4,9))); < a collineation: <cmat 5x5 over GF(3,2)>, F^3> gap> t := Order(x); 32 gap> IsOne(x^t); true

As mentioned before the commands `PGL`

(and `ProjectiveGeneralLinearGroup`

) and `PSL`

(and `ProjectiveSpecialLinearGroup`

) are already available in GAP and return a (permutation) group isomorphic to the required group. In **FinInG**, different categories are created for these groups.

`‣ ProjectivityGroup` ( geom ) | ( operation ) |

`‣ HomographyGroup` ( geom ) | ( operation ) |

Returns: the group of projectivities of geom

Let `geom` be the projective space \(\mathrm{PG}(n,q)\) This operation (and its synonym) returns the group of projectivities \(\mathrm{PGL}(n+1,q)\) of the projective space \(\mathrm{PG}(n,q)\). Note that although a projectivity is a collineation with the identity as associated field isomorphism, this group belongs to the category `IsProjectiveGroupWithFrob`

, and its elements belong to `IsProjGrpElWithFrob`

.

gap> ps := ProjectiveSpace(3,16); ProjectiveSpace(3, 16) gap> ProjectivityGroup(ps); The FinInG projectivity group PGL(4,16) gap> HomographyGroup(ps); The FinInG projectivity group PGL(4,16) gap> ps := ProjectiveSpace(4,81); ProjectiveSpace(4, 81) gap> ProjectivityGroup(ps); The FinInG projectivity group PGL(5,81) gap> HomographyGroup(ps); The FinInG projectivity group PGL(5,81) gap> ps := ProjectiveSpace(5,3); ProjectiveSpace(5, 3) gap> ProjectivityGroup(ps); The FinInG projectivity group PGL(6,3) gap> HomographyGroup(ps); The FinInG projectivity group PGL(6,3) gap> ps := ProjectiveSpace(2,2); ProjectiveSpace(2, 2) gap> ProjectivityGroup(ps); The FinInG projectivity group PGL(3,2) gap> HomographyGroup(ps); The FinInG projectivity group PGL(3,2)

`‣ CollineationGroup` ( geom ) | ( operation ) |

Returns: the group of collineations of geom

Let `geom` be the projective space \(\mathrm{PG}(n,q)\). This operation returns the group of collineations \(\mathrm{P}\Gamma\mathrm{L}(n+1,q)\) of the projective space \(\mathrm{PG}(n,q)\). If \(\mathrm{GF}(q)\) has no non-trivial field automorphisms, i.e. when \(q\) is prime, the group \(\mathrm{PGL}(n+1,q)\) is the full collineation group and will be returned.

gap> ps := ProjectiveSpace(3,16); ProjectiveSpace(3, 16) gap> CollineationGroup(ps); The FinInG collineation group PGammaL(4,16) gap> ps := ProjectiveSpace(4,81); ProjectiveSpace(4, 81) gap> CollineationGroup(ps); The FinInG collineation group PGammaL(5,81) gap> ps := ProjectiveSpace(5,3); ProjectiveSpace(5, 3) gap> CollineationGroup(ps); The FinInG collineation group PGL(6,3) gap> ps := ProjectiveSpace(2,2); ProjectiveSpace(2, 2) gap> CollineationGroup(ps); The FinInG collineation group PGL(3,2)

`‣ SpecialProjectivityGroup` ( geom ) | ( operation ) |

`‣ SpecialHomographyGroup` ( geom ) | ( operation ) |

Returns: the group of special projectivities of geom

Let `geom` be the projective space \(\mathrm{PG}(n,q)\) This operation (and its synonym) returns the group of special projectivities \(\mathrm{PSL}(n+1,q)\) of the projective space \(\mathrm{PG}(n,q)\).

gap> ps := ProjectiveSpace(3,16); ProjectiveSpace(3, 16) gap> SpecialProjectivityGroup(ps); The FinInG PSL group PSL(4,16) gap> SpecialHomographyGroup(ps); The FinInG PSL group PSL(4,16) gap> ps := ProjectiveSpace(4,81); ProjectiveSpace(4, 81) gap> SpecialProjectivityGroup(ps); The FinInG PSL group PSL(5,81) gap> SpecialHomographyGroup(ps); The FinInG PSL group PSL(5,81) gap> ps := ProjectiveSpace(5,3); ProjectiveSpace(5, 3) gap> SpecialProjectivityGroup(ps); The FinInG PSL group PSL(6,3) gap> SpecialHomographyGroup(ps); The FinInG PSL group PSL(6,3) gap> ps := ProjectiveSpace(2,2); ProjectiveSpace(2, 2) gap> SpecialProjectivityGroup(ps); The FinInG PSL group PSL(3,2) gap> SpecialHomographyGroup(ps); The FinInG PSL group PSL(3,2)

`‣ IsProjectivityGroup` | ( property ) |

`IsProjectivityGroup`

is a property, which subgroups of a the `CollineationGroup`

or a `CorrelationCollineationGroup`

of a projective space might have. It checks whether the generators are projectivities. Of course `ProjectivityGroup`

has this property.

`‣ IsCollineationGroup` | ( property ) |

`IsCollineationGroup`

is a property, which subgroups of a the `CorrelationCollineationGroup`

of a projective space might have. It checks whether the generators are collineations. Of course `ProjectivityGroup`

and `CollineationGroup`

have this property.

`‣ CorrelationCollineationGroup` ( geom ) | ( operation ) |

Returns: the group of correlations and collineations of geom

Let `geom` be the projective space \(\mathrm{PG}(n,q)\). This operation returns the correlations and collineations of \(\mathrm{PG}(n,q)\).

gap> pg := PG(4,3); ProjectiveSpace(4, 3) gap> group := CorrelationCollineationGroup(pg); The FinInG correlation-collineation group PGL(5,3) : 2 gap> pg := PG(3,8); ProjectiveSpace(3, 8) gap> group := CorrelationCollineationGroup(pg); The FinInG correlation-collineation group PGammaL(4,8) : 2

`‣ BaseField` ( g ) | ( operation ) |

Returns: a field

`g` must be a projective group. This function finds the base field of the vector space on which the group acts.

`‣ Dimension` ( g ) | ( attribute ) |

Returns: a number

`g` must be a projective group. This function finds the dimension of the vector space on which the group acts.

In **FinInG** a collineation group is not constructed as a subgroup of a correlation group. However, collineations can be multiplied with correlations (if they both belong mathematically to the same correlation group.

gap> x := Random(CollineationGroup(PG(3,4))); < a collineation: <cmat 4x4 over GF(2,2)>, F^2> gap> y := Random(CorrelationCollineationGroup(PG(3,4))); <projective element with Frobenius with projectivespace isomorphism: <immutabl e cmat 4x4 over GF(2, 2)>, F^0, StandardDuality( AllElementsOfIncidenceStructure( ProjectiveSpace( 3,GF(2^2)) ) ) > gap> x*y; <projective element with Frobenius with projectivespace isomorphism: <cmat 4x 4 over GF(2,2)>, F^ 2, StandardDuality( AllElementsOfIncidenceStructure( ProjectiveSpace( 3,GF(2^2)) ) ) >

`‣ Embedding` ( coll, corr ) | ( function ) |

Let `coll` be a the full collineation group of a projective space, and `corr` its full correlation group. **FinInG** provides a method for this operation `Embedding`

, returning the natural embedding from `coll` into `corr`. Remark that only an embedding of a collineation group into a correlation group with exactly the same underlying projective space is possible.

gap> coll := CollineationGroup(PG(4,8)); The FinInG collineation group PGammaL(5,8) gap> corr := CorrelationCollineationGroup(PG(4,8)); The FinInG correlation-collineation group PGammaL(5,8) : 2 gap> phi := Embedding(coll,corr); MappingByFunction( The FinInG collineation group PGammaL(5,8), The FinInG corr elation-collineation group PGammaL(5,8) : 2, function( y ) ... end )

`5.7-1 \^`

`‣ \^` ( x, g ) | ( operation ) |

Returns: a subspace of a projective space

This is an operation which returns the image of `x`, a subspace of a projective space, under `g`, an element of the projective group, the collineation group, or the correlation group.

In this section we give more detailed about the actions that are used in **FinInG** for projective groups. Consider the projective space \(\mathrm{PG}(n,q)\). As described in Chapter 4, a point of \(\mathrm{PG}(n,q)\) is represented by a row vector and a \(k\)-dimensional subspace of \(\mathrm{PG}(n,q)\) is represented by a \((k+1) \times (n+1)\) matrix.

Consider a point \(p\) with row vector \((x_0, x_1, \ldots, x_n)\), and a collineation or correlation \(\phi\) with underlying matrix \(A\) and field automorphism \(\theta\). Define the row vector \((y_0,y_1,\ldots,y_n) = ((x_0, x_1, \ldots, x_n) A)^{\theta}\) . When \(\phi\) is a collineation, \(p^{\phi}\) is the point with underlying row vector \((y_0,y_1,\ldots,y_n)\) . When \(\phi\) is a correlation, \(p^\phi\) is a hyperplane of \(\mathrm{PG}(n,q)\) with equation \(y_0X_0 + y_1X_1 + \ldots + y_nX_n\) . The action of collineations or correlations on points determines the action on subspaces of arbitrary dimension completely.

`‣ OnProjSubspaces` ( subspace, el ) | ( function ) |

Returns: a subspace of a projective space

This is a global function that returns the action of an element `el` of the collineation group on a subspace `subspace` of a projective space.

**IMPORTANT:** This function should only be used for objects `el` in the category `IsProjGrpElWithFrob`

! This is because this function does not check whether `el` is a correlation or a collineation. So when `el` is a object in the category `IsProjGrpElWithFrobWithPSIsom`

, and `el` is a correlation (i.e. the associated PSIsom is NOT the identity) then this action will not give the image of the `subspace` under the correlation `el`. For the action of an object `el` in the category `IsProjGrpElWithFrobWithPSIsom`

, the action `OnProjSubspacesExtended`

(8.3-1) should be used.

gap> ps := ProjectiveSpace(4,27); ProjectiveSpace(4, 27) gap> p := VectorSpaceToElement(ps,[ Z(3^3)^22,Z(3^3)^10,Z(3^3),Z(3^3)^3,Z(3^3)^3]); <a point in ProjectiveSpace(4, 27)> gap> ps := ProjectiveSpace(3,27); ProjectiveSpace(3, 27) gap> p := VectorSpaceToElement(ps,[ Z(3^3)^22,Z(3^3)^10,Z(3^3),Z(3^3)^3]); <a point in ProjectiveSpace(3, 27)> gap> Display(p); [16nh] gap> mat := [[ Z(3^3)^25,Z(3^3)^6,Z(3^3)^7,Z(3^3)^15], > [Z(3^3)^9,Z(3)^0,Z(3^3)^10,Z(3^3)^18], > [Z(3^3)^19,0*Z(3),Z(3),Z(3^3)^12], > [Z(3^3)^4,Z(3^3),Z(3^3),Z(3^3)^22]]; [ [ Z(3^3)^25, Z(3^3)^6, Z(3^3)^7, Z(3^3)^15 ], [ Z(3^3)^9, Z(3)^0, Z(3^3)^10, Z(3^3)^18 ], [ Z(3^3)^19, 0*Z(3), Z(3), Z(3^3)^12 ], [ Z(3^3)^4, Z(3^3), Z(3^3), Z(3^3)^22 ] ] gap> theta := FrobeniusAutomorphism(GF(27)); FrobeniusAutomorphism( GF(3^3) ) gap> phi := CollineationOfProjectiveSpace(mat,theta,GF(27)); < a collineation: <cmat 4x4 over GF(3,3)>, F^3> gap> r := OnProjSubspaces(p,phi); <a point in ProjectiveSpace(3, 27)> gap> Display(r); [1..l] gap> vect := [[Z(3^3)^9,Z(3^3)^5,Z(3^3)^19,Z(3^3)^17], > [Z(3^3)^22,Z(3^3)^22,Z(3^3)^4,Z(3^3)^17], > [Z(3^3)^8,0*Z(3),Z(3^3)^24,Z(3^3)^21]]; [ [ Z(3^3)^9, Z(3^3)^5, Z(3^3)^19, Z(3^3)^17 ], [ Z(3^3)^22, Z(3^3)^22, Z(3^3)^4, Z(3^3)^17 ], [ Z(3^3)^8, 0*Z(3), Z(3^3)^24, Z(3^3)^21 ] ] gap> s := VectorSpaceToElement(ps,vect); <a plane in ProjectiveSpace(3, 27)> gap> r := OnProjSubspaces(s,phi); <a plane in ProjectiveSpace(3, 27)> gap> Display(r); [[1..c] [.1.7] [..17] ]

`‣ ActionOnAllProjPoints` ( g ) | ( function ) |

`g` must be a projective group. This function returns the action homomorphism of `g` acting on its projective points. This function is used by NiceMonomorphism when the number of points is small enough for the action to be easy to calculate.

`‣ OnProjSubspacesExtended` ( subspace, el ) | ( function ) |

Returns: a subspace of a projective space

This should be used for the action of elements in the category `IsProjGrpElWithFrobWithPSIsom`

where `subspace` is a subspace of a projective or polar space and `el` is an element of the correlation group of the ambient geometry of `subspace`. This function returns the image of `subspace` under `el`, which is a subspace of the same dimension as `subspace` if `el` is a collineation and an element of codimension equal to the dimension of `subspace` if `el` is a correlation.

gap> ps := ProjectiveSpace(3,27); ProjectiveSpace(3, 27) gap> mat := IdentityMat(4,GF(27)); [ [ Z(3)^0, 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ], [ 0*Z(3), 0*Z(3), Z(3)^0, 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ] gap> delta := StandardDualityOfProjectiveSpace(ps); StandardDuality( AllElementsOfIncidenceStructure( ProjectiveSpace( 3,GF(3^3)) ) ) gap> frob := FrobeniusAutomorphism(GF(27)); FrobeniusAutomorphism( GF(3^3) ) gap> phi := CorrelationOfProjectiveSpace(mat,frob,GF(27),delta); <projective element with Frobenius with projectivespace isomorphism: <cmat 4x 4 over GF(3,3)>, F^ 3, StandardDuality( AllElementsOfIncidenceStructure( ProjectiveSpace( 3,GF(3^3)) ) ) > gap> p := Random(Points(ps)); <a point in ProjectiveSpace(3, 27)> gap> OnProjSubspacesExtended(p,phi); <a plane in ProjectiveSpace(3, 27)> gap> l := Random(Lines(ps)); <a line in ProjectiveSpace(3, 27)> gap> OnProjSubspacesExtended(p,phi); <a plane in ProjectiveSpace(3, 27)> gap> psi := CorrelationOfProjectiveSpace(mat,frob^2,GF(27)); <projective element with Frobenius with projectivespace isomorphism: <cmat 4x 4 over GF(3,3)>, F^9, IdentityMapping( <All elements of ProjectiveSpace(3, 27)> ) > gap> OnProjSubspacesExtended(p,psi); <a point in ProjectiveSpace(3, 27)> gap> OnProjSubspacesExtended(l,psi); <a line in ProjectiveSpace(3, 27)>

A *transvection* of the vector space \(V=V(n+1,F)\) is a linear map \(\tau\) from \(V\) to itself with matrix \(M\) such that the rank of \(M-I\) equals 1 (where \(I\) denotes the \((n+1) \times (n+1)\) identity matrix), and \((M-I)^2=0\) . Different equivalent definitions are found in the literature, here we followed [Cam00a]. Note that what follows is true for arbitrary fields \(F\), but we will restrict to finite fields. Choosing a basis \(e_1,\ldots,e_n,e_{n+1}\) such that \(e_1,\ldots,e_{n}\) generates the kernel of \(M-I\), it follows that \(M\) equals

\[\left( \begin{array}{ccccc} 1 & 0 & \ldots & 0 & 0 \\ 0 & 1 & \ldots & 0 & 0 \\ \vdots & \vdots & \ddots & \vdots & \vdots \\ 0 & 0 & \ldots & 1 & 0 \\ x_1 & x_2 & \ldots & x_{n-1} & 1 \\ \end{array} \right).\]

It is also a well known fact that all transvections generate the group \(\mathrm{SL}(n+1,q)\). A transvection gives rise to a projectivity of \(\mathrm{PG}(n,q)\), we call such an element an *elation*, and it is a projectivity \(\phi\) fixing a hyperplane \(H\) pointwise, and such that there exists exactly one point \(p \in H\) such that all hyperplanes through \(p\) are stabilized. The hyperplane \(H\) is called the *axis* of \(\phi\), and the point \(p\) is called the *centre* of \(\phi\). As a transvection is an element of \(\mathrm{SL}(n+1,q)\), an elation is an element of \(\mathrm{PSL}(n+1,q)\). An elation is completely determined by its axis and the image of one point (not contained in the axis). The group of elations with a given axis and centre, is isomorphic with the additive group of \(\mathrm{GF}(q)\). Finally, the group of all elations with a given axis \(H\), acts regularly on the points of \(\mathrm{PG}(n,q) \setminus H\) , and is isomorphic with the additive group of the vector space \(V(n+1,q)\).

`‣ ElationOfProjectiveSpace` ( sub, point1, point2 ) | ( operation ) |

Returns: the unique elation with axis `sub` mapping `point1` on `point2`

It is checked whether the two points do not belong to `sub`. If `point1` equals `point2`, the identity mapping is returned.

gap> ps := PG(3,9); ProjectiveSpace(3, 9) gap> sub := VectorSpaceToElement(ps,[[1,0,1,0],[0,1,0,1],[1,2,3,0]]*Z(3)^0); <a plane in ProjectiveSpace(3, 9)> gap> p1 := VectorSpaceToElement(ps,[1,0,1,2]*Z(3)^0); <a point in ProjectiveSpace(3, 9)> gap> p2 := VectorSpaceToElement(ps,[1,2,0,2]*Z(3)^0); <a point in ProjectiveSpace(3, 9)> gap> phi := ElationOfProjectiveSpace(sub,p1,p2); < a collineation: <cmat 4x4 over GF(3,2)>, F^0>

`‣ ProjectiveElationGroup` ( axis, centre ) | ( operation ) |

`‣ ProjectiveElationGroup` ( axis ) | ( operation ) |

Returns: A group of elations

The first version returns the group of elations with with given axis `axis` and centre `centre`. It is checked whether `centre` belongs to `axis`. The second version returns the group of elations with given axis `axis`.

gap> ps := PG(2,27); ProjectiveSpace(2, 27) gap> sub := VectorSpaceToElement(ps,[[1,0,1,],[0,1,0]]*Z(3)^0); <a line in ProjectiveSpace(2, 27)> gap> p := VectorSpaceToElement(ps,[1,1,1]*Z(3)^0); <a point in ProjectiveSpace(2, 27)> gap> g := ProjectiveElationGroup(sub,p); <projective collineation group with 3 generators> gap> Order(g); 27 gap> StructureDescription(g); "C3 x C3 x C3" gap> ps := PG(3,4); ProjectiveSpace(3, 4) gap> sub := Random(Hyperplanes(ps)); <a plane in ProjectiveSpace(3, 4)> gap> g := ProjectiveElationGroup(sub); <projective collineation group with 6 generators> gap> Order(g); 64 gap> Transitivity(g,Difference(Points(ps),Points(sub)),OnProjSubspaces); 1 gap> StructureDescription(g); "C2 x C2 x C2 x C2 x C2 x C2"

A *homology* of the projective space \(\mathrm{PG}(n,q)\) is a collineation fixing a hyperplane \(H\) pointwise and fixing one more point p ∉ H. It is easily seen that after a suitable choice of a basis for the space, the matrix of a homology is a diagonal matrix with all its diagonal entries except one equal to 1. We call the hyperplane the *axis* and the point the *centre* of the homology. Homologies with a common axis and centre are a group isomorphic to the multiplicative group of the field \(\mathrm{GF}(q)\).

`‣ HomologyOfProjectiveSpace` ( sub, centre, point1, point2 ) | ( operation ) |

Returns: the unique homology with axis `sub` and centre `centre` that maps `point1` on `point2`

It is checked whether the three points do not belong to `sub` and whether they are collinear. If `point1` equals `point2`, the identity mapping is returned.

gap> ps := PG(3,81); ProjectiveSpace(3, 81) gap> sub := VectorSpaceToElement(ps,[[1,0,1,0],[0,1,0,1],[1,2,3,0]]*Z(3)^0); <a plane in ProjectiveSpace(3, 81)> gap> centre := VectorSpaceToElement(ps,[0*Z(3),Z(3)^0,Z(3^4)^36,0*Z(3)]); <a point in ProjectiveSpace(3, 81)> gap> p1 := VectorSpaceToElement(ps,[0*Z(3),Z(3)^0,Z(3^4)^51,0*Z(3)]); <a point in ProjectiveSpace(3, 81)> gap> p2 := VectorSpaceToElement(ps,[0*Z(3),Z(3)^0,Z(3^4)^44,0*Z(3)]); <a point in ProjectiveSpace(3, 81)> gap> phi := HomologyOfProjectiveSpace(sub,centre,p1,p2); < a collineation: <cmat 4x4 over GF(3,4)>, F^0>

`‣ ProjectiveHomologyGroup` ( axis, centre ) | ( operation ) |

Returns: the group of homologies with with given axis `axis` and centre `centre`.

It is checked whether `centre` does not belong to `axis`.

gap> ps := PG(2,27); ProjectiveSpace(2, 27) gap> sub := VectorSpaceToElement(ps,[[1,0,1,],[0,1,0]]*Z(3)^0); <a line in ProjectiveSpace(2, 27)> gap> p := VectorSpaceToElement(ps,[1,0,2]*Z(3)^0); <a point in ProjectiveSpace(2, 27)> gap> g := ProjectiveHomologyGroup(sub,p); <projective collineation group with 1 generators> gap> Order(g); 26 gap> StructureDescription(g); "C26"

A *nice monomorphism* of a group \(G\) is roughly just a permutation representation of \(G\) on a suitable action domain. An easy example is the permutation action of the full collineation group of a projective space on its points. **FinInG** provides (automatic) functionality to compute nice monomorphisms. Typically, for a geometry \(S\) with \(G\) a (subgroup of the) collineation group of \(S\), a nice monomorphism for \(G\) is a homomorphism from \(G\) to the permutation action of \(S\) on a collection of elements of \(S\). Thus, to obtain such a homomorphism, one has to enumerate the collection of elements. As nice monomorphisms for projective semilinear groups are often computed as a byproduct of some operations, suddenly, these operations get time consuming (when executed for the first time). In general, it is decided automatically whether a nice monomorphism is computed or not. A typical example is the following.

gap> pg := PG(4,8); ProjectiveSpace(4, 8) gap> group := CollineationGroup(pg); The FinInG collineation group PGammaL(5,8) gap> HasNiceMonomorphism(group); false gap> Random(group); < a collineation: <cmat 5x5 over GF(2,3)>, F^4> gap> time; 1028 gap> HasNiceMonomorphism(group); true gap> Random(group); < a collineation: <cmat 5x5 over GF(2,3)>, F^0> gap> time; 3

`‣ NiceMonomorphism` ( g ) | ( operation ) |

Returns: an action, i.e. a group homomorphism

`g` is a projective semilinear group. If `g` was constructed as a group stabilizing a geometry, the action of `g` on the points of the geometry is returned.

gap> g := HomographyGroup(PG(4,8)); The FinInG projectivity group PGL(5,8) gap> NiceMonomorphism(g); <action isomorphism> gap> Image(last); <permutation group of size 4638226007491010887680 with 2 generators> gap> g := CollineationGroup(PG(4,8)); The FinInG collineation group PGammaL(5,8) gap> NiceMonomorphism(g); <action isomorphism> gap> Image(last); <permutation group of size 13914678022473032663040 with 3 generators>

`‣ NiceObject` ( g ) | ( operation ) |

Returns: a permutation group

`g` is a projective semilinear group. If `g` was constructed as a group stabilizing a geometry, the permutation representation of `g` acting on the points of the geometry is returned. This is actually equivalent with `Image(NiceMonomorphism(g))`

.

gap> g := HomographyGroup(PG(4,8)); The FinInG projectivity group PGL(5,8) gap> NiceObject(g); <permutation group of size 4638226007491010887680 with 2 generators> gap> g := CollineationGroup(PG(4,8)); The FinInG collineation group PGammaL(5,8) gap> NiceObject(g); <permutation group of size 13914678022473032663040 with 3 generators>

`‣ FINING` | ( global variable ) |

The global variable `FINING`

stores a record with two components, `FINING.Fast`

and `FINING.LimitForCanComputeActionOnPoints`

By default, `FINING.Fast`

is set to `true`

. Setting `FINING.Fast`

to `false`

causes the use of the generic **GAP** function `ActionHomomorphism`

instead of the functions `NiceMonomorphismByDomain`

and `NiceMonomorphismByOrbit`

, which both rely on the packages **GenSS** and **Orb**.

`‣ CanComputeActionOnPoints` ( g ) | ( operation ) |

Returns: true or false

`g` must be a projective group. This function returns true if GAP can feasibly compute the action of `g` on the points of the projective space on which it acts. This function can be used (and is, by other parts of FinInG) to determine whether it is worth trying to compute the action. This function actually checks if the number of points of the corresponding projective space is less than the constant `FINING.LimitForCanComputeActionOnPoints`

, which is by default set to \(1000000\). The next example requires about 500M of memory.

gap> NiceMonomorphism(CollineationGroup(ProjectiveSpace(7,8))); Error, action on projective points not feasible to calculate called from <function "unknown">( <arguments> ) called from read-eval loop at line 8 of *stdin* you can 'quit;' to quit to outer loop, or you can 'return;' to continue brk> quit; gap> FINING.LimitForCanComputeActionOnPoints := 3*10^6; 3000000 gap> NiceMonomorphism(CollineationGroup(ProjectiveSpace(7,8))); <action isomorphism> gap> time; 39619

`‣ NiceMonomorphismByDomain` ( g, dom, op ) | ( operation ) |

Returns: an action, i.e. a group homomorphism

This operation is not intended for the user. It relies on **GenSS** and **Orb**. The argument `g` is a projective group (in the category `IsProjectiveGroupWithFrob`

) with a set `Size`

attribute, `dom` is an orbit of `g`, and `op` an operation suitable for `x` and `g`.

`‣ NiceMonomorphismByOrbit` ( g, dom, op, orblen ) | ( operation ) |

Returns: an action, i.e. a group homomorphism

This operation is not intended for the user. It relies on **GenSS** and **Orb**. The argument `g` is a projective group (in the category `IsProjectiveGroupWithFrob`

) with a set `Size`

attribute, `dom` is an orbit of `g`, `op` an operation suitable for `x` and `g`, and `orblen` is the length of the final orbit.

generated by GAPDoc2HTML