<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</span> and let <span class="SimpleMath">L'</span> be a set of subsets of <span class="SimpleMath">P'</span>, such that every <span class="SimpleMath">l' ∈ L'</span> is a subset of exactly one line <span class="SimpleMath">l ∈ L</span>. If <span class="SimpleMath">S'=(P',L',I)</span> is a projective space again, then we call <span class="SimpleMath">S'</span> a <em>subgeometry</em> of <span class="SimpleMath">S</span>. Note that in general the subspaces of <span class="SimpleMath">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'</span> the Baer subplane of the projective plane <span class="SimpleMath">S</span>, one could say that a point of <span class="SimpleMath">S'</span> is indeed a point of <span class="SimpleMath">S</span>, but a line of <span class="SimpleMath">S'</span>, is not a line of <span class="SimpleMath">S</span>. If one considers a line of <span class="SimpleMath">S'</span> as a set of points of <span class="SimpleMath">S'</span>, then a line of <span class="SimpleMath">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)</span>, the canonical subgeometry determined by the standard frame in <span class="SimpleMath">PG(n,q)</span> is mathematically spoken the image of the <strong class="pkg">FinInG</strong> geometry morphism <code class="file">NaturalEmbeddingBySubField</code> of the projective space <span class="SimpleMath">PG(n,q')</span>. The coordinates of the points of the subgeometry will be exclusively over the subfield <span class="SimpleMath">GF(q')</span>, as are the coordinates of the vectors after normalizing defining any subspace of the subgeometry. Clearly, the Frobenius automorphism which maps <span class="SimpleMath">x</span> to <span class="SimpleMath">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')</span>, there exists a natural collineation of <span class="SimpleMath">PG(n,q)</span> 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 <span class="SimpleMath">PG(n,q)</span>, i.e. the frame defining the canonical subgeometry over <span class="SimpleMath">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'</span>. The underlying vector space of <var class="Arg">sub</var> is defined as the underlying vector space of <span class="SimpleMath">P</span> (which is a vector space over the field <span class="SimpleMath">F</span>). The ambient space of a subgeometry <var class="Arg">sub</var> is the projective space <span class="SimpleMath">P</span>.</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'</span> with ambient projective space <span class="SimpleMath">P</span>. The projective space is defined over a field <span class="SimpleMath">F</span>, the subgeometry <span class="SimpleMath">P'</span> is defined over a subfield <span class="SimpleMath">F'</span> of <span class="SimpleMath">F</span>. The underlying vector space of <var class="Arg">el</var> is a vector space over <span class="SimpleMath">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'</span> be a subgeometry of <span class="SimpleMath">P</span>. Although one could argue that any semilinear map inducing a collineation preserving <span class="SimpleMath">P'</span> can be called a collineation of <span class="SimpleMath">P'</span>, 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 <span class="SimpleMath">P'</span> as the collineation group of the projective space isomorphic to <span class="SimpleMath">P'</span> conjugated by the collineation of <span class="SimpleMath">P</span> mapping <span class="SimpleMath">P'</span> on the canonical subgeometry of <span class="SimpleMath">P</span> over the same field as <span class="SimpleMath">P'</span>. Similarly, the projectivity group, respectively the special projectivity group, of <span class="SimpleMath">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'</span>.</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 und die Messung sind noch experimentell.