Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


SSL chap10_mj.html   Interaktion und
PortierbarkeitHTML

 
 products/sources/formale Sprachen/GAP/pkg/fining/doc/chap10_mj.html


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<script type="text/javascript"
  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
<title>GAP (FinInG) - Chapter 10: Geometry Morphisms</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="generator" content="GAPDoc2HTML" />
<link rel="stylesheet" type="text/css" href="manual.css" />
<script src="manual.js" type="text/javascript"></script>
<script type="text/javascript">overwriteStyle();</script>
</head>
<body class="chap10"  onload="jscontent()">


<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0_mj.html">Top</a>  <a href="chap1_mj.html">1</a>  <a href="chap2_mj.html">2</a>  <a href="chap3_mj.html">3</a>  <a href="chap4_mj.html">4</a>  <a href="chap5_mj.html">5</a>  <a href="chap6_mj.html">6</a>  <a href="chap7_mj.html">7</a>  <a href="chap8_mj.html">8</a>  <a href="chap9_mj.html">9</a>  <a href="chap10_mj.html">10</a>  <a href="chap11_mj.html">11</a>  <a href="chap12_mj.html">12</a>  <a href="chap13_mj.html">13</a>  <a href="chap14_mj.html">14</a>  <a href="chapA_mj.html">A</a>  <a href="chapB_mj.html">B</a>  <a href="chapC_mj.html">C</a>  <a href="chapBib_mj.html">Bib</a>  <a href="chapInd_mj.html">Ind</a>  </div>

<div class="chlinkprevnexttop"> <a href="chap0_mj.html">[Top of Book]</a>   <a href="chap0_mj.html#contents">[Contents]</a>    <a href="chap9_mj.html">[Previous Chapter]</a>    <a href="chap11_mj.html">[Next Chapter]</a>   </div>

<p id="mathjaxlink" class="pcenter"><a href="chap10.html">[MathJax off]</a></p>
<p><a id="X876240A479A5717C" name="X876240A479A5717C"></a></p>
<div class="ChapSects"><a href="chap10_mj.html#X876240A479A5717C">10 <span class="Heading">Geometry Morphisms</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap10_mj.html#X850559BF7886E0D2">10.1 <span class="Heading">Geometry morphisms in FinInG</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X7A3BDDBE7BADCF0A">10.1-1 IsGeometryMorphism</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X86E0B2117DD536D2">10.1-2 Intertwiner</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap10_mj.html#X7926E5367D0C80B7">10.2 <span class="Heading">Type preserving bijective geometry morphisms</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X8774AF5B840E488D">10.2-1 IsomorphismPolarSpaces</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap10_mj.html#X79C677CD7B7EC451">10.3 <span class="Heading">Klein correspondence and derived dualities</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X7C8E719883F407BB">10.3-1 PluckerCoordinates</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X7CD8E5187C5B7116">10.3-2 KleinCorrespondence</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X7CD8E5187C5B7116">10.3-3 KleinCorrespondence</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X7FE537C57F2F6BAA">10.3-4 KleinCorrespondenceExtended</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X8472EBA584544B51">10.3-5 NaturalDuality</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X7954DA578247B06F">10.3-6 SelfDuality</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap10_mj.html#X86D21DCB7C0029F9">10.4 <span class="Heading">Embeddings of projective spaces</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X857976B679B8EC30">10.4-1 NaturalEmbeddingBySubspace</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X82510EF078F0806E">10.4-2 NaturalEmbeddingBySubField</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X7BC7FCDC7D9E1A09">10.4-3 <span class="Heading"> Embedding of projective spaces by field reduction</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X7F84986879DD952A">10.4-4 BlownUpSubspaceOfProjectiveSpace</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X7D2D9AD287532FDB">10.4-5 NaturalEmbeddingByFieldReduction</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap10_mj.html#X7C00DD48787B1EEE">10.5 <span class="Heading">Embeddings of polar spaces</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X857976B679B8EC30">10.5-1 NaturalEmbeddingBySubspace</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X82510EF078F0806E">10.5-2 NaturalEmbeddingBySubField</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X7823BA95797898CE">10.5-3 <span class="Heading">Embedding of polar spaces by field reduction</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X7D2D9AD287532FDB">10.5-4 NaturalEmbeddingByFieldReduction</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X7D2D9AD287532FDB">10.5-5 NaturalEmbeddingByFieldReduction</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap10_mj.html#X81FAC1DE7C4B1972">10.6 <span class="Heading">Projections</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X7B9E8AB682EC07C2">10.6-1 NaturalProjectionBySubspace</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap10_mj.html#X7952EE1A80D53825">10.7 <span class="Heading">Projective completion</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap10_mj.html#X7E23CA137AEFD1D2">10.7-1 ProjectiveCompletion</a></span>
</div></div>
</div>

<h3>10 <span class="Heading">Geometry Morphisms</span></h3>

<p>Here we describe what is meant by a <em>geometry morphism</em> in <strong class="pkg">FinInG</strong> and the various operations and tools available to the user. When using groups in <strong class="pkg">GAP</strong>, we often use homomorphisms to pass from one situation to another, even though mathematically it may appear to be unnecessary, there can be ambiguities if the functionality is too flexible. This also applies to finite geometry. Take for example the usual exercise of thinking of a hyperplane in a projective space as another projective space. To conform with similar situations in <strong class="pkg">GAP</strong>, the right thing to do is to embed one projective space into another, rather than having one projective space automatically as a substructure of another. The reason for this is that there are many ways one can do this embedding, even though we may dispense with this choice when we are working mathematically. So to avoid ambiguity, we stipulate that one should construct the embedding explicitly. How this is done will be described this chapter.</p>

<p>Suppose that <span class="SimpleMath">\(S\)</span> and <span class="SimpleMath">\(S'\) are two incidence geometries. A geometry morphism from \(S\) to \(S'\)</span> is defined to be a map from the elements of <span class="SimpleMath">\(S\)</span> to the elements of <span class="SimpleMath">\(S'\) which preserves incidence and induces a function from the type set of \(S\) to the type set of \(S'\)</span>. For instance, a correlation and a collineation are examples of geometry morphisms, but they have been dealt with in more specific ways in <strong class="pkg">FinInG</strong>. We will mainly be concerned with geometry morphisms where the source and range are different. Hence, the natural embedding of a projective space in a larger projective space, the mapping induced by field reduction, and e.g. the Klein correspondence are examples of such geometry morphisms.</p>

<p>As a geometry morphism from <span class="SimpleMath">\(S\)</span> to <span class="SimpleMath">\(S'\) preserves incidence, it also preserves the symmetry, and hence it induces also a map from the collineation group of \(S\) into the collineation group of \(S'\)</span>. Such a map will be called an <em>Intertwiner</em>, and <strong class="pkg">FinInG</strong> can provide these maps for some of the geometry morphisms.</p>

<p>Note that quite some technicalities are needed in the implementation of some geometry morphisms. This chapters deals only with the user interface. Some low level functions for geometry morphisms are described in Appendix <a href="chapC_mj.html#X874D94F47C943D71"><span class="RefLink">C</span></a>.</p>

<p><a id="X850559BF7886E0D2" name="X850559BF7886E0D2"></a></p>

<h4>10.1 <span class="Heading">Geometry morphisms in FinInG</span></h4>

<p><a id="X7A3BDDBE7BADCF0A" name="X7A3BDDBE7BADCF0A"></a></p>

<h5>10.1-1 IsGeometryMorphism</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsGeometryMorphism</code></td><td class="tdright">( family )</td></tr></table></div>
<p>The category <code class="code">IsGeometryMorphism</code> represents a special object in <strong class="pkg">FinInG</strong> which carries attributes and the given element map. The element map is given as a <code class="code">IsGeneralMapping</code>, and so has a source and range.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ShowImpliedFilters(IsGeometryMorphism);</span>
Implies:
   IsGeneralMapping
   IsTotal
   Tester(IsTotal)
   IsSingleValued
   Tester(IsSingleValued)
 
</pre></div>

<p>The usual operations of <code class="code">ImageElm</code>, and <code class="code">PreImageElm</code>, have methods installed for geometry morphisms, as well as the overload operator <code class="code">\^</code>.</p>

<p><a id="X86E0B2117DD536D2" name="X86E0B2117DD536D2"></a></p>

<h5>10.1-2 Intertwiner</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Intertwiner</code>( <var class="Arg">f</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: a group homomorphism</p>

<p>The argument <var class="Arg">f</var> is a geometry morphism. If <var class="Arg">f</var> comes equipped with a natural intertwiner from an automorphism group of the source of <var class="Arg">f</var> to the automorphism group to the image of <var class="Arg">f</var>, then the user may is able to obtain the intertwiner by calling this operation (see the individual geometry morphism constructions). For most geometry morphisms, there is also an accompanying intertwiner for the automorphism groups of the source and range. Given a geometry morphism <span class="SimpleMath">\(f\)</span> from <span class="SimpleMath">\(S\)</span> to <span class="SimpleMath">\(S'\), an intertwiner φ is a map from the automorphism group of \(S\) to the automorphism group of \(S'\)</span>, such that for every element <span class="SimpleMath">\(p\)</span> of <span class="SimpleMath">\(S\)</span> and every automorphism <span class="SimpleMath">\(g\)</span> of <span class="SimpleMath">\(S\)</span>, we have</p>

<p class="center">\[ f(p^g) = f(p)^{\phi(g)}.\]</p>

<p>There is no method to compute an intertwiner for a given geometry morphism, the attribute is or is not set during the construction of the geometry morphism, depending whether the Source and Range of the morphism have the appropriate automorphism group known as an attribute. When this condition is not satisfied, the user is expected to call the appropriate automorphism groups, so that they are computed, and to recompute the geometry morphism (which will not cost a lot of computation time then). This will make the attribute <code class="file">Intertwiner</code> available. Here is a simple example of the intertwiner for the isomorphism of two polar spaces (see <code class="func">IsomorphismPolarSpaces</code> (<a href="chap10_mj.html#X8774AF5B840E488D"><span class="RefLink">10.2-1</span></a>)). The source of the homomorphism is dependent on the geometry.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">form := BilinearFormByMatrix( IdentityMat(3,GF(3)), GF(3) );</span>
< bilinear form >
<span class="GAPprompt">gap></span> <span class="GAPinput">ps := PolarSpace(form);</span>
<polar space in ProjectiveSpace(2,GF(3)): x_1^2+x_2^2+x_3^2=0 >
<span class="GAPprompt">gap></span> <span class="GAPinput">pq := ParabolicQuadric(2,3);</span>
standard Q(2, 3)
<span class="GAPprompt">gap></span> <span class="GAPinput">iso := IsomorphismPolarSpaces(ps, pq);</span>
#I  Computing nice monomorphism...
<geometry morphism from <Elements of <polar space in ProjectiveSpace(2,GF(
3)): x_1^2+x_2^2+x_3^2=0 >> to <Elements of standard Q(2, 3)>>
<span class="GAPprompt">gap></span> <span class="GAPinput">KnownAttributesOfObject(iso);</span>
"Range""Source""Intertwiner" ]
<span class="GAPprompt">gap></span> <span class="GAPinput">hom := Intertwiner(iso);</span>
MappingByFunction( <projective semilinear group with 
3 generators>, PGammaO(3,3), function( y ) ... end, function( x ) ... end )
 
</pre></div>

<p><a id="X7926E5367D0C80B7" name="X7926E5367D0C80B7"></a></p>

<h4>10.2 <span class="Heading">Type preserving bijective geometry morphisms</span></h4>

<p>An important class of geometry morphisms in <strong class="pkg">FinInG</strong> are the isomorphisms between polar spaces of the same kind that are induced by coordinate transformations.</p>

<p><a id="X8774AF5B840E488D" name="X8774AF5B840E488D"></a></p>

<h5>10.2-1 IsomorphismPolarSpaces</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsomorphismPolarSpaces</code>( <var class="Arg">ps1</var>, <var class="Arg">ps2</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">‣ IsomorphismPolarSpaces</code>( <var class="Arg">ps1</var>, <var class="Arg">ps2</var>, <var class="Arg">boolean</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a geometry morphism</p>

<p>The arguments <var class="Arg">ps1</var> and <var class="Arg">ps2</var> are <em>equivalent</em> polar spaces, i.e. up to coordinate transformation, the underlying sesquilinear or quadratic form determines the same polar space, or, <var class="Arg">ps1</var> is a parabolic quadric over a finite field <span class="SimpleMath">\(f\)</span> of even characteristic in dimension <span class="SimpleMath">\(2n\)</span> and <var class="Arg">ps2</var> is a symplectic space over <span class="SimpleMath">\(f\)</span> in dimension <span class="SimpleMath">\(2n-1\)</span>, then this operation returns a geometry isomorphism between them. The optional third argument <var class="Arg">boolean</var> can take either <code class="code">true</code> or <code class="code">false</code> as input, and then the operation will or will not compute the intertwiner accordingly. The user may wish that the intertwiner is not computed when working with large polar spaces. The default (when calling the operation with two arguments) is set to <code class="code">true</code>, and in this case, if at least one of <var class="Arg">ps1</var> or <var class="Arg">ps2</var> has a collineation group installed as an attribute, then an intertwining homomorphism is installed as an attribute of the resulting geometry morphism. Hence we also obtain a natural group isomorphism from the collineation group of <var class="Arg">ps1</var> onto the collineation group of <var class="Arg">ps2</var> (see also <code class="func">Intertwiner</code> (<a href="chap10_mj.html#X86E0B2117DD536D2"><span class="RefLink">10.1-2</span></a>)).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">mat1 := IdentityMat(6,GF(5));</span>
< mutable compressed matrix 6x6 over GF(5) >
<span class="GAPprompt">gap></span> <span class="GAPinput">form1 := BilinearFormByMatrix(mat1,GF(5));</span>
< bilinear form >
<span class="GAPprompt">gap></span> <span class="GAPinput">ps1 := PolarSpace(form1);</span>
<polar space in ProjectiveSpace(
5,GF(5)): x_1^2+x_2^2+x_3^2+x_4^2+x_5^2+x_6^2=0 >
<span class="GAPprompt">gap></span> <span class="GAPinput">mat2 := [[0,0,0,0,0,1],[0,0,0,0,1,0],[0,0,0,1,0,0],</span>
<span class="GAPprompt">></span> <span class="GAPinput">[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]]*Z(5)^0;</span>
[ [ 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0 ], 
  [ 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0, 0*Z(5) ], 
  [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5)^0, 0*Z(5), 0*Z(5) ], 
  [ 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5) ], 
  [ 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5) ], 
  [ 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5) ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">form2 := QuadraticFormByMatrix(mat2,GF(5));</span>
< quadratic form >
<span class="GAPprompt">gap></span> <span class="GAPinput">ps2 := PolarSpace(form2);</span>
<polar space in ProjectiveSpace(5,GF(5)): x_1*x_6+x_2*x_5+x_3*x_4=0 >
<span class="GAPprompt">gap></span> <span class="GAPinput">iso := IsomorphismPolarSpaces(ps1,ps2,true);</span>
#I  No intertwiner computed. One of the polar spaces must have a collineation group computed
<geometry morphism from <Elements of Q+(5, 
5): x_1^2+x_2^2+x_3^2+x_4^2+x_5^2+x_6^2=0> to <Elements of Q+(5, 
5): x_1*x_6+x_2*x_5+x_3*x_4=0>>
<span class="GAPprompt">gap></span> <span class="GAPinput">CollineationGroup(ps1);</span>
#I  Computing collineation group of canonical polar space...
<projective collineation group of size 58032000000 with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">CollineationGroup(ps2);</span>
#I  Computing collineation group of canonical polar space...
<projective collineation group of size 58032000000 with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">iso := IsomorphismPolarSpaces(ps1,ps2,true);</span>
<geometry morphism from <Elements of Q+(5, 
5): x_1^2+x_2^2+x_3^2+x_4^2+x_5^2+x_6^2=0> to <Elements of Q+(5, 
5): x_1*x_6+x_2*x_5+x_3*x_4=0>>
<span class="GAPprompt">gap></span> <span class="GAPinput">hom := Intertwiner( iso );</span>
MappingByFunction( <projective collineation group of size 58032000000 with 
4 generators>, <projective collineation group of size 58032000000 with 
4 generators>, function( y ) ... end, function( x ) ... end )
<span class="GAPprompt">gap></span> <span class="GAPinput">ps1 := ParabolicQuadric(6,8);</span>
Q(6, 8)
<span class="GAPprompt">gap></span> <span class="GAPinput">ps2 := SymplecticSpace(5,8);</span>
W(5, 8)
<span class="GAPprompt">gap></span> <span class="GAPinput">em := IsomorphismPolarSpaces(ps1,ps2);</span>
#I  Have 36171 points.
#I  Have 37381 points in new orbit.
#I  Have 36171 points.
#I  Have 37388 points in new orbit.
<geometry morphism from <Elements of Q(6, 8)> to <Elements of W(5, 8)>>
<span class="GAPprompt">gap></span> <span class="GAPinput">hom := Intertwiner(em);</span>
MappingByFunction( PGammaO(7,8), <projective collineation group of size 
27231016821530296320 with 
3 generators>, function( el ) ... end, function( el ) ... end )
 
</pre></div>

<p><a id="X79C677CD7B7EC451" name="X79C677CD7B7EC451"></a></p>

<h4>10.3 <span class="Heading">Klein correspondence and derived dualities</span></h4>

<p>The Klein correspondence is a well known geometry morphism from the lines of <span class="SimpleMath">\(\mathrm{PG}(3,q)\)</span> to the points of a hyperbolic quadric in <span class="SimpleMath">\(\mathrm{PG}(5,q)\)</span>. This morphism and some derived morphisms are provided in <strong class="pkg">FinInG</strong>. The bare essential of the Klein correspondence is the so-called Plücker map.</p>

<p><a id="X7C8E719883F407BB" name="X7C8E719883F407BB"></a></p>

<h5>10.3-1 PluckerCoordinates</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PluckerCoordinates</code>( <var class="Arg">line</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>This operation takes a line of <span class="SimpleMath">\(\mathrm{PG}(3,q)\)</span> as argument. It returns the plucker coordinates of the argument as list of finite field elements. The returned list can be used in operations as <code class="file">vector spaceToElement</code>, and represents a point of the hyperbolic quadric in <span class="SimpleMath">\(\mathrm{PG}(5,q)\)</span> with equation <span class="SimpleMath">\(X_0X_5+X_1X_4+X_2X_3 = 0\)</span></p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := PG(3,169);</span>
ProjectiveSpace(3, 169)
<span class="GAPprompt">gap></span> <span class="GAPinput">l := Random(Lines(pg));</span>
<a line in ProjectiveSpace(3, 169)>
<span class="GAPprompt">gap></span> <span class="GAPinput">vec := PluckerCoordinates(l);</span>
[ Z(13)^0, Z(13^2)^138, Z(13^2)^93, Z(13^2)^53, Z(13^2)^71, Z(13^2)^106 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">mat := [[0,0,0,0,0,1],[0,0,0,0,1,0],[0,0,0,1,0,0],</span>
<span class="GAPprompt">></span> <span class="GAPinput">[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]]*Z(13)^0;</span>
[ [ 0*Z(13), 0*Z(13), 0*Z(13), 0*Z(13), 0*Z(13), Z(13)^0 ], 
  [ 0*Z(13), 0*Z(13), 0*Z(13), 0*Z(13), Z(13)^0, 0*Z(13) ], 
  [ 0*Z(13), 0*Z(13), 0*Z(13), Z(13)^0, 0*Z(13), 0*Z(13) ], 
  [ 0*Z(13), 0*Z(13), 0*Z(13), 0*Z(13), 0*Z(13), 0*Z(13) ], 
  [ 0*Z(13), 0*Z(13), 0*Z(13), 0*Z(13), 0*Z(13), 0*Z(13) ], 
  [ 0*Z(13), 0*Z(13), 0*Z(13), 0*Z(13), 0*Z(13), 0*Z(13) ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">form := QuadraticFormByMatrix(mat,GF(169));</span>
< quadratic form >
<span class="GAPprompt">gap></span> <span class="GAPinput">klein := PolarSpace(form);</span>
<polar space in ProjectiveSpace(5,GF(13^2)): x_1*x_6+x_2*x_5+x_3*x_4=0 >
<span class="GAPprompt">gap></span> <span class="GAPinput">VectorSpaceToElement(klein,vec);</span>
<a point in Q+(5, 169): x_1*x_6+x_2*x_5+x_3*x_4=0>

</pre></div>

<p><a id="X7CD8E5187C5B7116" name="X7CD8E5187C5B7116"></a></p>

<h5>10.3-2 KleinCorrespondence</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ KleinCorrespondence</code>( <var class="Arg">f</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">‣ KleinCorrespondence</code>( <var class="Arg">f</var>, <var class="Arg">boolean</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">‣ KleinCorrespondence</code>( <var class="Arg">q</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">‣ KleinCorrespondence</code>( <var class="Arg">q</var>, <var class="Arg">boolean</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a geometry morphism</p>

<p>The argument <var class="Arg">f</var> is a finite field, the argument <var class="Arg">q</var> is a prime power. The first an the third version use <code class="keyw">true</code> as value for <var class="Arg">boolean</var>. When using <code class="keyw">true</code> as value for the boolean, the intertwiner is computed. This variant of the operation <code class="file">KleinCorrespondence</code> has always as ambient geometry of its range the hyperbolic quadric <span class="SimpleMath">\(\mathrm{Q}^+(5,q)\)</span> with equation The returned geometry morphism has the lines of <span class="SimpleMath">\(\mathrm{PG}(3,q)\)</span> as source and the points of <span class="SimpleMath">\(\mathrm{Q}^+(5,q)\)</span> as range.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">k := KleinCorrespondence( 9 );</span>
<geometry morphism from <lines of ProjectiveSpace(3, 9)> to <points of Q+(5, 
9): x_1*x_6+x_2*x_5+x_3*x_4=0>>
<span class="GAPprompt">gap></span> <span class="GAPinput">Intertwiner(k);</span>
MappingByFunction( The FinInG collineation group PGammaL(4,9), <projective col
lineation group with 
3 generators>, function( g ) ... end, function( g ) ... end )
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := ProjectiveSpace(3, 9);</span>
ProjectiveSpace(3, 9)
<span class="GAPprompt">gap></span> <span class="GAPinput">AmbientGeometry(Range(k));</span>
Q+(5, 9): x_1*x_6+x_2*x_5+x_3*x_4=0
<span class="GAPprompt">gap></span> <span class="GAPinput">l := Random( Lines(pg) );</span>
<a line in ProjectiveSpace(3, 9)>
<span class="GAPprompt">gap></span> <span class="GAPinput">l^k;</span>
<a point in Q+(5, 9): x_1*x_6+x_2*x_5+x_3*x_4=0>

</pre></div>

<p><a id="X7CD8E5187C5B7116" name="X7CD8E5187C5B7116"></a></p>

<h5>10.3-3 KleinCorrespondence</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ KleinCorrespondence</code>( <var class="Arg">quadric</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">‣ KleinCorrespondence</code>( <var class="Arg">quadric</var>, <var class="Arg">boolean</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a geometry morphism</p>

<p>The argument <var class="Arg">quadric</var> is a hyperbolic quadric in a 5 dimensional projective space. If <var class="Arg">boolean</var> is <code class="keyw">true</code> or not given, this operation returns the geometry morphism equipped with an intertwiner. The returned geometry morphism has the lines of <span class="SimpleMath">\(\mathrm{PG}(3,q)\)</span> as source and the points of <span class="SimpleMath">\(\mathrm{Q}^+(5,q)\)</span> as range.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">quadric := HyperbolicQuadric(5,3);                                         </span>
Q+(5, 3)
<span class="GAPprompt">gap></span> <span class="GAPinput">k := KleinCorrespondence( quadric );</span>
<geometry morphism from <lines of ProjectiveSpace(3, 3)> to <points of Q+(5, 
3)>>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := ProjectiveSpace(3, 3);</span>
ProjectiveSpace(3, 3)
<span class="GAPprompt">gap></span> <span class="GAPinput">l := Random( Lines(pg) );</span>
<a line in ProjectiveSpace(3, 3)>
<span class="GAPprompt">gap></span> <span class="GAPinput">l^k;</span>
<a point in Q+(5, 3)>
<span class="GAPprompt">gap></span> <span class="GAPinput">id := IdentityMat(6,GF(13));</span>
< mutable compressed matrix 6x6 over GF(13) >
<span class="GAPprompt">gap></span> <span class="GAPinput">form := QuadraticFormByMatrix(id,GF(13));</span>
< quadratic form >
<span class="GAPprompt">gap></span> <span class="GAPinput">quadric := PolarSpace(form);</span>
<polar space in ProjectiveSpace(
5,GF(13)): x_1^2+x_2^2+x_3^2+x_4^2+x_5^2+x_6^2=0 >
<span class="GAPprompt">gap></span> <span class="GAPinput">k := KleinCorrespondence( quadric );</span>
<geometry morphism from <lines of ProjectiveSpace(3, 13)> to <points of Q+(5, 
13): x_1^2+x_2^2+x_3^2+x_4^2+x_5^2+x_6^2=0>>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := AmbientGeometry(Source(k));</span>
ProjectiveSpace(3, 13)
<span class="GAPprompt">gap></span> <span class="GAPinput">l := Random(Lines(pg));</span>
<a line in ProjectiveSpace(3, 13)>
<span class="GAPprompt">gap></span> <span class="GAPinput">l^k;</span>
<a point in Q+(5, 13): x_1^2+x_2^2+x_3^2+x_4^2+x_5^2+x_6^2=0>

</pre></div>

<p><a id="X7FE537C57F2F6BAA" name="X7FE537C57F2F6BAA"></a></p>

<h5>10.3-4 KleinCorrespondenceExtended</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ KleinCorrespondenceExtended</code>( <var class="Arg">quadric</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">‣ KleinCorrespondenceExtended</code>( <var class="Arg">quadric</var>, <var class="Arg">boolean</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a geometry morphism</p>

<p>The argument <var class="Arg">quadric</var> is a hyperbolic quadric in a 5 dimensional projective space. If <var class="Arg">boolean</var> is <code class="keyw">true</code> or not given, this operation returns the geometry morphism equipped with an intertwiner. The returned geometry morphism has all the elements of <span class="SimpleMath">\(\mathrm{PG}(3,q)\)</span> as source (not just the lines) and the elements of <span class="SimpleMath">\(\mathrm{Q}^+(5,q)\)</span> as range, hence this operation is a kind of extension of <code class="file">KleinCorrespondence</code>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ps := HyperbolicQuadric(5,7);</span>
Q+(5, 7)
<span class="GAPprompt">gap></span> <span class="GAPinput">em := KleinCorrespondenceExtended(ps);</span>
<geometry morphism from <All elements of ProjectiveSpace(3, 
7)> to <Elements of Q+(5, 7)>>
<span class="GAPprompt">gap></span> <span class="GAPinput">hom := Intertwiner(em);</span>
MappingByFunction( The FinInG collineation group PGL(4,7), <projective colline
ation group with 2 generators>, function( g ) ... end, function( g ) ... end )
<span class="GAPprompt">gap></span> <span class="GAPinput">mat := [[0,0,0,0,0,1],[0,0,0,0,1,0],[0,0,0,1,0,0],</span>
<span class="GAPprompt">></span> <span class="GAPinput"> [0,0,1,0,0,0],[0,1,0,0,0,0],[1,0,0,0,0,0]]*Z(7)^0;</span>
[ [ 0*Z(7), 0*Z(7), 0*Z(7), 0*Z(7), 0*Z(7), Z(7)^0 ], 
  [ 0*Z(7), 0*Z(7), 0*Z(7), 0*Z(7), Z(7)^0, 0*Z(7) ], 
  [ 0*Z(7), 0*Z(7), 0*Z(7), Z(7)^0, 0*Z(7), 0*Z(7) ], 
  [ 0*Z(7), 0*Z(7), Z(7)^0, 0*Z(7), 0*Z(7), 0*Z(7) ], 
  [ 0*Z(7), Z(7)^0, 0*Z(7), 0*Z(7), 0*Z(7), 0*Z(7) ], 
  [ Z(7)^0, 0*Z(7), 0*Z(7), 0*Z(7), 0*Z(7), 0*Z(7) ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">g := Projectivity(mat,GF(7));</span>
< a collineation: <cmat 6x6 over GF(7,1)>, F^0>
<span class="GAPprompt">gap></span> <span class="GAPinput">g in CollineationGroup(ps);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">PreImageElm(hom,g);</span>
#I  <el> is not inducing a collineation of PG(3,q)
fail

</pre></div>

<p>It is well known that the classical generalised quadrangles <span class="SimpleMath">\(\mathrm{W}(3,q)\)</span> and <span class="SimpleMath">\(\mathrm{Q}(4,q)\)</span> are dual incidence structures, the same holds for the classical generalised quadrangles <span class="SimpleMath">\(\mathrm{Q}^-(5,q)\)</span> and <span class="SimpleMath">\(\mathrm{H}(3,q^2)\)</span>. Essentially, these dual dualities are based on the Klein correspondence, and are implemented through the operation <code class="file">NaturalDuality</code>, this operation will return a geometry morphism with <code class="code">ElementsOfIncidenceStructure(gq1)</code> as source and <code class="code">ElementsOfIncidenceStructure(gq2)</code> as range, in other words, it is a geometry morphism from all the elements of <var class="Arg">gq1</var> onto all the elements of <var class="Arg">gq2</var>, preserving the incidence, and swapping the types.</p>

<p><a id="X8472EBA584544B51" name="X8472EBA584544B51"></a></p>

<h5>10.3-5 NaturalDuality</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NaturalDuality</code>( <var class="Arg">gq1</var>, <var class="Arg">gq2</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">‣ NaturalDuality</code>( <var class="Arg">gq1</var>, <var class="Arg">gq2</var>, <var class="Arg">boolean</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">‣ NaturalDuality</code>( <var class="Arg">gq</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">‣ NaturalDuality</code>( <var class="Arg">gq</var>, <var class="Arg">boolean</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a geometry morphism</p>

<p>The operation allows the construction of the duality between <span class="SimpleMath">\(\mathrm{W}(3,q)\)</span> and <span class="SimpleMath">\(\mathrm{Q}(4,q)\)</span>, respectively <span class="SimpleMath">\(\mathrm{Q}^-(5,q)\)</span>, in two directions. It is checked if the arguments are appropriate, i.e. the right type of generalised quadrangle(s). The first version requires two arguments: either the symplectic or parabolic quadrangle, in any order, and defined by any suitable bilinear/quadratic and bilinear form; or the elliptic or hermitian quadrangle (in dimension <span class="SimpleMath">\(3\)</span>), in any order, and defined by any suitable bilinear/quadratic and hermitian form. In all cases the generalised quadrangles may be the standard one provided by the package <strong class="pkg">FinInG</strong>.</p>

<p>The third version requires only one argument, either <span class="SimpleMath">\(\mathrm{W}(3,q)\)</span>, <span class="SimpleMath">\(\mathrm{Q}(4,q)\)</span>, <span class="SimpleMath">\(\mathrm{Q}^-(5,q)\)</span>, or <span class="SimpleMath">\(\mathrm{H}(3,q^2)\)</span>, standard or user specified using an appropriate bilinear, quadratic or hermitian form. The range of the returned geometry morphism will be the set of all elements of a suitable generalised quadrangle, in standard form.</p>

<p>The first and third version without a boolean as argument will, if possible return a geometry morphism equipped with an intertwiner. Using the boolean argument <var class="Arg">false</var> will return a geometry morphism that is not equipped with an intertwiner.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">w := SymplecticSpace(3,5);</span>
W(3, 5)
<span class="GAPprompt">gap></span> <span class="GAPinput">lines:=AsList(Lines(w));;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">duality := NaturalDuality(w);</span>
<geometry morphism from <Elements of W(3, 5)> to <Elements of Q(4, 5)>>
<span class="GAPprompt">gap></span> <span class="GAPinput">l:=lines[1];</span>
<a line in W(3, 5)>
<span class="GAPprompt">gap></span> <span class="GAPinput">l^duality;</span>
<a point in Q(4, 5)>
<span class="GAPprompt">gap></span> <span class="GAPinput">PreImageElm(duality,last);</span>
<a line in W(3, 5)>
<span class="GAPprompt">gap></span> <span class="GAPinput">hom := Intertwiner(duality);</span>
MappingByFunction( PGammaSp(4,5), <projective collineation group of size 
9360000 with 4 generators>, function( g ) ... end, function( g ) ... end )
<span class="GAPprompt">gap></span> <span class="GAPinput">q := 5;</span>
5
<span class="GAPprompt">gap></span> <span class="GAPinput">q5q := EllipticQuadric(5,q);</span>
Q-(5, 5)
<span class="GAPprompt">gap></span> <span class="GAPinput">mat := [[0,1,0,0],[1,0,0,0],[0,0,0,Z(q)],[0,0,Z(q),0]]*Z(q)^0;</span>
[ [ 0*Z(5), Z(5)^0, 0*Z(5), 0*Z(5) ], [ Z(5)^0, 0*Z(5), 0*Z(5), 0*Z(5) ], 
  [ 0*Z(5), 0*Z(5), 0*Z(5), Z(5) ], [ 0*Z(5), 0*Z(5), Z(5), 0*Z(5) ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">hform := HermitianFormByMatrix(mat,GF(q^2));</span>
< hermitian form >
<span class="GAPprompt">gap></span> <span class="GAPinput">herm := PolarSpace(hform);</span>
<polar space in ProjectiveSpace(
3,GF(5^2)): x1^5*x2+x1*x2^5+Z(5)*x3^5*x4+Z(5)*x3*x4^5=0 >
<span class="GAPprompt">gap></span> <span class="GAPinput">duality := NaturalDuality(q5q,herm,true);</span>
<geometry morphism from <Elements of Q-(5, 5)> to <Elements of H(3, 
5^2): x1^5*x2+x1*x2^5+Z(5)*x3^5*x4+Z(5)*x3*x4^5=0>>
<span class="GAPprompt">gap></span> <span class="GAPinput">hom := Intertwiner(duality);</span>
MappingByFunction( PDeltaO-(6,5), <projective collineation group of size 
58968000000 with 3 generators>, function( g ) ... end, function( g ) ... end )
<span class="GAPprompt">gap></span> <span class="GAPinput">g := Random(CollineationGroup(q5q));</span>
< a collineation: <cmat 6x6 over GF(5,1)>, F^0>
<span class="GAPprompt">gap></span> <span class="GAPinput">g^hom;</span>
< a collineation: <cmat 4x4 over GF(5,2)>, F^5>

</pre></div>

<p>The combination of the isomorphism of the GQs <span class="SimpleMath">\(\mathrm{W}(3,q)\)</span>, <span class="SimpleMath">\(\mathrm{Q}(4,q)\)</span> when <span class="SimpleMath">\(q\)</span> is even and the duality between the same GQs, yields a duality from each of these GQs itself. The operation <code class="file">SelfDuality</code> implements this combination.</p>

<p><a id="X7954DA578247B06F" name="X7954DA578247B06F"></a></p>

<h5>10.3-6 SelfDuality</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SelfDuality</code>( <var class="Arg">gq</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">‣ SelfDuality</code>( <var class="Arg">gq</var>, <var class="Arg">boolean</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a geometry morphism</p>

<p>It is checked whether the base field of <var class="Arg">gq</var> is a field of characteristic 2 and whether <var class="Arg">gq</var> is a symplectic generalised quadrangle in 3-dimensional projective space or a parabolic quadric in 4-dimensional projective space. The first version will return, when possible, a geometry morphism equipped with an intertwiner. Using the boolean argument <var class="Arg">false</var> will return a geometry morphism that is not equipped with an intertwiner. The example shows the use of the boolean argument.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">q := 16;</span>
16
<span class="GAPprompt">gap></span> <span class="GAPinput">mat := [[0,1,0,0,0],[0,0,0,0,0],[0,0,1,0,0],[0,0,0,0,0],[0,0,0,1,0]]*Z(q)^0;</span>
[ [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ], 
  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
  [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ], 
  [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ], 
  [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">form := QuadraticFormByMatrix(mat,GF(q));</span>
< quadratic form >
<span class="GAPprompt">gap></span> <span class="GAPinput">q4q := PolarSpace(form);</span>
<polar space in ProjectiveSpace(4,GF(2^4)): x_1*x_2+x_3^2+x_4*x_5=0 >
<span class="GAPprompt">gap></span> <span class="GAPinput">em := SelfDuality(q4q);</span>
#I  No intertwiner computed. The polar space must have a collineation group computed
<geometry morphism from <Elements of Q(4, 
16): x_1*x_2+x_3^2+x_4*x_5=0> to <Elements of Q(4, 
16): x_1*x_2+x_3^2+x_4*x_5=0>>
<span class="GAPprompt">gap></span> <span class="GAPinput">CollineationGroup(q4q);</span>
#I  Computing collineation group of canonical polar space...
<projective collineation group of size 4380799795200 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">em := SelfDuality(q4q);</span>
<geometry morphism from <Elements of Q(4, 
16): x_1*x_2+x_3^2+x_4*x_5=0> to <Elements of Q(4, 
16): x_1*x_2+x_3^2+x_4*x_5=0>>
<span class="GAPprompt">gap></span> <span class="GAPinput">hom := Intertwiner(em);</span>
MappingByFunction( <projective collineation group of size 4380799795200 with 
3 generators>, <projective collineation group of size 4380799795200 with 
3 generators>, function( el ) ... end, function( el ) ... end )
<span class="GAPprompt">gap></span> <span class="GAPinput">q := 16;</span>
16
<span class="GAPprompt">gap></span> <span class="GAPinput">w := SymplecticSpace(3,q);</span>
W(3, 16)
<span class="GAPprompt">gap></span> <span class="GAPinput">em := SelfDuality(w);</span>
<geometry morphism from <Elements of W(3, 16)> to <Elements of W(3, 16)>>

</pre></div>

<p><a id="X86D21DCB7C0029F9" name="X86D21DCB7C0029F9"></a></p>

<h4>10.4 <span class="Heading">Embeddings of projective spaces</span></h4>

<p>The most natural of geometry morphisms include, for example, the embedding of a projective space into another via a subspace, the embedding of a projective space over a field into a projective space of the same dimension over an extended field, or the embedding of a projective space over a field into a projective space of higher dimension over a subfield through so-called field reduction.</p>

<p><a id="X857976B679B8EC30" name="X857976B679B8EC30"></a></p>

<h5>10.4-1 NaturalEmbeddingBySubspace</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NaturalEmbeddingBySubspace</code>( <var class="Arg">geom1</var>, <var class="Arg">geom2</var>, <var class="Arg">v</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a geometry morphism</p>

<p>The arguments <var class="Arg">geom1</var> and <var class="Arg">geom2</var> are both projective spaces, and <var class="Arg">v</var> is an element of a geom2. This function returns a geometry morphism representing the natural embedding of <var class="Arg">geom1</var> into <var class="Arg">geom2</var> as the subspace <var class="Arg">v</var>. Hence <var class="Arg">geom1</var> and <var class="Arg">v</var> must be equivalent as geometries. An Intertwiner is not implemented for this geometry morphism.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">geom1 := ProjectiveSpace(2, 3);</span>
ProjectiveSpace(2, 3)
<span class="GAPprompt">gap></span> <span class="GAPinput">geom2 := ProjectiveSpace(3, 3);</span>
ProjectiveSpace(3, 3)
<span class="GAPprompt">gap></span> <span class="GAPinput">planes := Planes(geom2);</span>
<planes of ProjectiveSpace(3, 3)>
<span class="GAPprompt">gap></span> <span class="GAPinput">hyp := Random(planes);</span>
<a plane in ProjectiveSpace(3, 3)>
<span class="GAPprompt">gap></span> <span class="GAPinput">em := NaturalEmbeddingBySubspace(geom1, geom2, hyp);</span>
<geometry morphism from <All elements of ProjectiveSpace(2, 
3)> to <All elements of ProjectiveSpace(3, 3)>>
<span class="GAPprompt">gap></span> <span class="GAPinput">points := Points(geom1);</span>
<points of ProjectiveSpace(2, 3)>
<span class="GAPprompt">gap></span> <span class="GAPinput">x := Random(points);</span>
<a point in ProjectiveSpace(2, 3)>
<span class="GAPprompt">gap></span> <span class="GAPinput">x^em;</span>
<a point in ProjectiveSpace(3, 3)>

</pre></div>

<p><a id="X82510EF078F0806E" name="X82510EF078F0806E"></a></p>

<h5>10.4-2 NaturalEmbeddingBySubField</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NaturalEmbeddingBySubField</code>( <var class="Arg">geom1</var>, <var class="Arg">geom2</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">‣ NaturalEmbeddingBySubField</code>( <var class="Arg">geom1</var>, <var class="Arg">geom2</var>, <var class="Arg">boolean</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a geometry morphism</p>

<p>The arguments <var class="Arg">geom1</var> and <var class="Arg">geom2</var> are projective spaces of the same dimension. This function returns a geometry morphism representing the natural embedding of <var class="Arg">geom1</var> into <var class="Arg">geom2</var> as a subfield geometry. The geometry morphism also comes equipped with an intertwiner (see <code class="func">Intertwiner</code> (<a href="chap10_mj.html#X86E0B2117DD536D2"><span class="RefLink">10.1-2</span></a>)). The optional third argument <var class="Arg">boolean</var> can take either <code class="code">true</code> or <code class="code">false</code> as input, and then our operation will or will not compute the intertwiner accordingly. The default (when calling the operation with two arguments) is set to <code class="code">true</code>. Note that the source of the intertwiner is the projectivity group of <var class="Arg">geom1</var> and its range is a subgroup of the projectivity group of <var class="Arg">geom2</var>. Here is a simple example where the geometry morphism embeds <span class="SimpleMath">\(\mathrm{PG}(2,3)\)</span> into <span class="SimpleMath">\(\mathrm{PG}(2,9)\)</span> .</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg1 := PG(2,3);</span>
ProjectiveSpace(2, 3)
<span class="GAPprompt">gap></span> <span class="GAPinput">pg2 := PG(2,9);</span>
ProjectiveSpace(2, 9)
<span class="GAPprompt">gap></span> <span class="GAPinput">em := NaturalEmbeddingBySubfield(pg1,pg2);</span>
<geometry morphism from <All elements of ProjectiveSpace(2, 
3)> to <All elements of ProjectiveSpace(2, 9)>>
<span class="GAPprompt">gap></span> <span class="GAPinput">points := AsList(Points( pg1 ));</span>
[ <a point in ProjectiveSpace(2, 3)>, <a point in ProjectiveSpace(2, 3)>, 
  <a point in ProjectiveSpace(2, 3)>, <a point in ProjectiveSpace(2, 3)>, 
  <a point in ProjectiveSpace(2, 3)>, <a point in ProjectiveSpace(2, 3)>, 
  <a point in ProjectiveSpace(2, 3)>, <a point in ProjectiveSpace(2, 3)>, 
  <a point in ProjectiveSpace(2, 3)>, <a point in ProjectiveSpace(2, 3)>, 
  <a point in ProjectiveSpace(2, 3)>, <a point in ProjectiveSpace(2, 3)>, 
  <a point in ProjectiveSpace(2, 3)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">image := ImagesSet(em, points);</span>
[ <a point in ProjectiveSpace(2, 9)>, <a point in ProjectiveSpace(2, 9)>, 
  <a point in ProjectiveSpace(2, 9)>, <a point in ProjectiveSpace(2, 9)>, 
  <a point in ProjectiveSpace(2, 9)>, <a point in ProjectiveSpace(2, 9)>, 
  <a point in ProjectiveSpace(2, 9)>, <a point in ProjectiveSpace(2, 9)>, 
  <a point in ProjectiveSpace(2, 9)>, <a point in ProjectiveSpace(2, 9)>, 
  <a point in ProjectiveSpace(2, 9)>, <a point in ProjectiveSpace(2, 9)>, 
  <a point in ProjectiveSpace(2, 9)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">hom := Intertwiner(em);</span>
MappingByFunction( The FinInG projectivity group PGL(3,3), <projective colline
ation group of size 5616 with 
2 generators>, function( x ) ... end, function( y ) ... end )
<span class="GAPprompt">gap></span> <span class="GAPinput">group1 := ProjectivityGroup(pg1);</span>
The FinInG projectivity group PGL(3,3)
<span class="GAPprompt">gap></span> <span class="GAPinput">gens := GeneratorsOfGroup(group1);</span>
[ < a collineation: <cmat 3x3 over GF(3,1)>, F^0>, 
  < a collineation: <cmat 3x3 over GF(3,1)>, F^0> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">group1_image := Group(List(gens,x->x^hom));</span>
<projective collineation group with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Order(group1_image);</span>
5616
<span class="GAPprompt">gap></span> <span class="GAPinput">group2 := ProjectivityGroup(pg2);</span>
The FinInG projectivity group PGL(3,9)
<span class="GAPprompt">gap></span> <span class="GAPinput">Order(group2);</span>
42456960
<span class="GAPprompt">gap></span> <span class="GAPinput">g := Random(group2);</span>
< a collineation: <cmat 3x3 over GF(3,2)>, F^0>
<span class="GAPprompt">gap></span> <span class="GAPinput">PreImageElm(hom,g);</span>
#I  <el> is not in the range of the intertwiner
fail

</pre></div>

<p><a id="X7BC7FCDC7D9E1A09" name="X7BC7FCDC7D9E1A09"></a></p>

<h5>10.4-3 <span class="Heading"> Embedding of projective spaces by field reduction</span></h5>

<p>We briefly describe the mathematics behind field reduction. For more details we refer to <a href="chapBib_mj.html#biBLaVa">[LVdV13]</a>. Consider the fields <span class="SimpleMath">\(\mathrm{GF}(q)\)</span> and <span class="SimpleMath">\(\mathrm{GF}(q^t)\)</span>. The field <span class="SimpleMath">\(\mathrm{GF}(q^t)\)</span> is a <span class="SimpleMath">\(t\)</span>-dimensional vector space over <span class="SimpleMath">\(\mathrm{GF}(q)\)</span>. Hence, with respect to a chosen basis <span class="SimpleMath">\(B\)</span> for <span class="SimpleMath">\(\mathrm{GF}(q^t)\)</span> as a <span class="SimpleMath">\(\mathrm{GF}(q)\)</span>-vector space, the bijection between the vector spaces <span class="SimpleMath">\(V(n,q^t)\)</span> and <span class="SimpleMath">\(V(tn,q)\)</span> can be implemented. Consider the projective space <span class="SimpleMath">\(\mathrm{PG}(n-1,q^t)\)</span>. The elements are represented by subspaces of <span class="SimpleMath">\(V(n,q^t)\)</span>. Clearly, a <span class="SimpleMath">\(k\)</span> dimensional subspace of <span class="SimpleMath">\(V(n,q^t)\)</span> is also a <span class="SimpleMath">\(kn\)</span>-dimensional subspace of <span class="SimpleMath">\(V(nt,q)\)</span>. This induces an embedding from <span class="SimpleMath">\(\mathrm{PG}(n-1,q^t)\)</span> into <span class="SimpleMath">\(\mathrm{PG}(nt-1,q)\)</span>. The embedding will be determined by the chosen basis of <span class="SimpleMath">\(\mathrm{GF}(q^t)\)</span> as a vector space over <span class="SimpleMath">\(\mathrm{GF}(q)\)</span></p>

<p><a id="X7F84986879DD952A" name="X7F84986879DD952A"></a></p>

<h5>10.4-4 BlownUpSubspaceOfProjectiveSpace</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BlownUpSubspaceOfProjectiveSpace</code>( <var class="Arg">B</var>, <var class="Arg">subspace</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a subspace of a projective space</p>

<p>Let <var class="Arg">B</var> be a basis for the field <span class="SimpleMath">\(\mathrm{GF}(q^t)\)</span> as <span class="SimpleMath">\(\mathrm{GF}(q)\)</span> vector space, and let <var class="Arg">subspace</var> be a <span class="SimpleMath">\(k-1\)</span>-dimensional subspace of <span class="SimpleMath">\(\mathrm{PG}(n-1,q^t)\)</span> represented by a <span class="SimpleMath">\(k\)</span>-dimensional subspace <span class="SimpleMath">\(S\)</span> of <span class="SimpleMath">\(V(n,q^t)\)</span>. This operation returns the <span class="SimpleMath">\(kt-1\)</span>-dimensional subspace of <span class="SimpleMath">\(\mathrm{PG}(nt-1,q)\)</span> represented by blowing up <span class="SimpleMath">\(S\)</span> with respect to the base <var class="Arg">B</var>. This operation relies on the <strong class="pkg">GAP</strong> operation <code class="file">BlownUpMat</code>. In the example, the effect of choosing a different basis is shown.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := PG(3,5^2);</span>
ProjectiveSpace(3, 25)
<span class="GAPprompt">gap></span> <span class="GAPinput">basis := Basis(AsVectorSpace(GF(5),GF(5^2)));</span>
CanonicalBasis( GF(5^2) )
<span class="GAPprompt">gap></span> <span class="GAPinput">line := Random(Lines(pg));</span>
<a line in ProjectiveSpace(3, 25)>
<span class="GAPprompt">gap></span> <span class="GAPinput">solid1 := BlownUpSubspaceOfProjectiveSpace(basis,line);</span>
<a solid in ProjectiveSpace(7, 5)>
<span class="GAPprompt">gap></span> <span class="GAPinput">BasisVectors(basis);</span>
[ Z(5)^0, Z(5^2) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">basis := Basis(AsVectorSpace(GF(5),GF(5^2)),[Z(5),Z(5^2)^8]);</span>
Basis( GF(5^2), [ Z(5), Z(5^2)^8 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">solid2 := BlownUpSubspaceOfProjectiveSpace(basis,line);</span>
<a solid in ProjectiveSpace(7, 5)>
<span class="GAPprompt">gap></span> <span class="GAPinput">solid1 = solid2;</span>
false

</pre></div>

<p><a id="X7D2D9AD287532FDB" name="X7D2D9AD287532FDB"></a></p>

<h5>10.4-5 NaturalEmbeddingByFieldReduction</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NaturalEmbeddingByFieldReduction</code>( <var class="Arg">geom1</var>, <var class="Arg">f2</var>, <var class="Arg">B</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">‣ NaturalEmbeddingByFieldReduction</code>( <var class="Arg">geom1</var>, <var class="Arg">f2</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">‣ NaturalEmbeddingByFieldReduction</code>( <var class="Arg">geom1</var>, <var class="Arg">geom2</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">‣ NaturalEmbeddingByFieldReduction</code>( <var class="Arg">geom1</var>, <var class="Arg">geom2</var>, <var class="Arg">B</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a geometry morphism</p>

<p>This operation comes in four flavours. For the first flavour, the argument <var class="Arg">geom1</var> is a projective space over a field <span class="SimpleMath">\(\mathrm{GF}(q^t)\)</span>. The argument <var class="Arg">f2</var> is a subfield <span class="SimpleMath">\(\mathrm{GF}(q)\)</span> of <span class="SimpleMath">\(\mathrm{GF}(q^t)\)</span>. The argument <span class="SimpleMath">\(B\)</span> is a basis for <span class="SimpleMath">\(\mathrm{GF}(q^t)\)</span> as a <span class="SimpleMath">\(\mathrm{GF}(q)\)</span>-vector space. When this argument is not given, a basis for <span class="SimpleMath">\(\mathrm{GF}(q^t)\)</span> over <span class="SimpleMath">\(\mathrm{GF}(q)\)</span> is computed using <code class="file">Basis(Asvector space(GF(q),GF(q^t)))</code>. It is checked whether <var class="Arg">f2</var> is a subfield of the base field of <var class="Arg">geom1</var>. The third and fourth flavour are comparable, where now <span class="SimpleMath">\(\mathrm{GF}(q)\)</span> is found as the base field of <var class="Arg">geom2</var>. In fact the arguments <var class="Arg">geom1</var> and <var class="Arg">geom2</var> are the projective spaces <span class="SimpleMath">\(\mathrm{PG}(n-1,q^t)\)</span> and <span class="SimpleMath">\(\mathrm{PG}(nt-1,q)\)</span> respectively. As in the previous flavours, the argument <var class="Arg">B</var> is optional.</p>

<p>An intertwiner is always available for this geometry morphism, and has source the homography group of <var class="Arg">geom1</var> and as range a subgroup of the homography group of <var class="Arg">geom2</var> (or the projective space of the appropriate dimension over <var class="Arg">f2</var>. Notice in the example below the difference of a factor 2 in the orders of the group, which comes of course from restricting the homomorphism to the homography group, which differs a factor 2 from the collineation group of the projective line, that has an extra automorphism of order two, corresponding with the Frobenius automorphism.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg1 := ProjectiveSpace(2,81);</span>
ProjectiveSpace(2, 81)
<span class="GAPprompt">gap></span> <span class="GAPinput">f2 := GF(9);</span>
GF(3^2)
<span class="GAPprompt">gap></span> <span class="GAPinput">em := NaturalEmbeddingByFieldReduction(pg1,f2);</span>
<geometry morphism from <All elements of ProjectiveSpace(2, 
81)> to <All elements of ProjectiveSpace(5, 9)>>
<span class="GAPprompt">gap></span> <span class="GAPinput">f2 := GF(3);</span>
GF(3)
<span class="GAPprompt">gap></span> <span class="GAPinput">em := NaturalEmbeddingByFieldReduction(pg1,f2);</span>
<geometry morphism from <All elements of ProjectiveSpace(2, 
81)> to <All elements of ProjectiveSpace(11, 3)>>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg2 := ProjectiveSpace(11,3);</span>
ProjectiveSpace(11, 3)
<span class="GAPprompt">gap></span> <span class="GAPinput">em := NaturalEmbeddingByFieldReduction(pg1,pg2);</span>
<geometry morphism from <All elements of ProjectiveSpace(2, 
81)> to <All elements of ProjectiveSpace(11, 3)>>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg1 := PG(1,9);</span>
ProjectiveSpace(1, 9)
<span class="GAPprompt">gap></span> <span class="GAPinput">em := NaturalEmbeddingByFieldReduction(pg1,GF(3));</span>
<geometry morphism from <All elements of ProjectiveSpace(1, 
9)> to <All elements of ProjectiveSpace(3, 3)>>
<span class="GAPprompt">gap></span> <span class="GAPinput">i := Intertwiner(em);</span>
MappingByFunction( The FinInG projectivity group PGL(2,9), <projective colline
ation group of size 720 with 
2 generators>, function( m ) ... end, function( m ) ... end )
<span class="GAPprompt">gap></span> <span class="GAPinput">spread := List(Points(pg1),x->x^em);</span>
[ <a line in ProjectiveSpace(3, 3)>, <a line in ProjectiveSpace(3, 3)>, 
  <a line in ProjectiveSpace(3, 3)>, <a line in ProjectiveSpace(3, 3)>, 
  <a line in ProjectiveSpace(3, 3)>, <a line in ProjectiveSpace(3, 3)>, 
  <a line in ProjectiveSpace(3, 3)>, <a line in ProjectiveSpace(3, 3)>, 
  <a line in ProjectiveSpace(3, 3)>, <a line in ProjectiveSpace(3, 3)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">stab := Stabilizer(CollineationGroup(PG(3,3)),Set(spread),OnSets);</span>
<projective collineation group of size 5760 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">hom := HomographyGroup(pg1);</span>
The FinInG projectivity group PGL(2,9)
<span class="GAPprompt">gap></span> <span class="GAPinput">gens := GeneratorsOfGroup(hom);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">group := Group(List(gens,x->x^i));</span>
<projective collineation group with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Order(group);</span>
2880
<span class="GAPprompt">gap></span> <span class="GAPinput">IsSubgroup(stab,group);</span>
true
 
</pre></div>

<p><a id="X7C00DD48787B1EEE" name="X7C00DD48787B1EEE"></a></p>

<h4>10.5 <span class="Heading">Embeddings of polar spaces</span></h4>

<p><a id="X857976B679B8EC30" name="X857976B679B8EC30"></a></p>

<h5>10.5-1 NaturalEmbeddingBySubspace</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ NaturalEmbeddingBySubspace</code>( <var class="Arg">geom1</var>, <var class="Arg">geom2</var>, <var class="Arg">v</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a geometry morphism</p>

<p>The arguments <var class="Arg">geom1</var> and <var class="Arg">geom2</var> both polar spaces, and <var class="Arg">v</var> is an element of a projective space. This function returns a geometry morphism representing the natural embedding of <var class="Arg">geom1</var> into the intersection of <var class="Arg">geom2</var> and <var class="Arg">v</var>. Hence the intersection of <var class="Arg">geom2</var> and <var class="Arg">v</var> must induce a polar space of the same type as <var class="Arg">geom1</var> in <var class="Arg">v</var>. This operation performs all necessary checks. An Intertwiner is not implemented for this geometry morphism.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">h1 := HermitianPolarSpace(2, 3^2);</span>
H(2, 3^2)
<span class="GAPprompt">gap></span> <span class="GAPinput">h2 := HermitianPolarSpace(3, 3^2);</span>
H(3, 3^2)
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := AmbientSpace( h2 );    </span>
ProjectiveSpace(3, 9)
<span class="GAPprompt">gap></span> <span class="GAPinput">pi := VectorSpaceToElement( pg, [[1,0,0,0],[0,1,0,0],[0,0,1,0]] * Z(9)^0 );</span>
<a plane in ProjectiveSpace(3, 9)>
<span class="GAPprompt">gap></span> <span class="GAPinput">em := NaturalEmbeddingBySubspace( h1, h2, pi );</span>
<geometry morphism from <Elements of H(2, 3^2)> to <Elements of H(3, 3^2)>>
<span class="GAPprompt">gap></span> <span class="GAPinput">ps1 := ParabolicQuadric(4,4);</span>
Q(4, 4)
<span class="GAPprompt">gap></span> <span class="GAPinput">ps2 := ParabolicQuadric(6,4);</span>
Q(6, 4)
<span class="GAPprompt">gap></span> <span class="GAPinput">pg := AmbientSpace( ps2 );    </span>
ProjectiveSpace(6, 4)
<span class="GAPprompt">gap></span> <span class="GAPinput">pi := VectorSpaceToElement( pg, [[1,0,0,0,0,0,0],[0,1,0,0,0,0,0],[0,0,1,0,0,0,0],</span>
<span class="GAPprompt">></span> <span class="GAPinput">[0,0,0,1,0,0,0],[0,0,0,0,1,0,0]] * Z(4)^0 );</span>
<a proj. 4-space in ProjectiveSpace(6, 4)>
<span class="GAPprompt">gap></span> <span class="GAPinput">em := NaturalEmbeddingBySubspace( ps1, ps2, pi );</span>
<geometry morphism from <Elements of Q(4, 4)> to <Elements of Q(6, 4)>>
<span class="GAPprompt">gap></span> <span class="GAPinput">List(Lines(ps1),x->x^em);</span>
[ <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
  <a line in Q(6, 4)>, <a line in Q(6, 4)>, <a line in Q(6, 4)>, 
--> --------------------

--> maximum size reached

--> --------------------

96%


¤ 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.0.32Bemerkung:  (vorverarbeitet)  ¤

*Bot Zugriff






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge