14 Subgeometries of projective spaces

Let \(S=(P,L,I)\) be a point-line incidence geometry. In case \(S\) is a projective space over a finite field, it is clear that every line (and every subspace as well) can be identified with the set of points incident with it. Furthermore, the incidence relation \(I\) is then symmetrised containment. To define a subgeometry mathematically, we follow [Dem97]. Let \(P' \subset P\) and let \(L'\) be a set of subsets of \(P'\), such that every \(l' \in L'\) is a subset of exactly one line \(l \in L\). If \(S'=(P',L',I)\) is a projective space again, then we call \(S'\) a *subgeometry* of \(S\). Note that in general the subspaces of \(S'\) will be subsets of subspaces of \(S\).

A typical example of a subgeometry is a Baer subplane of a projective plane. In this example, with \(S'\) the Baer subplane of the projective plane \(S\), one could say that a point of \(S'\) is indeed a point of \(S\), but a line of \(S'\), is not a line of \(S\). If one considers a line of \(S'\) as a set of points of \(S'\), then a line of \(S'\) is a subset of the set of points on a line of \(S\). Another example is the subgeometry of a projective space induced by a subspace \(\pi\). In this example, clearly, the set of elements of the induced subgeometry can, mathematically, be considered as a subset of the set of elements of \(S\).

The same considerations apply for classical polar spaces. These consideration have implications for the behaviour of certain operations in **FinInG**, e.g. when computing the span and meet of different elements.

Using geometry morphisms, and more particular a function like `NaturalEmbeddingBySubField`

, one can deal in an indirect way with subgeometries. However, using `NaturalEmbeddingBySubField`

is not flexible, and typical problems such as considering a subgeometry determined by a user chosen frame and a subfield, cannot be handled easily. Therefore **FinInG** provides some functions to naturally construct subgeometries of projective spaces.

A subgeometry in a projective space is completely determined by a frame of the projective space and a subfield of the base field of the projective space. The *standard frame* in an \(n\)-dimensional projective space \(PG(n,q)\) is the set of \(n+2\) points represented by \((1,0,\ldots,0),(0,1,\ldots,0),\ldots,(0,0,\ldots,1),(1,1,\ldots,1)\). The subgeometry determined by the standard frame will be called *canonical*. Note that different frames may determine the same subgeometry (over a fixed subfield).

For a given subfield \(GF(q') \subset GF(q)\), the canonical subgeometry determined by the standard frame in \(PG(n,q)\) is mathematically spoken the image of the **FinInG** geometry morphism `NaturalEmbeddingBySubField`

of the projective space \(PG(n,q')\). The coordinates of the points of the subgeometry will be exclusively over the subfield \(GF(q')\), as are the coordinates of the vectors after normalizing defining any subspace of the subgeometry. Clearly, the Frobenius automorphism which maps \(x\) to \(x^{q'}\) fixes all elements of the subgeometry.

For an arbitrary frame of \(PG(n,q)\) and a subfield \(GF(q')\), there exists a natural collineation of \(PG(n,q)\) which fixes the subgeometry pointwise. This collineation is the conjugation of the Frobenius automorphism by the unique collineation mapping the defining frame of the subgeometry to the standard frame of \(PG(n,q)\), i.e. the frame defining the canonical subgeometry over \(GF(q')\). Upon construction of a subgeometry, both collineations will be computed, and are of use when dealing with the full collineation group of a subgeometry. As for any incidence geometry in **FinInG**, operations to compute this collineation group as well as particular action functions for subgeometries are provided.

Subgeometries of projective spaces are constructed in a subcategory of `IsProjectiveSpace`

, as such, all operations applicable to projective spaces, are naturally applicable to subgeometries. Subspaces of subgeometries are constructed in a subcategory of `IsSubspaceOfProjectiveSpace`

. Hence, operations applicable to subspaces of projective spaces, are naturally applicable to subspaces of subgeometries.

`‣ IsSubgeometryOfProjectiveSpace` | ( category ) |

This category is a subcategory of `IsProjectiveSpace`

, and contains all subgeometries of projective spaces. Note that mathematically, a subspace of a projective space is also a subgeometry. However, in **FinInG**, subspaces of a projective space are constructed in a category that is not a subcategory of `IsProjectiveSpace`

. Since `IsSubgeometryOfProjectiveSpace`

is a subcategory of `IsProjectiveSpace`

, all operations applicable to projective spaces, are naturally applicable to subgeometries of projective spaces.

`‣ IsSubspaceOfSubgeometryOfProjectiveSpace` | ( category ) |

`‣ IsSubspacesOfSubgeometryOfProjectiveSpace` | ( category ) |

A subspace of a subgeometry belongs to the category `IsSubspaceOfSubgeometryOfProjectiveSpace`

.

`‣ CanonicalSubgeometryOfProjectiveSpace` ( pg, subfield ) | ( operation ) |

`‣ CanonicalSubgeometryOfProjectiveSpace` ( pg, q ) | ( operation ) |

Returns: a subgeometry of `pg`

This operation returns the subgeometry of `pg` induced by the standard frame over the subfield `subfield`. Alternatively, a prime power `q` can be used as the order of the subfield. It is checked whether the user specified subfield is indeed a subfield of the base field of `pg`. If the subfield equals the base field of `pg`, the projective space `pg` is returned.

gap> pg := PG(2,25); ProjectiveSpace(2, 25) gap> sub := CanonicalSubgeometryOfProjectiveSpace(pg,GF(5)); Subgeometry PG(2, 5) of ProjectiveSpace(2, 25) gap> CategoriesOfObject(sub); [ "IsIncidenceStructure", "IsIncidenceGeometry", "IsLieGeometry", "IsProjectiveSpace", "IsSubgeometryOfProjectiveSpace" ] gap> pg := PG(3,3^6); ProjectiveSpace(3, 729) gap> sub := CanonicalSubgeometryOfProjectiveSpace(pg,3^2); Subgeometry PG(3, 9) of ProjectiveSpace(3, 729) gap> sub := CanonicalSubgeometryOfProjectiveSpace(pg,3^3); Subgeometry PG(3, 27) of ProjectiveSpace(3, 729) gap> sub := CanonicalSubgeometryOfProjectiveSpace(pg,3^6); ProjectiveSpace(3, 729)

`‣ RandomFrameOfProjectiveSpace` ( pg ) | ( operation ) |

Returns: a set of points of `pg`, being a frame. Note that the returned object is also a set in the GAP sense, i.e. an ordered list without duplicates.

gap> pg := PG(1,5^5); ProjectiveSpace(1, 3125) gap> frame := RandomFrameOfProjectiveSpace(pg); [ <a point in ProjectiveSpace(1, 3125)>, <a point in ProjectiveSpace(1, 3125)> , <a point in ProjectiveSpace(1, 3125)> ] gap> Length(frame); 3 gap> pg := PG(6,2^2); ProjectiveSpace(6, 4) gap> frame := RandomFrameOfProjectiveSpace(pg); [ <a point in ProjectiveSpace(6, 4)>, <a point in ProjectiveSpace(6, 4)>, <a point in ProjectiveSpace(6, 4)>, <a point in ProjectiveSpace(6, 4)>, <a point in ProjectiveSpace(6, 4)>, <a point in ProjectiveSpace(6, 4)>, <a point in ProjectiveSpace(6, 4)>, <a point in ProjectiveSpace(6, 4)> ] gap> Length(frame); 8

`‣ IsFrameOfProjectiveSpace` ( list ) | ( operation ) |

Returns: true or false

When `list` is a list of points of a projective space, this operation returns true if and only if `list` constitutes a frame of the projective space. It is checked as well whether all points in `list` belong to the same projective space.

gap> pg := PG(1,7^3); ProjectiveSpace(1, 343) gap> p1 := VectorSpaceToElement(pg,[1,1]*Z(7)^0); <a point in ProjectiveSpace(1, 343)> gap> p2 := VectorSpaceToElement(pg,[1,2]*Z(7)^0); <a point in ProjectiveSpace(1, 343)> gap> p3 := VectorSpaceToElement(pg,[1,3]*Z(7)^0); <a point in ProjectiveSpace(1, 343)> gap> IsFrameOfProjectiveSpace([p1,p2,p3]); true

`‣ SubgeometryOfProjectiveSpaceByFrame` ( pg, list, field ) | ( operation ) |

`‣ SubgeometryOfProjectiveSpaceByFrame` ( pg, list, q ) | ( operation ) |

Returns: a subgeometry of `pg`

The argument `pg` is a projective space which is not a subgeometry itself, the argument `list` is a list of points of `pg` defining a frame of `pg`, and finally the argument `field` is a subfield of the base field of `pg`. Alternatively, the argument `q` is the order of a subfield of the base field of `pg`. This method returns the subgeometry defined by the frame in `list` and the subfield `field` of the subfield \(GF(\textit{q})\). This method checks whether the subfield `field` or the field \(GF(\textit{q})\) is really a subfield of the base field of `pg` and whether the list of points in `list` is a frame of `pg`. Note also that it is currently not possible to construct subgeometries recursively, so `pg` may not be a subgeometry itself. If the specified subfield equals the base field of `pg`, then the projective space `pg` itself is returned.

gap> pg := PG(3,3^6); ProjectiveSpace(3, 729) gap> frame := RandomFrameOfProjectiveSpace(pg); [ <a point in ProjectiveSpace(3, 729)>, <a point in ProjectiveSpace(3, 729)>, <a point in ProjectiveSpace(3, 729)>, <a point in ProjectiveSpace(3, 729)>, <a point in ProjectiveSpace(3, 729)> ] gap> sub1 := SubgeometryOfProjectiveSpaceByFrame(pg,frame,GF(3)); Subgeometry PG(3, 3) of ProjectiveSpace(3, 729) gap> sub2 := SubgeometryOfProjectiveSpaceByFrame(pg,frame,3^2); Subgeometry PG(3, 9) of ProjectiveSpace(3, 729) gap> sub3 := SubgeometryOfProjectiveSpaceByFrame(pg,frame,3^3); Subgeometry PG(3, 27) of ProjectiveSpace(3, 729) gap> sub4 := SubgeometryOfProjectiveSpaceByFrame(pg,frame,3^6); ProjectiveSpace(3, 729)

`‣ UnderlyingVectorSpace` ( sub ) | ( operation ) |

`‣ AmbientSpace` ( sub ) | ( operation ) |

Let \(P\) be a projective space over the field \(F\). Let `sub` be a subgeometry of \(P\) over the subfield \(F'\). The underlying vector space of `sub` is defined as the underlying vector space of \(P\) (which is a vector space over the field \(F\)). The ambient space of a subgeometry `sub` is the projective space \(P\).

gap> pg := PG(2,5^6); ProjectiveSpace(2, 15625) gap> sub1 := CanonicalSubgeometryOfProjectiveSpace(pg,5); Subgeometry PG(2, 5) of ProjectiveSpace(2, 15625) gap> UnderlyingVectorSpace(pg); ( GF(5^6)^3 ) gap> UnderlyingVectorSpace(sub1); ( GF(5^6)^3 ) gap> AmbientSpace(sub1); ProjectiveSpace(2, 15625) gap> sub2 := CanonicalSubgeometryOfProjectiveSpace(pg,5^3); Subgeometry PG(2, 125) of ProjectiveSpace(2, 15625) gap> AmbientSpace(sub2); ProjectiveSpace(2, 15625) gap> UnderlyingVectorSpace(sub2); ( GF(5^6)^3 ) gap> frame := RandomFrameOfProjectiveSpace(pg); [ <a point in ProjectiveSpace(2, 15625)>, <a point in ProjectiveSpace(2, 15625)>, <a point in ProjectiveSpace(2, 15625)>, <a point in ProjectiveSpace(2, 15625)> ] gap> sub3 := SubgeometryOfProjectiveSpaceByFrame(pg,frame,5^2); Subgeometry PG(2, 25) of ProjectiveSpace(2, 15625) gap> AmbientSpace(sub3); ProjectiveSpace(2, 15625) gap> UnderlyingVectorSpace(sub3); ( GF(5^6)^3 )

`‣ DefiningFrameOfSubgeometry` ( sub ) | ( attribute ) |

Returns: a set of projective points

This attribute returns a frame of the ambient space of `sub` defining it. Note that different frames might define the same subgeometry, but the frame used to constructed `sub` is stored at construction, and it is exactly this stored object that is returned by this attribute. The returned object is a set of points, and it is also a set in the GAP sense, i.e. an ordered list without duplicates.

gap> pg := PG(2,2^4); ProjectiveSpace(2, 16) gap> sub := CanonicalSubgeometryOfProjectiveSpace(pg,2); Subgeometry PG(2, 2) of ProjectiveSpace(2, 16) gap> frame := DefiningFrameOfSubgeometry(sub); [ <a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)> ] gap> List(frame,x->Unpack(UnderlyingObject(x))); [ [ Z(2)^0, 0*Z(2), 0*Z(2) ], [ 0*Z(2), Z(2)^0, 0*Z(2) ], [ 0*Z(2), 0*Z(2), Z(2)^0 ], [ Z(2)^0, Z(2)^0, Z(2)^0 ] ] gap> frame := RandomFrameOfProjectiveSpace(pg); [ <a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)> ] gap> sub := SubgeometryOfProjectiveSpaceByFrame(pg,frame,2^2); Subgeometry PG(2, 4) of ProjectiveSpace(2, 16) gap> def := DefiningFrameOfSubgeometry(sub); [ <a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)> ] gap> List(def,x->Unpack(UnderlyingObject(x))); [ [ Z(2)^0, 0*Z(2), Z(2^4)^9 ], [ Z(2)^0, Z(2^4)^4, Z(2^4)^11 ], [ Z(2)^0, Z(2^4)^2, Z(2^2)^2 ], [ Z(2)^0, Z(2^2)^2, Z(2^4)^14 ] ] gap> StandardFrame(sub); [ <a point in Subgeometry PG(2, 4) of ProjectiveSpace(2, 16)>, <a point in Subgeometry PG(2, 4) of ProjectiveSpace(2, 16)>, <a point in Subgeometry PG(2, 4) of ProjectiveSpace(2, 16)>, <a point in Subgeometry PG(2, 4) of ProjectiveSpace(2, 16)> ]

`‣ ProjectiveDimension` ( sub ) | ( operation ) |

`‣ Dimension` ( sub ) | ( operation ) |

`‣ Rank` ( sub ) | ( operation ) |

Returns: an integer

If `sub` is a subgeometry of a projective space, then it is a projective space itself. Therefore, these three operations return the projective dimension of `sub`, see also 4.1-3.

gap> pg := PG(7,8^2); ProjectiveSpace(7, 64) gap> sub := CanonicalSubgeometryOfProjectiveSpace(pg,8); Subgeometry PG(7, 8) of ProjectiveSpace(7, 64) gap> ProjectiveDimension(sub); 7 gap> Dimension(sub); 7 gap> Rank(sub); 7

`‣ UnderlyingVectorSpace` ( sub ) | ( operation ) |

`‣ BaseField` ( sub ) | ( operation ) |

`‣ SubfieldOfSubgeometry` ( sub ) | ( operation ) |

Returns: the first operation returns a vector space, the second and third operations return a finite field

The operations `UnderlyingVectorSpace`

and `BaseField`

are defined for projective spaces, see 4.1-5 and 4.1-4. For a subgeometry of a projective space `sub` with ambient space `ps`, these operations return `UnderlyingVectorSpace(ps)`

, `BaseField(ps)`

respectively. The operation `SubfieldOfSubgeometry`

returns the subfield over which `sub` is defined.

gap> pg := PG(3,3^6); ProjectiveSpace(3, 729) gap> sub1 := CanonicalSubgeometryOfProjectiveSpace(pg,3^3); Subgeometry PG(3, 27) of ProjectiveSpace(3, 729) gap> BaseField(sub1); GF(3^6) gap> UnderlyingVectorSpace(sub1); ( GF(3^6)^4 ) gap> SubfieldOfSubgeometry(sub1); GF(3^3) gap> sub2 := CanonicalSubgeometryOfProjectiveSpace(pg,3^2); Subgeometry PG(3, 9) of ProjectiveSpace(3, 729) gap> BaseField(sub2); GF(3^6) gap> UnderlyingVectorSpace(sub2); ( GF(3^6)^4 ) gap> SubfieldOfSubgeometry(sub2); GF(3^2)

`‣ CollineationFixingSubgeometry` ( sub ) | ( attribute ) |

Returns: a collineation of the ambient space of `sub`

Let \(GF(q)\) be the field over which `sub` is defined, this is a subfield of \(GF(q^t)\) over which the ambient projective space \(P\) is defined. It is well known that there exists a collineation of \(P\) of order \(t\), fixing all elements of `sub`, which is returned by this operation. This collineation is the collineation induced by the Frobenius map \(x\mapsto x^q\), conjugated by the collineation of \(P\) mapping the subgeometry `sub` to the canonical subgeometry of \(P\) over \(GF(q)\). In case of a quadratic field extension (i.e. \(t=2\)), this collineation is known in the literature as the Baer involution of the subgeometry.

gap> pg := PG(2,7^3); ProjectiveSpace(2, 343) gap> sub := CanonicalSubgeometryOfProjectiveSpace(pg,GF(7)); Subgeometry PG(2, 7) of ProjectiveSpace(2, 343) gap> coll := CollineationFixingSubgeometry(sub); < a collineation: <cmat 3x3 over GF(7,3)>, F^7> gap> Order(coll); 3

`‣ VectorSpaceToElement` ( sub, v ) | ( operation ) |

Returns: a subspace of a subgeometry

`sub` is a subgeometry of a projective space, and `v` is either a row vector (for points) or a matrix (for higher dimensional subspaces). In the case that `v` is a matrix, the rows represent generators for the subspace. An exceptional case is when `v` is the zero-vector, in which case the trivial subspace is returned. This method checks whether `v` determines an element of `sub`.

gap> pg := PG(2,5^6); ProjectiveSpace(2, 15625) gap> vecs := [ [ Z(5)^0, Z(5^6)^13972, Z(5^6)^11653 ], > [ Z(5)^0, Z(5^6)^9384, Z(5^6)^1372 ], > [ Z(5)^0, Z(5^6)^14447, Z(5^6)^15032 ], > [ Z(5)^0, Z(5^6)^8784, Z(5^6)^10360 ] ];; gap> frame := List(vecs,x->VectorSpaceToElement(pg,x)); [ <a point in ProjectiveSpace(2, 15625)>, <a point in ProjectiveSpace(2, 15625)>, <a point in ProjectiveSpace(2, 15625)>, <a point in ProjectiveSpace(2, 15625)> ] gap> sub := SubgeometryOfProjectiveSpaceByFrame(pg,frame,5^3); Subgeometry PG(2, 125) of ProjectiveSpace(2, 15625) gap> VectorSpaceToElement(sub,[0,0,0]*Z(5)^0); < empty subspace > gap> vec := [ Z(5)^0, Z(5^6)^8584, Z(5^6)^13650 ]; [ Z(5)^0, Z(5^6)^8584, Z(5^6)^13650 ] gap> VectorSpaceToElement(sub,vec); <a point in Subgeometry PG(2, 125) of ProjectiveSpace(2, 15625)> gap> vec := [ [ Z(5)^0, 0*Z(5), Z(5^6)^5740 ], [ 0*Z(5), Z(5)^0, Z(5^6)^15250 ] ]; [ [ Z(5)^0, 0*Z(5), Z(5^6)^5740 ], [ 0*Z(5), Z(5)^0, Z(5^6)^15250 ] ] gap> VectorSpaceToElement(sub,vec); Error, <obj> does not determine an element in <sub> called from VectorSpaceToElementForSubgeometries( geom, v ) at ./pkg/fining/lib/subgeometries.gi:400 called from <function "unknown">( <arguments> ) called from read-eval loop at line 19 of *stdin* you can 'quit;' to quit to outer loop, or you can 'return;' to continue brk> quit; gap> vec := [ [ Z(5)^0, 0*Z(5), Z(5^6)^8268 ], [ 0*Z(5), Z(5)^0, Z(5^6)^1472 ] ]; [ [ Z(5)^0, 0*Z(5), Z(5^6)^8268 ], [ 0*Z(5), Z(5)^0, Z(5^6)^1472 ] ] gap> VectorSpaceToElement(sub,vec); <a line in Subgeometry PG(2, 125) of ProjectiveSpace(2, 15625)> gap> VectorSpaceToElement(sub,vecs); Subgeometry PG(2, 125) of ProjectiveSpace(2, 15625)

`‣ ExtendElementOfSubgeometry` ( el ) | ( operation ) |

Returns: a subspace of a projective space

The argument `el` is an element of a subgeometry \(P'\) with ambient projective space \(P\). The projective space is defined over a field \(F\), the subgeometry \(P'\) is defined over a subfield \(F'\) of \(F\). The underlying vector space of `el` is a vector space over \(F'\) generated by a set \(S\) of vectors. This operation returns the element of \(P\), corresponding to the vector space over \(F\) generated by the vectors in \(S\). Note that the set \(S\) can be obtained using `UnderlyingObject`

, see 3.2-2.

gap> pg := PG(3,5^5); ProjectiveSpace(3, 3125) gap> frame := RandomFrameOfProjectiveSpace(pg); [ <a point in ProjectiveSpace(3, 3125)>, <a point in ProjectiveSpace(3, 3125)> , <a point in ProjectiveSpace(3, 3125)>, <a point in ProjectiveSpace(3, 3125)>, <a point in ProjectiveSpace(3, 3125)> ] gap> sub := SubgeometryOfProjectiveSpaceByFrame(pg,frame,5); Subgeometry PG(3, 5) of ProjectiveSpace(3, 3125) gap> p := Random(Points(sub)); <a point in Subgeometry PG(3, 5) of ProjectiveSpace(3, 3125)> gap> l := Random(Lines(p)); <a line in Subgeometry PG(3, 5) of ProjectiveSpace(3, 3125)> gap> p * l; true gap> q := ExtendElementOfSubgeometry(p); <a point in ProjectiveSpace(3, 3125)> gap> q * l; Error, <x> and <y> do not belong to the same geometry called from x in y at ./pkg/fining/lib/projectivespace.gi:1658 called from IsIncident( b, a ) at ./pkg/fining/lib/geometry.gi:439 called from <function "unknown">( <arguments> ) called from read-eval loop at line 15 of *stdin* you can 'quit;' to quit to outer loop, or you can 'return;' to continue brk> quit; gap> m := ExtendElementOfSubgeometry(l); <a line in ProjectiveSpace(3, 3125)> gap> q * m; true gap> UnderlyingObject(q) = UnderlyingObject(p); true gap> UnderlyingObject(l) = UnderlyingObject(m); true

`‣ AmbientGeometry` ( el ) | ( operation ) |

Returns: an incidence geometry

For `el` an element of a subgeometry \(P\), which is also a projective space, this operation returns \(P\).

`‣ FlagOfIncidenceStructure` ( sub, els ) | ( operation ) |

`‣ IsEmptyFlag` ( flag ) | ( operation ) |

`‣ IsChamberOfIncidenceStructure` ( flag ) | ( operation ) |

Returns: true or false

These operations are defined for projective spaces and so they are also applicable to subgeometries.

Let \(P'\) be a subgeometry of \(P\). Although one could argue that any semilinear map inducing a collineation preserving \(P'\) can be called a collineation of \(P'\), this would cause problems with the nice monomorphism functionality, since such a collineation does not necessarily have a faithful action on the subgeometry. For this reason, we decided to define the collineation group of the subgeometry \(P'\) as the collineation group of the projective space isomorphic to \(P'\) conjugated by the collineation of \(P\) mapping \(P'\) on the canonical subgeometry of \(P\) over the same field as \(P'\). Similarly, the projectivity group, respectively the special projectivity group, of \(P'\) is defined as the conjugate of the projectivity group, respectively special projectivity group, of the projective space isomorphic to \(P'\).

`‣ CollineationGroup` ( sub ) | ( operation ) |

`‣ ProjectivityGroup` ( sub ) | ( operation ) |

`‣ SpecialProjectivityGroup` ( sub ) | ( operation ) |

Returns: a group of collineations

generated by GAPDoc2HTML