A polarity of a incidence structure is an incidence reversing, bijective, and involutory map on the elements of the incidence structure. It is well known that every polarity of a projective space is just an involutory correlation of the projective space. The construction of correlations of a projective space is described in Chapter 5. In this chapter we describe methods and operations dealing with the construction and use of polarities of projective spaces in FinInG.
Since polarities of a projective space necessarily have an involutory field automorphism as companion automorphism and the standard duality of the projective space as the companion projective space isomorphism, a polarity of a projective space is determined completely by a suitable matrix \(A\). Every polarity of a projective space \(\mathrm{PG}(n,q)\) is listed in the following table, including the conditions on the matrix \(A\).
\(q\) odd | \(q\) even | |
hermitian | \(A^{\theta}=A^T\) | \(A^{\theta}=A^T\) |
symplectic | \(A^T=-A\) | \(A^T=A\), all \(a_{ii}=0\) |
orthogonal | \(A^T=A\) | |
pseudo | \(A^T=A\), not all \(a_{ii}=0\) |
A hermitian polarity of the projective space \(\mathrm{PG}(n,q)\) exists if and only if the field \(\mathrm{GF}(q)\) admits an involutory field automorphism.
It is well known that there is a correspondence between polarities of projective spaces and non-degenerate sesquilinear forms on the underlying vector space. Consider a sesquilinear form \(f\) on the vector space \(V(n+1,q)\). Then \(f\) induces a map on the elements of \(\mathrm{PG}(n,q)\) as follows: every element with underlying subspace \(\alpha\) is mapped to the element with underlying subspace \(\alpha^\perp\), i.e. the subspace of \(V(n+1,q)\) orthogonal to \(\alpha\) with respect to the form \(f\). It is clear that this induced map is a polarity of \(\mathrm{PG}(n,q)\). Also the converse is true, with any polarity of \(\mathrm{PG}(n,q)\) corresponds a sesquilinear form on \(V(n+1,q)\). The above classification of polarities of \(\mathrm{PG}(n,q)\) follows from the classification of sesquilinear forms on \(V(n+1,q)\). For more information, we refer to [HT91] and [KL90]. We mention that the implementation of the action of correlations on projective points (see 5.8) guarantees that a sesquilinear form with matrix \(M\) and field automorphism \(\theta\) corresponds to a polarity with matrix \(M\) and field automorphism \(\theta\) and vice versa.
In FinInG, polarities of projective spaces are always objects in the category IsPolarityOfProjectiveSpace
, which is a subcategory of the category IsProjGrpElWithFrobWithPSIsom
.
‣ PolarityOfProjectiveSpace ( mat, f ) | ( operation ) |
Returns: a polarity of a projective space
The underlying correlation of the projective space is constructed using matrix mat, field f, the identity mapping as field automorphism and the standard duality of the projective space. It is checked whether the matrix mat satisfies the necessary conditions to induce a polarity.
gap> mat := [[0,1,0],[1,0,0],[0,0,1]]*Z(169)^0; [ [ 0*Z(13), Z(13)^0, 0*Z(13) ], [ Z(13)^0, 0*Z(13), 0*Z(13) ], [ 0*Z(13), 0*Z(13), Z(13)^0 ] ] gap> phi := PolarityOfProjectiveSpace(mat,GF(169)); <polarity of PG(2, GF(13^2)) >
‣ PolarityOfProjectiveSpace ( mat, frob, f ) | ( operation ) |
‣ HermitianPolarityOfProjectiveSpace ( mat, f ) | ( operation ) |
Returns: a polarity of a projective space
The underlying correlation of the projective space is constructed using matrix mat, field automorphism frob, f and the standard duality of the projective space. It is checked whether the mat satisfies the necessary conditions to induce a polarity, and whether frob is a non-trivial involutory field automorphism. The second operation only needs the arguments mat and f to construct a hermitian polarity of a projective space, provided the field f allows an involutory field automorphism and mat satisfies the necessary conditions. The latter is checked by constructing the underlying hermitian form.
gap> mat := [[Z(11)^0,0*Z(11),0*Z(11)],[0*Z(11),0*Z(11),Z(11)], > [0*Z(11),Z(11),0*Z(11)]]; [ [ Z(11)^0, 0*Z(11), 0*Z(11) ], [ 0*Z(11), 0*Z(11), Z(11) ], [ 0*Z(11), Z(11), 0*Z(11) ] ] gap> frob := FrobeniusAutomorphism(GF(121)); FrobeniusAutomorphism( GF(11^2) ) gap> phi := PolarityOfProjectiveSpace(mat,frob,GF(121)); <polarity of PG(2, GF(11^2)) > gap> psi := HermitianPolarityOfProjectiveSpace(mat,GF(121)); <polarity of PG(2, GF(11^2)) > gap> phi = psi; true
‣ PolarityOfProjectiveSpace ( form ) | ( operation ) |
Returns: a polarity of a projective space
The polarity of the projective space is constructed using a non-degenerate sesquilinear form form. It is checked whether the given form is non-degenerate.
gap> mat := [[0,1,0,0],[1,0,0,0],[0,0,0,1],[0,0,1,0]]*Z(16)^0; [ [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] ] gap> form := BilinearFormByMatrix(mat,GF(16)); < bilinear form > gap> phi := PolarityOfProjectiveSpace(form); <polarity of PG(3, GF(2^4)) >
‣ PolarityOfProjectiveSpace ( ps ) | ( operation ) |
Returns: a polarity of a projective space
The polarity of the projective space is constructed using the non-degenerate sesquilinear form that defines the polar space ps. When ps is a parabolic quadric in even characteristic, no polarity of the ambient projective space can be associated to ps, and an error message is returned.
gap> ps := HermitianPolarSpace(4,64); H(4, 8^2) gap> phi := PolarityOfProjectiveSpace(ps); <polarity of PG(4, GF(2^6)) > gap> ps := ParabolicQuadric(6,8); Q(6, 8) gap> PolarityOfProjectiveSpace(ps); Error, no polarity of the ambient projective space can be associated to <ps> called from <function "unknown">( <arguments> ) called from read-eval loop at line 11 of *stdin* you can 'quit;' to quit to outer loop, or you can 'return;' to continue brk> quit;
‣ SesquilinearForm ( phi ) | ( attribute ) |
Returns: a sesquilinear form
The sesquilinear form corresponding to the given polarity phi is returned.
gap> mat := [[0,-2,0,1],[2,0,3,0],[0,-3,0,1],[-1,0,-1,0]]*Z(19)^0; [ [ 0*Z(19), Z(19)^10, 0*Z(19), Z(19)^0 ], [ Z(19), 0*Z(19), Z(19)^13, 0*Z(19) ], [ 0*Z(19), Z(19)^4, 0*Z(19), Z(19)^0 ], [ Z(19)^9, 0*Z(19), Z(19)^9, 0*Z(19) ] ] gap> phi := PolarityOfProjectiveSpace(mat,GF(19)); <polarity of PG(3, GF(19)) > gap> form := SesquilinearForm(phi); < non-degenerate bilinear form >
‣ BaseField ( phi ) | ( attribute ) |
Returns: a field
The base field over which the polarity phi was constructed.
gap> mat := [[1,0,0],[0,0,2],[0,2,0]]*Z(5)^0; [ [ Z(5)^0, 0*Z(5), 0*Z(5) ], [ 0*Z(5), 0*Z(5), Z(5) ], [ 0*Z(5), Z(5), 0*Z(5) ] ] gap> phi := PolarityOfProjectiveSpace(mat,GF(25)); <polarity of PG(2, GF(5^2)) > gap> BaseField(phi); GF(5^2)
‣ GramMatrix ( phi ) | ( attribute ) |
Returns: a matrix
The Gram matrix of the polarity phi.
gap> mat := [[1,0,0],[0,0,3],[0,3,0]]*Z(11)^0; [ [ Z(11)^0, 0*Z(11), 0*Z(11) ], [ 0*Z(11), 0*Z(11), Z(11)^8 ], [ 0*Z(11), Z(11)^8, 0*Z(11) ] ] gap> phi := PolarityOfProjectiveSpace(mat,GF(11)); <polarity of PG(2, GF(11)) > gap> GramMatrix(phi); <immutable cmat 3x3 over GF(11,1)>
‣ CompanionAutomorphism ( phi ) | ( attribute ) |
Returns: a field automorphism
The involutory field automorphism accompanying the polarity phi.
gap> mat := [[0,2,0,0],[2,0,0,0],[0,0,0,5],[0,0,5,0]]*Z(7)^0; [ [ 0*Z(7), Z(7)^2, 0*Z(7), 0*Z(7) ], [ Z(7)^2, 0*Z(7), 0*Z(7), 0*Z(7) ], [ 0*Z(7), 0*Z(7), 0*Z(7), Z(7)^5 ], [ 0*Z(7), 0*Z(7), Z(7)^5, 0*Z(7) ] ] gap> phi := HermitianPolarityOfProjectiveSpace(mat,GF(49)); <polarity of PG(3, GF(7^2)) > gap> CompanionAutomorphism(phi); FrobeniusAutomorphism( GF(7^2) )
‣ IsHermitianPolarityOfProjectiveSpace ( phi ) | ( property ) |
Returns: true or false
The polarity phi is a hermitian polarity of a projective space if and only if the underlying matrix is hermitian.
gap> mat := [[0,2,7,1],[2,0,3,0],[7,3,0,1],[1,0,1,0]]*Z(19)^0; [ [ 0*Z(19), Z(19), Z(19)^6, Z(19)^0 ], [ Z(19), 0*Z(19), Z(19)^13, 0*Z(19) ], [ Z(19)^6, Z(19)^13, 0*Z(19), Z(19)^0 ], [ Z(19)^0, 0*Z(19), Z(19)^0, 0*Z(19) ] ] gap> frob := FrobeniusAutomorphism(GF(19^4)); FrobeniusAutomorphism( GF(19^4) ) gap> phi := PolarityOfProjectiveSpace(mat,frob^2,GF(19^4)); <polarity of PG(3, GF(19^4)) > gap> IsHermitianPolarityOfProjectiveSpace(phi); true
‣ IsSymplecticPolarityOfProjectiveSpace ( phi ) | ( property ) |
Returns: true or false
The polarity phi is a symplectic polarity of a projective space if and only if the underlying matrix is symplectic.
gap> mat := [[0,0,1,0],[0,0,0,1],[1,0,0,0],[0,1,0,0]]*Z(8)^0; [ [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ] ] gap> phi := PolarityOfProjectiveSpace(mat,GF(8)); <polarity of PG(3, GF(2^3)) > gap> IsSymplecticPolarityOfProjectiveSpace(phi); true
‣ IsOrthogonalPolarityOfProjectiveSpace ( phi ) | ( property ) |
Returns: true or false
The polarity phi is an orthogonal polarity of a projective space if and only if the underlying matrix is symmetric and the characteristic of the field is odd.
gap> mat := [[1,0,2,0],[0,2,0,1],[2,0,0,0],[0,1,0,0]]*Z(9)^0; [ [ Z(3)^0, 0*Z(3), Z(3), 0*Z(3) ], [ 0*Z(3), Z(3), 0*Z(3), Z(3)^0 ], [ Z(3), 0*Z(3), 0*Z(3), 0*Z(3) ], [ 0*Z(3), Z(3)^0, 0*Z(3), 0*Z(3) ] ] gap> phi := PolarityOfProjectiveSpace(mat,GF(9)); <polarity of PG(3, GF(3^2)) > gap> IsOrthogonalPolarityOfProjectiveSpace(phi); true
‣ IsPseudoPolarityOfProjectiveSpace ( phi ) | ( property ) |
Returns: true or false
The polarity phi is a pseudo-polarity of a projective space if and only if the underlying matrix is symmetric, not all elements on the main diagonal are zero and the characteristic of the field is even.
gap> mat := [[1,0,1,0],[0,1,0,1],[1,0,0,0],[0,1,0,0]]*Z(16)^0; [ [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ], [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ] ] gap> phi := PolarityOfProjectiveSpace(mat,GF(16)); <polarity of PG(3, GF(2^4)) > gap> IsPseudoPolarityOfProjectiveSpace(phi); true
We already mentioned the equivalence between polarities of \(\mathrm{PG}(n,q)\) and sesquilinear forms on \(V(n+1,q)\), hence there is a relation between polarities of \(\mathrm{PG}(n,q)\) and polar spaces induced by sesquilinear forms. The following concepts express these relations geometrically.
Suppose that \(\phi\) is a polarity of \(\mathrm{PG}(n,q)\) and that \(\alpha\) is an element of \(\mathrm{PG}(n,q)\). We call \(\alpha\) a totally isotropic element or an absolute element if and only if \(\alpha\) is incident with \(\alpha^\phi\). An absolute element that is a point is also called an absolute point or an isotropic point. It is clear that an element of \(\mathrm{PG}(n,q)\) is absolute if and only if the underlying vector space is totally isotropic with respect to the sesquilinear form equivalent to \(\phi\). Hence the absolute elements induce a finite classical polar space, the same that is induced by the equivalent sesquilinear form. When \(\phi\) is a pseudo-polarity, the set of absolute elements are the elements of a hyperplane of \(\mathrm{PG}(n,q)\).
We restrict our introduction to finite classical polar spaces in this section to the following examples. Many aspects of these geometries are extensively described in Chapter 7.
‣ GeometryOfAbsolutePoints ( f ) | ( operation ) |
Returns: a polar space or a hyperplane
When f is not a pseudo-polarity, this operation returns the polar space induced by f. When f is a pseudo-polarity, this operation returns the hyperplane containing all absolute elements.
gap> mat := IdentityMat(4,GF(16)); [ [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ] ] gap> phi := HermitianPolarityOfProjectiveSpace(mat,GF(16)); <polarity of PG(3, GF(2^4)) > gap> geom := GeometryOfAbsolutePoints(phi); <polar space in ProjectiveSpace(3,GF(2^4)): x_1^5+x_2^5+x_3^5+x_4^5=0 > gap> mat := [[1,0,0,0],[0,0,1,1],[0,1,1,0],[0,1,0,0]]*Z(32)^0; [ [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ] ] gap> phi := PolarityOfProjectiveSpace(mat,GF(32)); <polarity of PG(3, GF(2^5)) > gap> geom := GeometryOfAbsolutePoints(phi); <a plane in ProjectiveSpace(3, 32)>
‣ AbsolutePoints ( f ) | ( operation ) |
Returns: a set of points
This operation returns all points that are absolute with respect to f.
gap> mat := IdentityMat(4,GF(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, 0*Z(3) ], [ 0*Z(3), 0*Z(3), 0*Z(3), Z(3)^0 ] ] gap> phi := PolarityOfProjectiveSpace(mat,GF(3)); <polarity of PG(3, GF(3)) > gap> points := AbsolutePoints(phi); <points of Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0> gap> List(points); [ <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0>, <a point in Q+(3, 3): x_1^2+x_2^2+x_3^2+x_4^2=0> ]
‣ PolarSpace ( f ) | ( operation ) |
Returns: a polar space
When f is not a pseudo-polarity, this operation returns the polar space induced by f.
gap> mat := [[1,0,0,0],[0,0,1,1],[0,1,1,0],[0,1,0,0]]*Z(32)^0; [ [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ], [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ] ] gap> phi := PolarityOfProjectiveSpace(mat,GF(32)); <polarity of PG(3, GF(2^5)) > gap> ps := PolarSpace(phi); Error, <polarity> is pseudo and does not induce a polar space called from <function "unknown">( <arguments> ) called from read-eval loop at line 10 of *stdin* you can 'quit;' to quit to outer loop, or you can 'return;' to continue brk> quit; gap> mat := IdentityMat(5,GF(7)); [ [ Z(7)^0, 0*Z(7), 0*Z(7), 0*Z(7), 0*Z(7) ], [ 0*Z(7), Z(7)^0, 0*Z(7), 0*Z(7), 0*Z(7) ], [ 0*Z(7), 0*Z(7), Z(7)^0, 0*Z(7), 0*Z(7) ], [ 0*Z(7), 0*Z(7), 0*Z(7), Z(7)^0, 0*Z(7) ], [ 0*Z(7), 0*Z(7), 0*Z(7), 0*Z(7), Z(7)^0 ] ] gap> phi := PolarityOfProjectiveSpace(mat,GF(7)); <polarity of PG(4, GF(7)) > gap> ps := PolarSpace(phi); <polar space in ProjectiveSpace(4,GF(7)): x_1^2+x_2^2+x_3^2+x_4^2+x_5^2=0 >
FinInG constructs polarities of projective spaces as correlations. This allows polarities to be multiplied easily, resulting in a collineation. The resulting collineation is constructed in the correlation group but can be mapped onto its unique representative in the collineation group. We provide an example with two commuting polarities.
gap> mat := [[0,1,0,0],[1,0,0,0],[0,0,0,1],[0,0,1,0]]*Z(5)^0; [ [ 0*Z(5), Z(5)^0, 0*Z(5), 0*Z(5) ], [ Z(5)^0, 0*Z(5), 0*Z(5), 0*Z(5) ], [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0 ], [ 0*Z(5), 0*Z(5), Z(5)^0, 0*Z(5) ] ] gap> phi := HermitianPolarityOfProjectiveSpace(mat,GF(25)); <polarity of PG(3, GF(5^2)) > gap> mat2 := IdentityMat(4,GF(5)); [ [ Z(5)^0, 0*Z(5), 0*Z(5), 0*Z(5) ], [ 0*Z(5), Z(5)^0, 0*Z(5), 0*Z(5) ], [ 0*Z(5), 0*Z(5), Z(5)^0, 0*Z(5) ], [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0 ] ] gap> psi := PolarityOfProjectiveSpace(mat2,GF(25)); <polarity of PG(3, GF(5^2)) > gap> phi*psi = psi*phi; true gap> g := CorrelationCollineationGroup(PG(3,25)); The FinInG correlation-collineation group PGammaL(4,25) : 2 gap> h := CollineationGroup(PG(3,25)); The FinInG collineation group PGammaL(4,25) gap> hom := Embedding(h,g); MappingByFunction( The FinInG collineation group PGammaL(4,25), The FinInG cor relation-collineation group PGammaL(4,25) : 2, function( y ) ... end ) gap> coll := PreImagesRepresentative(hom,phi*psi); < a collineation: <cmat 4x4 over GF(5,2)>, F^5>
generated by GAPDoc2HTML