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+1dimensional vector space over a given field GF(q) is denoted by GL(n+1,q). This is a matrix group consisting of all nonsingular square n+1dimensional matrices over GF(q). The group of all semilinear maps of the vector space V(n+1,q) is obtained as the semidirect product of GL(n+1,q) and Aut(GF(q)), and is denoted by ΓL(n+1,q). Each semilinear map induces a collineation of PG(n,q). The Fundamental theorem of Projective Geometry also guarantees that the converse holds. Note also that ΓL(n+1,q) does not act faithfully on the projective points, and the kernel of its action is the group of scalar matrices, Sc(n+1,q). So the group PΓL(n+1,q) is defined as the group ΓL(n+1,q)/Sc(n+1,q), and the group PGL(n+1,q) as GL(n+1,q)/Sc(n+1,q). An element of the group PGL(n+1,q) is also called a projectivity or homography of PG(n,q), and the group PGL(n+1,q) is called the projectivity group or homography group of PG(n,q). An element of PΓL(n+1,q) is called a collineation of PG(n,q) and the group PΓL(n+1,q) is the collineation group of PG(n,q).
As usual, we also consider the special linear group SL(n+1,q), which is the subgroup of GL(n+1,q) of all matrices having determinant one. Its projective variant, i.e. PSL(n+1,q) is defined as SL(n+1,q)/(SL(n+1,q) ∩ Sc(n+1,q)) and is called the special homography group or special projectivity group of PG(n,q).
Consider the projective space PG(n,q). As described in Chapter 4, a point of PG(n,q) is represented by a row vector. A kdimensional subspace of PG(n,q) is represented by a generating set of k+1 points, and as such, by a (k+1) x (n+1) matrix. The convention in FinInG is that a collineation ϕ with underlying matrix A and field automorphism θ maps the projective point represented by row vector (x_{0},x_{1},...,x_{n}) to the projective point represented by row vector (y_{0},y_{1},...,y_{n}) = ((x_{0},x_{1},...,x_{n})A)^{θ} . This convention determines completely the action of collineations on all elements of a projective space, and it follows that the product of two collineations φ_{1},φ_{2} with respective underlying matrices A_{1},A_{2} and respective underlying field automorphisms θ_{1},θ_{2} is the collineation with underlying matrix A_{1}A_{2}^{θ11} and underlying field automorphism θ_{1}θ_{2}.
A correlation of the projective space PG(n,q) is a collineation from PG(n,q) to its dual. A projectivity from PG(n,q) to its dual is sometimes called a reciprocity. The standard duality of the projective space PG(n,q) maps any point v with coordinates (x_{0},x_{1},...,x_{n}) on the hyperplane with equation x_{0}X_{0} + x_{1}X_{1} + ... x_{n}X_{n} = 0. The standard duality acts as an automorphism on PΓ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 ϕ with underlying matrix A and field automorphism θ maps that projective point represented by row vector (x_{0},x_{1},...,x_{n}) to the projective hyperplane represented by row vector (y_{0},y_{1},...,y_{n}) = ((x_{0},x_{1},...,x_{n})A)^{θ}. , i.e. (y_{0},y_{1},...,y_{n}) = ((x_{0},x_{1},...,x_{n})A)^{θ} are the dual coordinates of the hyperplane.
The product of two correlations of PG(n,q) is a collineation, and the product of a collineation and a correlaton is a correlation. So the set of all collineations and correlations of PG(n,q) forms a group, called the correlationcollineation group of PG(n,q). The correlationcollineation group of 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 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 correlationcollineation group φ_{1},φ_{2} with respective underlying matrices A_{1},A_{2}, respective underlying field automorphisms θ_{1},θ_{2}, and respective underlying projective space isomorphisms (standard duality or identity map) δ_{1},δ_{2}, is the element of the correlationcollineation group with underlying matrix A_{1}(A_{2}^{θ11}) ^{δ1}, underlying field automorphism θ_{1}θ_{2}, and underlying projective space automorphism δ_{1}δ_{2} , where the action of δ_{1} on a matrix is defined as taking the transpose inverse if δ_{1} is the standard duality, and as the identity map if δ_{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 nonuser level. Below we describe all user constuction 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 basefield 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 developpers 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 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 userfriendly 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 PΓ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 PΓL(n+1,q), but not to 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 userfriendly 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 correlationcollineation 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 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.25), or the identity mapping on the collection of subspaces of a projective space, created using IdentityMappingOfElementsOfProjectiveSpace
(5.24). 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 reresentative 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 correlationcollineation 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 PG(n,q) This operation (and its synonym) returns the group of projectivities PGL(n+1,q) of the projective space 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 PG(n,q). This operation returns the group of collineations PΓL(n+1,q) of the projective space PG(n,q). If GF(q) has no nontrivial field automorphisms, i.e. when q is prime, the group 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 PG(n,q) This operation (and its synonym) returns the group of special projectivities PSL(n+1,q) of the projective space 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 PG(n,q). This operation returns the correlations and collineations of PG(n,q).
gap> pg := PG(4,3); ProjectiveSpace(4, 3) gap> group := CorrelationCollineationGroup(pg); The FinInG correlationcollineation group PGL(5,3) : 2 gap> pg := PG(3,8); ProjectiveSpace(3, 8) gap> group := CorrelationCollineationGroup(pg); The FinInG correlationcollineation 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 correlationcollineation group PGammaL(5,8) : 2 gap> phi := Embedding(coll,corr); MappingByFunction( The FinInG collineation group PGammaL(5,8), The FinInG corr elationcollineation group PGammaL(5,8) : 2, function( y ) ... end )
5.71 \^
‣ \^ ( 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 PG(n,q). As described in Chapter 4, a point of PG(n,q) is represented by a row vector and a kdimensional subspace of PG(n,q) is represented by a (k+1) × (n+1) matrix.
Consider a point p with row vector (x_{0},x_{1},...,x_{n}), and a collineation or correlation ϕ with underlying matrix A and field automorphism θ. Define the row vector (y_{0},y_{1},...,y_{n}) = ((x_{0},x_{1},...,x_{n})A)^{θ} . When ϕ is a collineation, p^{φ} is the point with underlying row vector (y_{0},y_{1},...,y_{n}). When ϕ is a correlation, p^{φ} is a hyperplane of PG(n,q) with equation y_{0}X_{0} + y_{1}X_{1} + ... y_{n}X_{n} = 0. 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.31) 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 τ from V to itself with matrix M such that the rank of MI equals 1 (where I denotes the (n+1) × (n+1) identity matrix), and (MI)^{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},...,e_{n},e_{n+1} such that e_{1},...,e_{n} generates the kernel of MI, it follows that M equals

It is also a well known fact that all transvections generate the group SL(n+1,q). A transvection gives rise to a projectivity of PG(n,q), we call such an element an elation, and it is a projectivity ϕ fixing a hyperplane H pointwise, and such that there exists exactly one point p ∈ H such that all hyperplanes through p are stabilized. The hyperplane H is called the axis of ϕ, and the point p is called the centre of ϕ. As a transvection is an element of SL(n+1,q), an elation is an element of PSL(n+1,q). An elation is completely determind 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 GF(q). Finally, the group of all elations with a given axis H, acts regularly on the points of PG(n,q) \ H, and is isomorphic with the additive group of the vectorspace 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 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 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 readeval 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 operaion 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 operaion 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