Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 Bib Ind
 Top of Book   Previous Chapter   Next Chapter 

10 Geometry Morphisms
 10.1 Geometry morphisms in FinInG
  10.1-1 IsGeometryMorphism

  10.1-2 Intertwiner

  10.1-3 IsomorphismPolarSpaces
 10.2 When will you use geometry morphisms?
 10.3 Natural geometry morphisms
  10.3-1 NaturalEmbeddingBySubspace

  10.3-2 NaturalEmbeddingByFieldReduction

  10.3-3 BlownUpProjectiveSpace

  10.3-4 BlownUpProjectiveSpaceBySubfield

  10.3-5 BlownUpSubspaceOfProjectiveSpace

  10.3-6 BlownUpSubspaceOfProjectiveSpaceBySubfield

  10.3-7 IsDesarguesianSpreadElement

  10.3-8 NaturalEmbeddingBySubField

  10.3-9 NaturalProjectionBySubspace
 10.4 Some special kinds of geometry morphisms
  10.4-1 KleinCorrespondence

  10.4-2 NaturalDuality

  10.4-3 ProjectiveCompletion

10 Geometry Morphisms

Here we describe what is meant by a geometry morphism in FinInG and the various operations and tools available to the user.

10.1 Geometry morphisms in FinInG

A geometry morphism from P to P' is defined to be a map from the elements of P to the elements of P' which preserves incidence and induces a function from the type set of P to the type set of P'. For instance, a correlation and a collineation are examples of geometry morphisms, but they have been dealt with in more specific ways in FinInG. We will mainly be concerned with geometry morphisms where the source and range are different. Hence, the natural embedding of a projective space in a larger projective space, the mapping induced by field reduction, and the Klein correspondence are examples of such geometry morphisms.

10.1-1 IsGeometryMorphism
> IsGeometryMorphism( family )

The category IsGeometryMorphism represents a special object in FinInG which carries attributes and the given element map. The element map is given as a IsGeneralMapping, and so has a source and range.

gap> ShowImpliedFilters(IsGeometryMorphism);
Implies:
   IsGeneralMapping
   IsTotal
   Tester(IsTotal)
   IsSingleValued
   Tester(IsSingleValued)

The usual operations of ImagesElm, ImagesSet, PreImagesElm, PreImagesSet work for geometry morphisms, as well as the overload operator \^. Since Image is a GAP function, we advise the user to not use this for geometry morphisms.

For some geometry morphisms, there is also an accompanying intertwiner for the automorphism groups of the source range. Given a geometry morphism f from P to P', an intertwiner phi is a map from the automorphism group of P to the automorphism group of P', such that for every element p of P and every automorphism g of P, we have

f(p^g) = f(p)^{\phi(g)} .

10.1-2 Intertwiner
> Intertwiner( f )( attribute )

Returns: a group homomorphism

The arguments f is a geometry morphism. If f comes equipped with a natural intertwiner from the the automorphism group of the source of f to the automorphism group to the image of f, then the user may be able to obtain the intertwiner by calling this operation (see the individual geometry morphism constructions). Here is a simple example of the intertwiner for the isomorphism of two polar spaces (see IsomorphismPolarSpaces (10.1-3)).

gap> form := BilinearFormByMatrix( IdentityMat(3,GF(3)), GF(3) );
< bilinear form >
gap> ps := PolarSpace(form);
<polar space of rank 2 over GF(3)>
gap> pq := ParabolicQuadric(2,3);
Q(2, 3)
gap> iso := IsomorphismPolarSpaces(ps, pq);
<geometry morphism from <Elements of <polar space of rank 2 over GF(
3)>> to <Elements of Q(2, 3)>>
gap> KnownAttributesOfObject(iso);
[ "Range", "Source", "Intertwiner" ]
gap> hom := Intertwiner(iso);;
 

10.1-3 IsomorphismPolarSpaces
> IsomorphismPolarSpaces( ps1, ps2 )( operation )
> IsomorphismPolarSpaces( ps1, ps2, boolean )( operation )

Returns: a geometry morphism

The arguments ps1 and ps2 are equivalent polar spaces, and this function returns a geometry isomorphism between them. The optional third argument boolean can take either true or false as input, and then our operation will or will not compute the intertwiner accordingly. The user may wish that the intertwiner is not computed when working with large polar spaces. The default (when calling the operation with two arguments) is set to true, and in this case, if at least one of ps1 or ps2 has a collineation group installed as an attribute, then an intertwining homomorphism is installed as an attribute. That is, we also obtain a natural group isomorphism from the collineation group of ps1 onto the collineation group of ps2 (see also Intertwiner (10.1-2)).

gap> id := IdentityMat(6, GF(5));;
gap> form := BilinearFormByMatrix( id, GF(5) );
< bilinear form >
gap> ps := PolarSpace( form );
<polar space of rank 5 over GF(5)>
gap> PolarSpaceType( ps );
"hyperbolic"
gap> quadric := HyperbolicQuadric( 5, 5 );
Q+(5, 5)
gap> iso := IsomorphismPolarSpaces( ps, quadric );
<geometry morphism from <Elements of <polar space of rank 5 over GF(
5)>> to <Elements of Q+(5, 5)>>
gap> HasCollineationGroup( ps );
true
gap> hom := Intertwiner( iso );;
gap> ImagesSet(hom, SpecialIsometryGroup( ps ));
<projective group with Frobenius of size 14508000000 with 3 generators>
 

Both functions also have a "no check" version.

> IsomorphismPolarSpacesNC( ps1, ps2 )( operation )
> IsomorphismPolarSpacesNC( ps1, ps2, boolean )( operation )

Returns: a geometry morphism

10.2 When will you use geometry morphisms?

When using groups in GAP, we often use homomorphisms to pass from one situation to another, even though mathematically it may appear to be unneccessary, there can be ambiguities if the functionality is too flexible. This also applies to finite geometry. Take for example the usual exercise of thinking of a hyperplane in a projective space as another projective space. To conform with similar things in GAP, the right thing to do is to embed one projective space into another, rather than having one projective space automatically a substructure of another. The reason for this is that there are many ways one can do this embedding, even though we may dispense with this choice when we are working mathematically. So to avoid ambiguity, we stipulate that one should construct the embedding explicitly. How this is done will be the subject of the following section.

10.3 Natural geometry morphisms

The most natural of geometry morphisms include, for example, the embedding of a projective space into another via a subspace, or the projection of a polar space to a smaller polar space of the same type via a totally isotropic subspace.

10.3-1 NaturalEmbeddingBySubspace
> NaturalEmbeddingBySubspace( geom1, geom2, v )( operation )
> NaturalEmbeddingBySubspaceNC( geom1, geom2, v )( operation )

Returns: a geometry morphism

The arguments geom1 and geom2 are both projective spaces, or both polar spaces, and v is an element of a projective or polar space. This function returns a geometry morphism representing the natural embedding of geom1 into geom2 as the subspace v. Hence geom1 and v must be equivalent as geometries. The operation NaturalEmbeddingBySubspaceNC is the ``no check'' version of NaturalEmbeddingBySubspace.

gap> geom1 := ProjectiveSpace(2, 3);
PG(2, 3)
gap> geom2 := ProjectiveSpace(3, 3);
PG(3, 3)
gap> planes := Planes(geom2);
<planes of PG(3, 3)>
gap> hyp := Random(planes);
<a plane in PG(3, 3)>
gap> em := NaturalEmbeddingBySubspace(geom1, geom2, hyp);
<geometry morphism from <Elements of PG(2, 3)> to <Elements of PG(3, 3)>>
gap> points := Points(geom1);
<points of PG(2, 3)>
gap> x := Random(points);
<a point in PG(2, 3)>
gap> x^em;
<a point in PG(3, 3)>
 

Another example, this time with polar spaces:

gap> h1 := HermitianVariety(2, 3^2);
H(2, 3^2)
gap> h2 := HermitianVariety(3, 3^2);
H(3, 3^2)
gap> pg := AmbientSpace( h2 );    
PG(3, 9)
gap> pi := VectorSpaceToElement( pg, [[1,0,0,0],[0,1,0,0],[0,0,1,0]] * Z(9)^0 );
<a plane in PG(3, 9)>
gap> em := NaturalEmbeddingBySubspace( h1, h2, pi );
<geometry morphism from <Elements of H(2, 3^2)> to <Elements of H(3, 3^2)>>
 

10.3-2 NaturalEmbeddingByFieldReduction
> NaturalEmbeddingByFieldReduction( geom1, geom2 )( operation )
> NaturalEmbeddingByFieldReduction( geom1, geom2, B )( operation )
> NaturalEmbeddingByFieldReduction( geom1, geom2, boolean )( operation )

Returns: a geometry morphism

The arguments geom1 and geom2 are projective or polar spaces. This function returns a geometry morphism representing the natural embedding of geom1 into geom2 via field reduction. By natural for projective spaces, we mean that the embedding is induced by considering the field F_1 of geom1 as a vector space over the field F_2 of geom2, perhaps with a choice of basis B in the case we have projective spaces. If geom1 and geom2 are polar spaces, then the only such possible embeddings are listed in the table below (see [Gil08]):

Table: Field reduction of polar spaces
Polar Space 1 Polar Space 2 Conditions
W(2n-1,q^a) W(2na-1,q) --
Q^+(2n-1,q^a) Q^+(2na-1,q) --
Q^-(2n-1,q^a) Q^-(2na-1,q) --
Q(2n,q^2a) Q^+(2(2n+1)a-1,q) q=1 mod 4
Q(2n,q^2a) Q^-(2(2n+1)a-1,q) q=3 mod 4
Q(2n,q^2a+1) Q((2a+1)(2n+1)-1,q) q odd
H(n,q^2a+1) H((2a+1)(n+1)-1,q) q square
H(2n,q^2a) Q^+(2a(2n+1)-1,q) q odd square
H(2n-1,q^2a) Q^-(4an-1,q) q odd square
H(n,q^2a) W(2n-1,q) --

 


The geometry morphism also comes equipped with an intertwiner (see Intertwiner (10.1-2)). In the case polar spaces, this intertwiner has as its domain the isometry group of geom1. The optional third argument boolean can take either true or false as input, and then our operation will or will not compute the intertwiner accordingly. The user may wish that the intertwiner is not computed when embedding into large polar spaces. The default (when calling the operation with two arguments) is set to true. Here is a simple example where the geometry morphism takes the points of PG(2,9) and maps them to the lines of PG(5,3).

gap> pg1 := ProjectiveSpace(2,9);
PG(2, 9)
gap> pg2 := ProjectiveSpace(5,3);
PG(5, 3)
gap> em := NaturalEmbeddingByFieldReduction(pg1, pg2);
<geometry morphism from <Elements of PG(2, 9)> to <Elements of PG(5, 3)>>
gap> line := Random( Lines(pg1) );
<a line in PG(2, 9)>
gap> solid := line ^ em;
<a solid in PG(5, 3)>
gap> l := em!.prefun(solid);
<a line in PG(2, 9)>
 

Suppose we have field reduction from a polar space P_1 to a polar space P_2, and suppose that they are both defined by sesquilinear forms. Let M be the Gram matrix for the sesquilinear form defining P_1 and let {b_1,..,b_m} be a basis for the larger defining field of F P_1 over the smaller defining field K of P_2. Now the BlownUpMat command takes as input a matrix mat over F and returns the matrix of the linear transformation on the row space K^mn with respect to the K-basis whose vectors are {b_1 v_1, ... b_m v_1, ..., b_mv_n}, where {v_1,...,v_n} is a basis for F^n. Hence if we have a singular vector x=(x_1,...,x_n) of P_1, then the blow-up of x will be singular if and only if for all i,j in {1,...,m}, we have

\sum_{k=1}^n Coeff(x_kb_i)\cdot Coeff(M_k\cdot x b_j)=0

where Coeff is the map which takes the coefficients of an element of F with respect to {b_1,..,b_m}, and M_k is the k-th row of M.

In this example, we consider the image of the Hermitian variety H(2,25) in Q^-(5,5).

gap> h := HermitianVariety(2, 5^2);
H(2, 5^2)
gap> quadric := EllipticQuadric(5, 5);
Q-(5, 5)
gap> em := NaturalEmbeddingByFieldReduction(h, quadric);
#I  Testing degeneracy of the *associated bilinear form*
<geometry morphism from <Elements of H(2, 5^2)> to <Elements of Q-(5, 5)>>
gap> points := AsList(Points(h));;
gap> image := ImagesSet(em, points);;
gap> image[1];
<a line in Q-(5, 5)>
gap> hom := Intertwiner( em );;
gap> g := Range( hom );
<projective group with Frobenius of size 378000 with 2 generators>
gap> OrbitLengths(g, image);
[ 126 ]
 

10.3-3 BlownUpProjectiveSpace
> BlownUpProjectiveSpace( basis, pg1 )( operation )

Returns: a projective space

Blows up the projective space pg1 with respect to the basis using field reduction. If the argument pg1 is has projective dimension r-1 over the finite field GF(q^t), and basis is a basis of GF(q^t) over GF(q), then this functions returns a projective space of dimension rt-1 over GF(q).

10.3-4 BlownUpProjectiveSpaceBySubfield
> BlownUpProjectiveSpaceBySubfield( subfield, pg )( operation )

Returns: a projective space

Blows up a projective space pg with respect to the standard basis of the basefield of pg over the subfield.

10.3-5 BlownUpSubspaceOfProjectiveSpace
> BlownUpSubspaceOfProjectiveSpace( basis, subspace )( operation )

Returns: a subspace of a projective space

Blows up a subspace of a projective space with respect to the basis using field reduction and returns it a subspace of the projective space obtained from blowing up the ambient projective space of subspace with respect to basis using field reduction.

10.3-6 BlownUpSubspaceOfProjectiveSpaceBySubfield
> BlownUpSubspaceOfProjectiveSpaceBySubfield( subfield, subspace )( operation )

Returns: a subspace of a projective space

Blows up a subspace of a projective space with respect to the standard basis of the basefield of subspace over the subfield, using field reduction and returns it a subspace of the projective space obtained from blowing up the ambient projective space of subspace over the subfield.

10.3-7 IsDesarguesianSpreadElement
> IsDesarguesianSpreadElement( basis, subspace )( operation )

Returns: true or false

Checks wether the subspace is a subspace which is obtained from a blowing up a projective point using field reduction with respect to basis.

10.3-8 NaturalEmbeddingBySubField
> NaturalEmbeddingBySubField( geom1, geom2 )( operation )
> NaturalEmbeddingBySubField( geom1, geom2, boolean )( operation )

Returns: a geometry morphism

The arguments geom1 and geom2 are projective or polar spaces of the same dimension. This function returns a geometry morphism representing the natural embedding of geom1 into geom2 as a subfield geometry. If geom1 and geom2 are polar spaces, then the only such possible embeddings are listed in the table below (see [KL90]):

Table: Subfield embeddings of polar spaces
Polar Space 1 Polar Space 2 Conditions
W(2n-1,q) W(2n-1,q^a) --
W(2n-1,q) H(2n-1,q^2) --
H(d,q^2) H(d,q^2r) r odd
O^epsilon(d,q) H(d,q^2) q odd
O^epsilon(d,q) O^epsilon'(d,q^r) epsilon=(epsilon')^r

 


The geometry morphism also comes equipped with an intertwiner (see Intertwiner (10.1-2)). The optional third argument boolean can take either true or false as input, and then our operation will or will not compute the intertwiner accordingly. The user may wish that the intertwiner is not computed when embedding into large polar spaces. The default (when calling the operation with two arguments) is set to true. Here is a simple example where the geometry morphism takes the points of PG(2,3) and embeds them into PG(2,9).

gap> pg1 := ProjectiveSpace(2, 3);
PG(2, 3)
gap> pg2 := ProjectiveSpace(2, 9);
PG(2, 9)
gap> em := NaturalEmbeddingBySubfield(pg1,pg2);
<geometry morphism from <Elements of PG(2, 3)> to <Elements of PG(2, 9)>>
gap> points := AsList(Points( pg1 ));
[ <a point in PG(2, 3)>, <a point in PG(2, 3)>, <a point in PG(2, 3)>, 
  <a point in PG(2, 3)>, <a point in PG(2, 3)>, <a point in PG(2, 3)>, 
  <a point in PG(2, 3)>, <a point in PG(2, 3)>, <a point in PG(2, 3)>, 
  <a point in PG(2, 3)>, <a point in PG(2, 3)>, <a point in PG(2, 3)>, 
  <a point in PG(2, 3)> ]
gap> image := ImagesSet(em, points);
[ <a point in PG(2, 9)>, <a point in PG(2, 9)>, <a point in PG(2, 9)>, 
  <a point in PG(2, 9)>, <a point in PG(2, 9)>, <a point in PG(2, 9)>, 
  <a point in PG(2, 9)>, <a point in PG(2, 9)>, <a point in PG(2, 9)>, 
  <a point in PG(2, 9)>, <a point in PG(2, 9)>, <a point in PG(2, 9)>, 
  <a point in PG(2, 9)> ]
 

In this example, we embed W(5,3) in H(5,3^2).

gap> w := SymplecticSpace(5, 3);
W(5, 3)
gap> h := HermitianVariety(5, 3^2);
H(5, 3^2)
gap> em := NaturalEmbeddingBySubfield(w, h);
<geometry morphism from <Elements of W(5, 3)> to <Elements of H(5, 3^2)>>
gap> points := AsList(Points(w));;
gap> image := ImagesSet(em, points);;
gap> ForAll(image, x -> x in h);
true
 

10.3-9 NaturalProjectionBySubspace
> NaturalProjectionBySubspace( ps, v )( operation )
> NaturalProjectionBySubspaceNC( ps, v )( operation )

Returns: a geometry morphism

The argument ps is a projective or polar space, and v is a subspace of ps. In the case that ps is a projective space, this operation returns a geometry morphism from the subspaces containing v to the subspaces of a smaller projective space over the same field. Similarly, if ps is a polar space, this operation returns a geometry morphism from the totally singular subspaces containing v to a polar space of smaller dimension, but of the same polar space type. The operation NaturalProjectionBySubspaceNC performs in exactly the same way as NaturalProjectionBySubspace except that there are fewer checks such as whether v is a subspace of ps, and whether the input of the function and preimage of the returned geometry morphism is valid or not. We should also mention here a shorthand for this operation which is basically and overload of the quotient operation. So, for example, SymplecticSpace(3, 3) / v achieves the same thing as NaturalProjectionBySubspace(SymplecticSpace(3,3), v).

gap> ps := HyperbolicQuadric(5,3);
Q+(5, 3)
gap> x := Random( Points(ps) );;
gap> planes_on_x := AsList( Planes(x) );
[ <a plane in Q+(5, 3)>, <a plane in Q+(5, 3)>, <a plane in Q+(5, 3)>, 
  <a plane in Q+(5, 3)>, <a plane in Q+(5, 3)>, <a plane in Q+(5, 3)>, 
  <a plane in Q+(5, 3)>, <a plane in Q+(5, 3)> ]
gap> proj := NaturalProjectionBySubspace(ps, x);
<geometry morphism from <Elements of Q+(5, 
3)> to <Elements of <polar space of rank 3 over GF(3)>>>
gap> image := ImagesSet(proj, planes_on_x);
[ <a line in Q+(3, 3)>, <a line in Q+(3, 3)>, <a line in Q+(3, 3)>, 
  <a line in Q+(3, 3)>, <a line in Q+(3, 3)>, <a line in Q+(3, 3)>, 
  <a line in Q+(3, 3)>, <a line in Q+(3, 3)> ]
 

10.4 Some special kinds of geometry morphisms

In this section we provide some more specialised geometry morphisms, that are commonly used in finite geometry.

10.4-1 KleinCorrespondence
> KleinCorrespondence( quadric )( operation )

Returns: a geometry morphism

The argument quadric is a 5-dimensional hyperbolic quadric Q+^(5,q), and this function returns the Klein correspondence from the lines of PG(3,q) to the points of quadric.

gap> quadric := HyperbolicQuadric(5,3);                                         
Q+(5, 3)
gap> k := KleinCorrespondence( quadric );
#I  Finding base change...
#I  Computing nice monomorphism...
<geometry morphism from <lines of PG(3, 3)> to <points of Q+(5, 3)>>
gap> pg := ProjectiveSpace(3, 3);
PG(3, 3)
gap> l := Random( Lines(pg) );
<a line in PG(3, 3)>
gap> l^k;
<a point in Q+(5, 3)>
 

10.4-2 NaturalDuality
> NaturalDuality( gq )( operation )

Returns: a geometry morphism

The argument gq is either the symplectic generalised quadrangle W(3,q) or the hermitian generalised quadrangle H(3,q^2). By the Klein correspondence, the lines of W(3,q) are mapped to the points of Q(4,q), which results in a point-line duality from W(3,q) onto Q(4,q). Likewise, the Klein correspondence induces a duality between H(3,q^2) and Q^-(5,q). At the moment, the geometry morphism returned is a map from lines to points. This operation does not require that the input is the canonical version of the generalised quadrangle; it suffices that the input has the correct polarity type.

gap> w := SymplecticSpace(3,5);
W(3, 5)
gap> lines:=AsList(Lines(w));;
#I  Computing nice monomorphism...
gap> duality := NaturalDuality(w);
#I  Finding base change...
#I  No intertwiner computed. One of the polar spaces must have a collineation 
group computed
<geometry morphism from <lines of W(3, 5)> to <points of Q(4, 5)>>
gap> l:=lines[1];
<a line in W(3, 5)>
gap> l^duality;
<a point in Q(4, 5)>
gap> PreImageElm(duality,last);
<a line in PG(3, 5)>
 

10.4-3 ProjectiveCompletion
> ProjectiveCompletion( as )( operation )

Returns: a geometry morphism

The argument as is an affine space. This operation returns an embedding of as into the projective space ps of the same dimension, and over the same field. For example, the point (x, y, z) goes to the projective point with homogeneous coordinates (1, x, y, z). An intertwiner is unnecessary, CollineationGroup(as) is a subgroup of CollineationGroup(ps).

gap> as := AffineSpace(3,5);
AG(3, 5)
gap> map := ProjectiveCompletion(as);
<geometry morphism from <Elements of AG(3, 5)> to <Elements of PG(3, 5)>>
gap> p := Random( Points(as) );
<a point in AG(3, 5)>
gap> p^map;
<a point in PG(3, 5)>
 
 Top of Book   Previous Chapter   Next Chapter 
Goto Chapter: Top 1 2 3 4 5 6 7 8 9 10 11 12 13 Bib Ind

generated by GAPDoc2HTML