<p>GAP provides generic functionality to compute orbits. These functions are, generally spoken, applicable to the groups implemented in <strong class="pkg">FinInG</strong>, combined with the appropriate action functions. However, the generic functions applied in such situations are rather time consuming. <strong class="pkg">FinInG</strong> therefore provides alternative functions to compute orbits.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FiningOrbit</code>( <var class="Arg">g</var>, <var class="Arg">obj</var>, <var class="Arg">act</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The orbit of the object <var class="Arg">obj</var> under the action <var class="Arg">act</var> of the group <var class="Arg">g</var>.</p>
<p>The argument <var class="Arg">obj</var> is either a subspace of a projective space, then combined with the action function <code class="file">OnProjSubspaces</code>, or a set of elements of a projective space, then combined with the action function <code class="file">OnSetsProjSubspaces</code>. The group <var class="Arg">g</var> is a subgroup of a collineation group of a projective space. In both cases the action function computes the action of <var class="Arg">el</var> under the group element <var class="Arg">g</var>.</p>
<p>The second example shows the possible use of <code class="file">FiningOrbit</code> in combination with the action function <code class="file">OnSetsProjSubspaces</code>. Please note that this variant is probably not the most efficient way to compute all elliptic quadrics contained in the parabolic quadric <span class="SimpleMath">ps</span>. Experiments show that for <span class="SimpleMath">q=5</span> the second variant takes an unreasonable amount of time. Also note that the second argument <var class="Arg">el</var> must be a set (and therefore it might be necessary to apply <code class="file">Set</code> on a collection of elements).</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ps := ParabolicQuadric(4,3);</span>
Q(4, 3)
<span class="GAPprompt">gap></span> <span class="GAPinput">g := CollineationGroup(ps);</span>
PGammaO(5,3)
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := PG(4,3);</span>
ProjectiveSpace(4, 3)
<span class="GAPprompt">gap></span> <span class="GAPinput">s := First(Solids(pg),t -> TypeOfSubspace(ps,t) = "elliptic" );</span>
<a solid in ProjectiveSpace(4, 3)>
<span class="GAPprompt">gap></span> <span class="GAPinput">orbit1 := FiningOrbit(g,s,OnProjSubspaces);</span>
<closed orbit, 36 points>
<span class="GAPprompt">gap></span> <span class="GAPinput">time;</span>
9
<span class="GAPprompt">gap></span> <span class="GAPinput">spts := Filtered(Points(s),s->s in ps);</span>
[ <a point in ProjectiveSpace(4, 3)>, <a point in ProjectiveSpace(4, 3)>,
<a point in ProjectiveSpace(4, 3)>, <a point in ProjectiveSpace(4, 3)>,
<a point in ProjectiveSpace(4, 3)>, <a point in ProjectiveSpace(4, 3)>,
<a point in ProjectiveSpace(4, 3)>, <a point in ProjectiveSpace(4, 3)>,
<a point in ProjectiveSpace(4, 3)>, <a point in ProjectiveSpace(4, 3)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">orbit2 := FiningOrbit(g,Set(spts),OnSetsProjSubspaces);</span>
<closed orbit, 36 points>
<span class="GAPprompt">gap></span> <span class="GAPinput">time;</span>
18
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FiningOrbits</code>( <var class="Arg">g</var>, <var class="Arg">set</var>, <var class="Arg">act</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">‣ FiningOrbits</code>( <var class="Arg">g</var>, <var class="Arg">coll</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The orbits of the group <var class="Arg">g</var> on <var class="Arg">set</var> under the action of <var class="Arg">act</var>.</p>
<p>The set is a set of elements of a projective space, the group <var class="Arg">g</var> is a subgroup of the collineation group of a projective space, and <var class="Arg">act</var> is the function <code class="file">OnProjSubspaces</code>. If <var class="Arg">coll</var> is a collection of elements of a projective space (i.e. not a list or set, but and object representing the collection of elements of a given type, such as <code class="file">Lines(PG(3,4))</code>), then the second versions returns the orbits of <var class="Arg">g</var> on the elements of <var class="Arg">coll</var> under the action <code class="file">OnProjSubspaces</code>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FiningOrbitsDomain</code>( <var class="Arg">g</var>, <var class="Arg">coll</var>, <var class="Arg">act</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The orbits of the group <var class="Arg">g</var> on a collection <var class="Arg">coll</var> under the action of <var class="Arg">act</var>.</p>
<p>The argument <var class="Arg">coll</var> must be an object in the category <code class="code">IsElementsOfIncidenceGeometry</code>, the argument <var class="Arg">g</var> can be any group, acting on the elements of <var class="Arg">coll</var> through a suitable action function <var class="Arg">act</var>. This operation is inspired by the GAP operation <code class="file">OrbitsDomain</code>. It computes the orbits of the group <var class="Arg">g</var> on the set of elements in <var class="Arg">coll</var> <em>assuming</em> that the set of elements of <var class="Arg">coll</var> is closed under that action of <var class="Arg">g</var>. There is no check whether the assumption is correct, so this operation should typically be used when it is known that the assumption is correct. The operation is generic in the sense that it can be used for different types of incidence geometries as long as the triple arguments consist of a suitable action of <var class="Arg">g</var> on the elements of <var class="Arg">coll</var>. In general, if the assumption is correct, this operation will be faster than <code class="file">FiningOrbits</code>.</p>
<p>The GAP function <code class="file">Stabilizer</code> is a generic function to compute stabilisers of one object (or sets or tuples etc. of objects) under a group, using a specified action function. This generic function can be used together with the in <strong class="pkg">FinInG</strong> implemented groups and elements of geometries. However, computing time can be very long, already in small geometries.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ps := PG(3,8);</span>
ProjectiveSpace(3, 8)
<span class="GAPprompt">gap></span> <span class="GAPinput">g := CollineationGroup(ps);</span>
The FinInG collineation group PGammaL(4,8)
<span class="GAPprompt">gap></span> <span class="GAPinput">p := Random(Points(ps));</span>
<a point in ProjectiveSpace(3, 8)>
<span class="GAPprompt">gap></span> <span class="GAPinput">Stabilizer(g,p,OnProjSubspaces);</span>
<projective collineation group of size 177223237632 with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">time;</span>
10026
<span class="GAPprompt">gap></span> <span class="GAPinput">line := Random(Lines(ps));</span>
<a line in ProjectiveSpace(3, 8)>
<span class="GAPprompt">gap></span> <span class="GAPinput">Stabilizer(g,line,OnProjSubspaces);</span>
<projective collineation group of size 21849440256 with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">time;</span>
78126
</pre></div>
<p>The packages <strong class="pkg">GenSS</strong> and <strong class="pkg">orb</strong> required by <strong class="pkg">FinInG</strong> provide efficient operations to compute stabilisers, and <strong class="pkg">FinInG</strong> provides functionality to use these operations for the particular groups and (elements) of geometries.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FiningStabiliser</code>( <var class="Arg">g</var>, <var class="Arg">el</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The subgroup of <var class="Arg">g</var> stabilising the element <var class="Arg">el</var></p>
<p>The argument <var class="Arg">g</var> is a group of collineations acting on the element <var class="Arg">el</var>, being a subspace of a projective space (and hence, all elements of a Lie geometry are allowed as second argument). This operation relies on the <strong class="pkg">GenSS</strong> operation <code class="file">Stab</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ps := PG(5,4);</span>
ProjectiveSpace(5, 4)
<span class="GAPprompt">gap></span> <span class="GAPinput">g := SpecialHomographyGroup(ps);</span>
The FinInG PSL group PSL(6,4)
<span class="GAPprompt">gap></span> <span class="GAPinput">p := Random(Points(ps));</span>
<a point in ProjectiveSpace(5, 4)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliser(g,p);</span>
<projective collineation group of size 264696069567283200 with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">line := Random(Lines(ps));</span>
<a line in ProjectiveSpace(5, 4)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliser(g,line);</span>
<projective collineation group of size 3881174040576000 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">plane := Random(Planes(ps));</span>
<a plane in ProjectiveSpace(5, 4)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliser(g,plane);</span>
#I Have 106048 points.
#I Have 158748 points.
<projective collineation group of size 958878292377600 with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">ps := HyperbolicQuadric(5,5);</span>
Q+(5, 5)
<span class="GAPprompt">gap></span> <span class="GAPinput">g := IsometryGroup(ps);</span>
PGO(1,6,5)
<span class="GAPprompt">gap></span> <span class="GAPinput">p := Random(Points(ps));</span>
<a point in Q+(5, 5)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliser(g,p);</span>
<projective collineation group of size 36000000 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">line := Random(Lines(ps));</span>
<a line in Q+(5, 5)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliser(g,line);</span>
<projective collineation group of size 6000000 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">plane := Random(Planes(ps));</span>
<a plane in Q+(5, 5)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliser(g,plane);</span>
<projective collineation group of size 93000000 with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">h := SplitCayleyHexagon(3);</span>
H(3)
<span class="GAPprompt">gap></span> <span class="GAPinput">g := CollineationGroup(h);</span>
#I for Split Cayley Hexagon
#I Computing nice monomorphism...
#I Found permutation domain...
G_2(3)
<span class="GAPprompt">gap></span> <span class="GAPinput">p := Random(Points(h));</span>
<a point in H(3)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliser(g,p);</span>
<projective collineation group of size 11664 with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">line := Random(Lines(h));</span>
<a line in H(3)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliser(g,line);</span>
<projective collineation group of size 11664 with 2 generators>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FiningStabiliserOrb</code>( <var class="Arg">g</var>, <var class="Arg">el</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The subgroup of <var class="Arg">g</var> stabilising the element <var class="Arg">el</var></p>
<p>The argument <var class="Arg">g</var> is a group of collineations acting on the element <var class="Arg">el</var>, being a subspace of a projective space (and hence, all elements of a Lie geometry are allowed as second argument). This operation relies on some particular <strong class="pkg">orb</strong> functionality.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ps := PG(5,4);</span>
ProjectiveSpace(5, 4)
<span class="GAPprompt">gap></span> <span class="GAPinput">g := SpecialHomographyGroup(ps);</span>
The FinInG PSL group PSL(6,4)
<span class="GAPprompt">gap></span> <span class="GAPinput">p := Random(Points(ps));</span>
<a point in ProjectiveSpace(5, 4)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliserOrb(g,p);</span>
<projective collineation group with 15 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">line := Random(Lines(ps));</span>
<a line in ProjectiveSpace(5, 4)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliserOrb(g,line);</span>
<projective collineation group with 15 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">plane := Random(Planes(ps));</span>
<a plane in ProjectiveSpace(5, 4)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliserOrb(g,plane);</span>
<projective collineation group with 15 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">ps := HyperbolicQuadric(5,5);</span>
Q+(5, 5)
<span class="GAPprompt">gap></span> <span class="GAPinput">g := IsometryGroup(ps);</span>
PGO(1,6,5)
<span class="GAPprompt">gap></span> <span class="GAPinput">p := Random(Points(ps));</span>
<a point in Q+(5, 5)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliserOrb(g,p);</span>
<projective collineation group with 15 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">line := Random(Lines(ps));</span>
<a line in Q+(5, 5)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliserOrb(g,line);</span>
<projective collineation group with 15 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">plane := Random(Planes(ps));</span>
<a plane in Q+(5, 5)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliserOrb(g,plane);</span>
<projective collineation group with 15 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">h := SplitCayleyHexagon(3);</span>
H(3)
<span class="GAPprompt">gap></span> <span class="GAPinput">g := CollineationGroup(h);</span>
#I for Split Cayley Hexagon
#I Computing nice monomorphism...
#I Found permutation domain...
G_2(3)
<span class="GAPprompt">gap></span> <span class="GAPinput">p := Random(Points(h));</span>
<a point in H(3)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliserOrb(g,p);</span>
<projective collineation group with 15 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">line := Random(Lines(h));</span>
<a line in H(3)>
<span class="GAPprompt">gap></span> <span class="GAPinput">FiningStabiliserOrb(g,line);</span>
<projective collineation group with 15 generators>
</pre></div>
<p>A small example shows the difference in computing time. Clearly the <code class="file">FiningStabiliserOrb</code> is the fastest way to compute stabilizers of one element.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ps := PG(3,8);</span>
ProjectiveSpace(3, 8)
<span class="GAPprompt">gap></span> <span class="GAPinput">g := CollineationGroup(ps);</span>
The FinInG collineation group PGammaL(4,8)
<span class="GAPprompt">gap></span> <span class="GAPinput">p := Random(Points(ps));</span>
<a point in ProjectiveSpace(3, 8)>
<span class="GAPprompt">gap></span> <span class="GAPinput">g1 := Stabilizer(g,p);</span>
<projective collineation group of size 177223237632 with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">time;</span>
9576
<span class="GAPprompt">gap></span> <span class="GAPinput">g2 := FiningStabiliser(g,p);</span>
<projective collineation group of size 177223237632 with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">time;</span>
244
<span class="GAPprompt">gap></span> <span class="GAPinput">g3 := FiningStabiliserOrb(g,p);</span>
<projective collineation group with 15 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">time;</span>
46
<span class="GAPprompt">gap></span> <span class="GAPinput">g1=g2;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">g2=g3;</span>
true
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FiningSetwiseStabiliser</code>( <var class="Arg">g</var>, <var class="Arg">els</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The subgroup of <var class="Arg">g</var> stabilising the set <var class="Arg">els</var></p>
<p>The argument <var class="Arg">g</var> is a group of collineations acting on the element <var class="Arg">el</var>, being a subspace of a projective space (and hence, all elements of a Lie geometry are allowed as second argument). The argument <var class="Arg">els</var> is a set of elements of the same type of the same Lie geometry, the elements are all in the category <code class="code">IsSubspaceOfProjectiveSpace</code>. The underlying action function is assumed to be <code class="file">OnProjSubspaces</code></p>
<p>Computing the setwise stabiliser under a group is also possible using <code class="file">Stabilizer</code>. But, not surprisingly, the computing time can be very long.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ps := PG(3,4);</span>
ProjectiveSpace(3, 4)
<span class="GAPprompt">gap></span> <span class="GAPinput">p := Random(Points(ps));</span>
<a point in ProjectiveSpace(3, 4)>
<span class="GAPprompt">gap></span> <span class="GAPinput">q := Random(Points(ps));</span>
<a point in ProjectiveSpace(3, 4)>
<span class="GAPprompt">gap></span> <span class="GAPinput">g := CollineationGroup(ps);</span>
The FinInG collineation group PGammaL(4,4)
<span class="GAPprompt">gap></span> <span class="GAPinput">Stabilizer(g,Set([p,q]),OnSets);</span>
<projective collineation group of size 552960 with 5 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">time;</span>
10440
</pre></div>
<p>The package <strong class="pkg">GenSS</strong> provides an efficient operations to compute setwise stabilisers. This is why <strong class="pkg">FinInG</strong> provides functionality, such as <code class="file">FiningSetwiseStabiliser</code>, to use these <strong class="pkg">GenSS</strong> operations for the particular groups and (elements) of geometries. A small example shows the difference in computing time.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ps := ParabolicQuadric(4,4);</span>
Q(4, 4)
<span class="GAPprompt">gap></span> <span class="GAPinput">g := CollineationGroup(ps);</span>
PGammaO(5,4)
<span class="GAPprompt">gap></span> <span class="GAPinput">l1 := Random(Lines(ps));</span>
<a line in Q(4, 4)>
<span class="GAPprompt">gap></span> <span class="GAPinput">l2 := Random(Lines(ps));</span>
<a line in Q(4, 4)>
<span class="GAPprompt">gap></span> <span class="GAPinput">g1 := Stabilizer(g,Set([l1,l2]),OnSets);</span>
<projective collineation group of size 2304 with 6 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">time;</span>
2633
<span class="GAPprompt">gap></span> <span class="GAPinput">g2 := FiningSetwiseStabiliser(g,Set([l1,l2]));</span>
#I Computing adjusted stabilizer chain...
<projective collineation group with 5 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">time;</span>
70
<span class="GAPprompt">gap></span> <span class="GAPinput">g1=g2;</span>
true
</pre></div>
<p>For subspaces of projective spaces we can be even more efficient by writing down generators of the stabiliser and then return the generated subgroup.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ StabiliserGroupOfSubspace</code>( <var class="Arg">sub</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The subgroup of the collineation group of <var class="Arg">AmbientSpace(sub)</var> stabilising the subspace <var class="Arg">sub</var></p>
<p>The argument <var class="Arg">sub</var> is a subspace of a projective space.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ProjectiveStabiliserGroupOfSubspace</code>( <var class="Arg">sub</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The subgroup of the projectivity group of <var class="Arg">AmbientSpace(sub)</var> stabilising the subspace <var class="Arg">sub</var></p>
<p>The argument <var class="Arg">sub</var> is a subspace of a projective space.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SpecialProjectiveStabiliserGroupOfSubspace</code>( <var class="Arg">sub</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The subgroup of the special projectivity group of <var class="Arg">AmbientSpace(sub)</var> stabilising the subspace <var class="Arg">sub</var></p>
<p>The argument <var class="Arg">sub</var> is a subspace of a projective space.</p>
<h4>8.3 <span class="Heading">Actions and nice monomorphisms revisited</span></h4>
<p>GAP provides generic functions to compute action homomorphisms and their images for arbitrary groups. These functions are applicable on the projective groups implemented in <strong class="pkg">FinInG</strong>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ OnProjSubspaces</code>( <var class="Arg">el</var>, <var class="Arg">g</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ OnProjSubspacesExtended</code>( <var class="Arg">el</var>, <var class="Arg">g</var> )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ OnSetsProjSubspaces</code>( <var class="Arg">set</var>, <var class="Arg">g</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: a element of a Lie geometry</p>
<p>Let <var class="Arg">el</var> be an element of any Lie geometry, and <var class="Arg">g</var> an element of a projective group acting on the elements of the ambient Lie geometry of <var class="Arg">el</var>. Then then <code class="file">OnProjSubspaces</code> will return simply the image of <var class="Arg">el</var> under <var class="Arg">g</var>. When <var class="Arg">g</var> is an element of the correlation/collineation group of a projective space, <code class="file">OnProjSubspacesExtended</code> returns the image of <var class="Arg">el</var> under <var class="Arg">g</var>. Finally, when <var class="Arg">set</var> is a set of elements of a Lie geometry, <code class="file">OnSetsProjSubspaces</code> returns the set of images under <var class="Arg">g</var>. <code class="file">OnProjSubspaces</code> is also explained in <a href="chap5.html#X84A3D5357872EC3B"><span class="RefLink">5.8-1</span></a>, <code class="file">OnProjSubspacesExtended</code> is also explained in <a href="chap5.html#X86B4C03E85ADD0C2"><span class="RefLink">5.8-3</span></a>.</p>
<h5>8.3-2 <span class="Heading">Generic GAP functions</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ActionHomomorphism</code>( <var class="Arg">g</var>, <var class="Arg">S</var>, <var class="Arg">act</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">‣ Action</code>( <var class="Arg">g</var>, <var class="Arg">S</var>, <var class="Arg">act</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><var class="Arg">g</var> is a projective group, <var class="Arg">S</var> is a set or a collection of elements, <var class="Arg">act</var> is an action function. <code class="file">Action</code> simply returns <code class="file">Image(hom)</code>, if <var class="Arg">hom</var> is the result of <code class="file">ActionHomomorphism</code>. The examples are self-explanatory.</p>
<p>A nice monomorphism of a group <span class="SimpleMath">G</span> is roughly just a permutation representation of <span class="SimpleMath">G</span> on a suitable action domain. An easy example is the permutation action of the full collineation group of a projective space on its points.</p>
<p><var class="Arg">group</var> is a projective group. The object this operation returns is actually equivalent with <code class="file">Image(NiceMonomorphism(group))</code>.</p>
<h5>8.3-5 <span class="Heading">Different behaviour for different collineation groups</span></h5>
<p>For the different Lie geometries implemented in <strong class="pkg">FinInG</strong>, nicemonomorphisms are (necessarily) treated in a different way. As the aim of a nicemonomorphism of group <span class="SimpleMath">G</span> is to provide a permutation representation, such that efficient algorithms for permutation groups become available for certain operations applicable on <span class="SimpleMath">G</span>, clearly the efficiency will be increased if the degree of the permutation representation is as small as possible.</p>
<p>For the collineation group, projectivity group and special projectivity group of a projective space, it is clear that the smallest degree permutation representation is the action of the group on the projective points. In principle, one could also consider the action on the hyperplanes. For the collineation group, similarity group and isometry group of a classical polar space, in most cases, the smallest degree permutation representation is the action on the points. A notorious exception to this is the hermitian polar space in three dimensions, of which the number of lines is smaller than the number of points, and hence of which the smallest degree permutation representation is the action of the group on the lines. When constructing a collineation group (or (special) projectivity group) of a projective space, the nicemonomorphism is not computed. It is only computed when needed. The reason is that from the underlying field and dimension, the underlying projective space can be determined at any time, and hence the smallest degree representation can be computed. For the collineation groups (and similarity and isometry groups) of classical polar spaces, this behaviour is different. Indeed, given a group of collineations, from the underlying field and dimension, the original polar space can not be determined. Of course one could consider the action on the points of the underlying projective space, but typically the number of points of a classical polar space is much smaller than the number points of the underlying projective space. This explains why, currently, a nice monomorphism is computed at the moment a collineation group of a classical polar space is computed. As a consequence, just asking the collineation group of a polar space can be time consuming.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SetParent</code>( <var class="Arg">group</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Assume that <span class="SimpleMath">G</span> is a group of collineations. As mentioned already, from the underlying field and dimension, only the underlying projective space can be determined. An operation like <code class="file">Order</code> requires a nice monomorphism, so for an arbitrary group <span class="SimpleMath">G</span>, the action on the points of the underlying projective space will be computed, which can be time consuming for large projective spaces. However, if it is known that <span class="SimpleMath">G</span> is a subgroup of another collineation group <span class="SimpleMath">H</span>, this group <span class="SimpleMath">H</span> can be set as a parent group for <span class="SimpleMath">G</span>. If a nice monomorphism is available for <span class="SimpleMath">H</span>, it will become available for <span class="SimpleMath">G</span>. In the example we construct the collineation group of the hermitian polar space <span class="SimpleMath">H(3,81)</span>. As explained, a nice monomorphism is computed upon construction. Then construct a group generated by two random elements of this collineation group of <span class="SimpleMath">H(3,81)</span>, and compute its order. Without further information, it will be assumed by the system that this new group is a subgroup of the collineation group of <span class="SimpleMath">PG(3,81)</span>, and a nice monomorphism will be computed through this group. In the second part we set the parent group as the collineation group of <span class="SimpleMath">H(3,81)</span>, and compute the order again. Compare the different timings.</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.