<h3>14 <span class="Heading">Subgeometries of projective spaces</span></h3>
<p>Let <span class="SimpleMath">S=(P,L,I)</span> be a point-line incidence geometry. In case <span class="SimpleMath">S</span> 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 <span class="SimpleMath">I</span> is then symmetrised containment. To define a subgeometry mathematically, we follow <a href="chapBib.html#biBDembowski68">[Dem97]</a>. Let <span class="SimpleMath">P' ⊂ P and let L'</span> be a set of subsets of <span class="SimpleMath">P', such that every l' ∈ L' is a subset of exactly one line l ∈ L. If S'=(P',L',I)</span> is a projective space again, then we call <span class="SimpleMath">S' a subgeometry of S. Note that in general the subspaces of S'</span> will be subsets of subspaces of <span class="SimpleMath">S</span>.</p>
<p>A typical example of a subgeometry is a Baer subplane of a projective plane. In this example, with <span class="SimpleMath">S' the Baer subplane of the projective plane S, one could say that a point of S'</span> is indeed a point of <span class="SimpleMath">S</span>, but a line of <span class="SimpleMath">S', is not a line of S. If one considers a line of S'</span> as a set of points of <span class="SimpleMath">S', then a line of S'</span> is a subset of the set of points on a line of <span class="SimpleMath">S</span>. Another example is the subgeometry of a projective space induced by a subspace <span class="SimpleMath">π</span>. 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 <span class="SimpleMath">S</span>.</p>
<p>The same considerations apply for classical polar spaces. These consideration have implications for the behaviour of certain operations in <strong class="pkg">FinInG</strong>, e.g. when computing the span and meet of different elements.</p>
<p>Using geometry morphisms, and more particular a function like <code class="file">NaturalEmbeddingBySubField</code>, one can deal in an indirect way with subgeometries. However, using <code class="file">NaturalEmbeddingBySubField</code> 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 <strong class="pkg">FinInG</strong> provides some functions to naturally construct subgeometries of projective spaces.</p>
<p>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 <em>standard frame</em> in an <span class="SimpleMath">n</span>-dimensional projective space <span class="SimpleMath">PG(n,q)</span> is the set of <span class="SimpleMath">n+2</span> points represented by <span class="SimpleMath">(1,0,...,0),(0,1,...,0),...,(0,0,...,1),(1,1,...,1)</span>. The subgeometry determined by the standard frame will be called <em>canonical</em>. Note that different frames may determine the same subgeometry (over a fixed subfield).</p>
<p>For a given subfield <span class="SimpleMath">GF(q') ⊂ 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')</span>. The coordinates of the points of the subgeometry will be exclusively over the subfield <span class="SimpleMath">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'</span> fixes all elements of the subgeometry.</p>
<p>For an arbitrary frame of <span class="SimpleMath">PG(n,q)</span> and a subfield <span class="SimpleMath">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')</span>. 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 <strong class="pkg">FinInG</strong>, operations to compute this collineation group as well as particular action functions for subgeometries are provided.</p>
<p>Subgeometries of projective spaces are constructed in a subcategory of <code class="code">IsProjectiveSpace</code>, as such, all operations applicable to projective spaces, are naturally applicable to subgeometries. Subspaces of subgeometries are constructed in a subcategory of <code class="code">IsSubspaceOfProjectiveSpace</code>. Hence, operations applicable to subspaces of projective spaces, are naturally applicable to subspaces of subgeometries.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsSubgeometryOfProjectiveSpace</code></td><td class="tdright">( category )</td></tr></table></div>
<p>This category is a subcategory of <code class="code">IsProjectiveSpace</code>, and contains all subgeometries of projective spaces. Note that mathematically, a subspace of a projective space is also a subgeometry. However, in <strong class="pkg">FinInG</strong>, subspaces of a projective space are constructed in a category that is not a subcategory of <code class="code">IsProjectiveSpace</code>. Since <code class="code">IsSubgeometryOfProjectiveSpace</code> is a subcategory of <code class="code">IsProjectiveSpace</code>, all operations applicable to projective spaces, are naturally applicable to subgeometries of projective spaces.</p>
<p>This operation returns the subgeometry of <var class="Arg">pg</var> induced by the standard frame over the subfield <var class="Arg">subfield</var>. Alternatively, a prime power <var class="Arg">q</var> 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 <var class="Arg">pg</var>. If the subfield equals the basefield of <var class="Arg">pg</var>, the projective space <var class="Arg">pg</var> is returned.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RandomFrameOfProjectiveSpace</code>( <var class="Arg">pg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a set of points of <var class="Arg">pg</var>, being a frame. Note that the returned object is also a set in the GAP sense, i.e. an ordered list without duplicates.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := PG(1,5^5);</span>
ProjectiveSpace(1, 3125)
<span class="GAPprompt">gap></span> <span class="GAPinput">frame := RandomFrameOfProjectiveSpace(pg);</span>
[ <a point in ProjectiveSpace(1, 3125)>, <a point in ProjectiveSpace(1, 3125)>
, <a point in ProjectiveSpace(1, 3125)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Length(frame);</span>
3
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := PG(6,2^2);</span>
ProjectiveSpace(6, 4)
<span class="GAPprompt">gap></span> <span class="GAPinput">frame := RandomFrameOfProjectiveSpace(pg);</span>
[ <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)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Length(frame);</span>
8
<p>When <var class="Arg">list</var> is a list of points of a projective space, this operation returns true if and only if <var class="Arg">list</var> constitutes a frame of the projective space. It is checked as well whether all points in <var class="Arg">list</var> belong to the same projective space.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := PG(1,7^3);</span>
ProjectiveSpace(1, 343)
<span class="GAPprompt">gap></span> <span class="GAPinput">p1 := VectorSpaceToElement(pg,[1,1]*Z(7)^0);</span>
<a point in ProjectiveSpace(1, 343)>
<span class="GAPprompt">gap></span> <span class="GAPinput">p2 := VectorSpaceToElement(pg,[1,2]*Z(7)^0);</span>
<a point in ProjectiveSpace(1, 343)>
<span class="GAPprompt">gap></span> <span class="GAPinput">p3 := VectorSpaceToElement(pg,[1,3]*Z(7)^0);</span>
<a point in ProjectiveSpace(1, 343)>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFrameOfProjectiveSpace([p1,p2,p3]);</span>
true
<p>The argument <var class="Arg">pg</var> is a projective space which is not a subgeometry itself, the argument <var class="Arg">list</var> is a list of points of <var class="Arg">pg</var> defining a frame of <var class="Arg">pg</var>, and finally the argument <var class="Arg">field</var> is a subfield of the base field of <var class="Arg">pg</var>. Alternatively, the argument <var class="Arg">q</var> is the order of a subfield of the base field of <var class="Arg">pg</var>. This method returns the subgeometry defined by the frame in <var class="Arg">list</var> and the subfield <var class="Arg">field</var> of the subfield <span class="SimpleMath">GF(<var class="Arg">q</var>)</span>. This method checks whether the subfield <var class="Arg">field</var> or the field <span class="SimpleMath">GF(<var class="Arg">q</var>)</span> is really a subfield of the base field of <var class="Arg">pg</var> and whether the list of points in <var class="Arg">list</var> is a frame of <var class="Arg">pg</var>. Note also that it is currently not possible to construct subgeometries recursively, so <var class="Arg">pg</var> may not be a subgeometry itself. If the specified subfield equals the base field of <var class="Arg">pg</var>, then the projective space <var class="Arg">pg</var> itself is returned.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := PG(3,3^6);</span>
ProjectiveSpace(3, 729)
<span class="GAPprompt">gap></span> <span class="GAPinput">frame := RandomFrameOfProjectiveSpace(pg);</span>
[ <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)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">sub1 := SubgeometryOfProjectiveSpaceByFrame(pg,frame,GF(3));</span>
Subgeometry PG(3, 3) of ProjectiveSpace(3, 729)
<span class="GAPprompt">gap></span> <span class="GAPinput">sub2 := SubgeometryOfProjectiveSpaceByFrame(pg,frame,3^2);</span>
Subgeometry PG(3, 9) of ProjectiveSpace(3, 729)
<span class="GAPprompt">gap></span> <span class="GAPinput">sub3 := SubgeometryOfProjectiveSpaceByFrame(pg,frame,3^3);</span>
Subgeometry PG(3, 27) of ProjectiveSpace(3, 729)
<span class="GAPprompt">gap></span> <span class="GAPinput">sub4 := SubgeometryOfProjectiveSpaceByFrame(pg,frame,3^6);</span>
ProjectiveSpace(3, 729)
<h5>14.3-1 <span class="Heading">Underlying vector space and ambient projective space</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ UnderlyingVectorSpace</code>( <var class="Arg">sub</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AmbientSpace</code>( <var class="Arg">sub</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Let <span class="SimpleMath">P</span> be a projective space over the field <span class="SimpleMath">F</span>. Let <var class="Arg">sub</var> be a subgeometry of <span class="SimpleMath">P</span> over the subfield <span class="SimpleMath">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.
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DefiningFrameOfSubgeometry</code>( <var class="Arg">sub</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a set of projective points</p>
<p>This attribute returns a frame of the ambient space of <var class="Arg">sub</var> defining it. Note that different frames might define the same subgeometry, but the frame used to constructed <var class="Arg">sub</var> 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.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := PG(2,2^4);</span>
ProjectiveSpace(2, 16)
<span class="GAPprompt">gap></span> <span class="GAPinput">sub := CanonicalSubgeometryOfProjectiveSpace(pg,2);</span>
Subgeometry PG(2, 2) of ProjectiveSpace(2, 16)
<span class="GAPprompt">gap></span> <span class="GAPinput">frame := DefiningFrameOfSubgeometry(sub);</span>
[ <a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)>,
<a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List(frame,x->Unpack(UnderlyingObject(x)));</span>
[ [ 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 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">frame := RandomFrameOfProjectiveSpace(pg);</span>
[ <a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)>,
<a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">sub := SubgeometryOfProjectiveSpaceByFrame(pg,frame,2^2);</span>
Subgeometry PG(2, 4) of ProjectiveSpace(2, 16)
<span class="GAPprompt">gap></span> <span class="GAPinput">def := DefiningFrameOfSubgeometry(sub);</span>
[ <a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)>,
<a point in ProjectiveSpace(2, 16)>, <a point in ProjectiveSpace(2, 16)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List(def,x->Unpack(UnderlyingObject(x)));</span>
[ [ 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 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">StandardFrame(sub);</span>
[ <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)> ]
<p>If <var class="Arg">sub</var> is a subgeometry of a projective space, then it is a projective space itself. Therefore, these three operations return the projective dimension of <var class="Arg">sub</var>, see also <a href="chap4.html#X84FDF25D797B874B"><span class="RefLink">4.1-3</span></a>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ UnderlyingVectorSpace</code>( <var class="Arg">sub</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BaseField</code>( <var class="Arg">sub</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SubfieldOfSubgeometry</code>( <var class="Arg">sub</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: the first operation returns a vector space, the second and third operations return a finite field</p>
<p>The operations <code class="file">UnderlyingVectorSpace</code> and <code class="file">BaseField</code> are defined for projective spaces, see <a href="chap4.html#X7D544D7985A4572D"><span class="RefLink">4.1-5</span></a> and <a href="chap4.html#X7BCBA564829D9E89"><span class="RefLink">4.1-4</span></a>. For a subgeometry of a projective space <var class="Arg">sub</var> with ambient space <var class="Arg">ps</var>, these operations return <code class="file">UnderlyingVectorSpace(ps)</code>, <code class="file">BaseField(ps)</code> respectively. The operation <code class="file">SubfieldOfSubgeometry</code> returns the subfield over which <var class="Arg">sub</var> is defined.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CollineationFixingSubgeometry</code>( <var class="Arg">sub</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a collineation of the ambient space of <var class="Arg">sub</var></p>
<p>Let <span class="SimpleMath">GF(q)</span> be the field over which <var class="Arg">sub</var> is defined, this is a subfield of <span class="SimpleMath">GF(q^t)</span> over which the ambient projective space <span class="SimpleMath">P</span> is defined. It is well known that there exists a collineation of <span class="SimpleMath">P</span> of order <span class="SimpleMath">t</span>, fixing all elements of <var class="Arg">sub</var>, which is returned by this operation. This collineation is the collineation induced by the Frobenius map <span class="SimpleMath">x↦ x^q</span>, conjugated by the collineation of <span class="SimpleMath">P</span> mapping the subgeometry <var class="Arg">sub</var> to the canonical subgeometry of <span class="SimpleMath">P</span> over <span class="SimpleMath">GF(q)</span>. In case of a quadratic field extension (i.e. <span class="SimpleMath">t=2</span>), this collineation is known in the literature as the Baer involution of the subgeometry.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ VectorSpaceToElement</code>( <var class="Arg">sub</var>, <var class="Arg">v</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a subspace of a subgeometry</p>
<p><var class="Arg">sub</var> is a subgeometry of a projective space, and <var class="Arg">v</var> is either a row vector (for points) or a matrix (for higher dimensional subspaces). In the case that <var class="Arg">v</var> is a matrix, the rows represent generators for the subspace. An exceptional case is when <var class="Arg">v</var> is the zero-vector, in which case the trivial subspace is returned. This method checks whether <var class="Arg">v</var> determines an element of <var class="Arg">sub</var>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := PG(2,5^6);</span>
ProjectiveSpace(2, 15625)
<span class="GAPprompt">gap></span> <span class="GAPinput">vecs := [ [ Z(5)^0, Z(5^6)^13972, Z(5^6)^11653 ], </span>
<span class="GAPprompt">></span> <span class="GAPinput">[ Z(5)^0, Z(5^6)^9384, Z(5^6)^1372 ],</span>
<span class="GAPprompt">></span> <span class="GAPinput">[ Z(5)^0, Z(5^6)^14447, Z(5^6)^15032 ], </span>
<span class="GAPprompt">></span> <span class="GAPinput">[ Z(5)^0, Z(5^6)^8784, Z(5^6)^10360 ] ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">frame := List(vecs,x->VectorSpaceToElement(pg,x));</span>
[ <a point in ProjectiveSpace(2, 15625)>,
<a point in ProjectiveSpace(2, 15625)>,
<a point in ProjectiveSpace(2, 15625)>,
<a point in ProjectiveSpace(2, 15625)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">sub := SubgeometryOfProjectiveSpaceByFrame(pg,frame,5^3);</span>
Subgeometry PG(2, 125) of ProjectiveSpace(2, 15625)
<span class="GAPprompt">gap></span> <span class="GAPinput">VectorSpaceToElement(sub,[0,0,0]*Z(5)^0);</span>
< empty subspace >
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := [ Z(5)^0, Z(5^6)^8584, Z(5^6)^13650 ];</span>
[ Z(5)^0, Z(5^6)^8584, Z(5^6)^13650 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">VectorSpaceToElement(sub,vec);</span>
<a point in Subgeometry PG(2, 125) of ProjectiveSpace(2, 15625)>
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := [ [ Z(5)^0, 0*Z(5), Z(5^6)^5740 ], [ 0*Z(5), Z(5)^0, Z(5^6)^15250 ] ];</span>
[ [ Z(5)^0, 0*Z(5), Z(5^6)^5740 ], [ 0*Z(5), Z(5)^0, Z(5^6)^15250 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">VectorSpaceToElement(sub,vec);</span>
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
<span class="GAPbrkprompt">brk></span> <span class="GAPinput">quit;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := [ [ Z(5)^0, 0*Z(5), Z(5^6)^8268 ], [ 0*Z(5), Z(5)^0, Z(5^6)^1472 ] ];</span>
[ [ Z(5)^0, 0*Z(5), Z(5^6)^8268 ], [ 0*Z(5), Z(5)^0, Z(5^6)^1472 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">VectorSpaceToElement(sub,vec);</span>
<a line in Subgeometry PG(2, 125) of ProjectiveSpace(2, 15625)>
<span class="GAPprompt">gap></span> <span class="GAPinput">VectorSpaceToElement(sub,vecs);</span>
Subgeometry PG(2, 125) of ProjectiveSpace(2, 15625)
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ExtendElementOfSubgeometry</code>( <var class="Arg">el</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a subspace of a projective space</p>
<p>The argument <var class="Arg">el</var> is an element of a subgeometry <span class="SimpleMath">P' with ambient projective space P. The projective space is defined over a field F, the subgeometry P'</span> is defined over a subfield <span class="SimpleMath">F' of F. The underlying vector space of el is a vector space over F'</span> generated by a set <span class="SimpleMath">S</span> of vectors. This operation returns the element of <span class="SimpleMath">P</span>, corresponding to the vector space over <span class="SimpleMath">F</span> generated by the vectors in <span class="SimpleMath">S</span>. Note that the set <span class="SimpleMath">S</span> can be obtained using <code class="file">UnderlyingObject</code>, see <a href="chap3.html#X810D4D6D87069697"><span class="RefLink">3.2-2</span></a>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := PG(3,5^5);</span>
ProjectiveSpace(3, 3125)
<span class="GAPprompt">gap></span> <span class="GAPinput">frame := RandomFrameOfProjectiveSpace(pg);</span>
[ <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)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">sub := SubgeometryOfProjectiveSpaceByFrame(pg,frame,5);</span>
Subgeometry PG(3, 5) of ProjectiveSpace(3, 3125)
<span class="GAPprompt">gap></span> <span class="GAPinput">p := Random(Points(sub));</span>
<a point in Subgeometry PG(3, 5) of ProjectiveSpace(3, 3125)>
<span class="GAPprompt">gap></span> <span class="GAPinput">l := Random(Lines(p));</span>
<a line in Subgeometry PG(3, 5) of ProjectiveSpace(3, 3125)>
<span class="GAPprompt">gap></span> <span class="GAPinput">p * l;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">q := ExtendElementOfSubgeometry(p);</span>
<a point in ProjectiveSpace(3, 3125)>
<span class="GAPprompt">gap></span> <span class="GAPinput">q * l;</span>
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
<span class="GAPbrkprompt">brk></span> <span class="GAPinput">quit;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">m := ExtendElementOfSubgeometry(l);</span>
<a line in ProjectiveSpace(3, 3125)>
<span class="GAPprompt">gap></span> <span class="GAPinput">q * m;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">UnderlyingObject(q) = UnderlyingObject(p);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">UnderlyingObject(l) = UnderlyingObject(m);</span>
true
<p>For <var class="Arg">el</var> an element of a subgeometry <span class="SimpleMath">P</span>, which is also a projective space, this operation returns <span class="SimpleMath">P</span>.</p>
<h4>14.5 <span class="Heading">Groups and actions</span></h4>
<p>Let <span class="SimpleMath">P' be a subgeometry of P. Although one could argue that any semilinear map inducing a collineation preserving P'</span> can be called a collineation of <span class="SimpleMath">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'</span> as the collineation group of the projective space isomorphic to <span class="SimpleMath">P' conjugated by the collineation of P mapping P'</span> on the canonical subgeometry of <span class="SimpleMath">P</span> over the same field as <spanclass="SimpleMath">P'. Similarly, the projectivity group, respectively the special projectivity group, of P'</span> is defined as the conjugate of the projectivity group, respectively special projectivity group, of the projective space isomorphic to <span class="SimpleMath">P'.
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.