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


Quelle  chap13.html

  Sprache: HTML
 

 products/Sources/formale Sprachen/GAP/pkg/fining/doc/chap13.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>
<title>GAP (FinInG) - Chapter 13: Coset Geometries and Diagrams</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="chap13"  onload="jscontent()">


<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chap8.html">8</a>  <a href="chap9.html">9</a>  <a href="chap10.html">10</a>  <a href="chap11.html">11</a>  <a href="chap12.html">12</a>  <a href="chap13.html">13</a>  <a href="chap14.html">14</a>  <a href="chapA.html">A</a>  <a href="chapB.html">B</a>  <a href="chapC.html">C</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>

<div class="chlinkprevnexttop"> <a href="chap0.html">[Top of Book]</a>   <a href="chap0.html#contents">[Contents]</a>    <a href="chap12.html">[Previous Chapter]</a>    <a href="chap14.html">[Next Chapter]</a>   </div>

<p id="mathjaxlink" class="pcenter"><a href="chap13_mj.html">[MathJax on]</a></p>
<p><a id="X8328AFAC7CF1EB1B" name="X8328AFAC7CF1EB1B"></a></p>
<div class="ChapSects"><a href="chap13.html#X8328AFAC7CF1EB1B">13 <span class="Heading">Coset Geometries and Diagrams</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap13.html#X781B20AC8097AC9F">13.1 <span class="Heading">Coset Geometries</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X877735BF810DEAD5">13.1-1 IsCosetGeometry</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X86C97C4780C27E6F">13.1-2 CosetGeometry</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X7A9ED8327C40B445">13.1-3 IsIncident</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X86CC6815824E71E4">13.1-4 ParabolicSubgroups</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X824D5D558425B4B5">13.1-5 AmbientGroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X7E5B687E86068196">13.1-6 Borelsubgroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X82FB0B387E53B073">13.1-7 RandomElement</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X87E9C0D3799F95BA">13.1-8 RandomFlag</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X82DA90817A70103A">13.1-9 RandomChamber</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X7FEFCB907CAAA9B1">13.1-10 IsFlagTransitiveGeometry</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X7C0E5EDD806CE4C1">13.1-11 OnCosetGeometryElement</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X7D21FB1A7D21FB1A"><code>13.1-12 \^</code></a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X7D21FB1A7D21FB1A"><code>13.1-13 \^</code></a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X7F74FD648751B7E6">13.1-14 IsFirmGeometry</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X7F8A17357F9FFA00">13.1-15 IsThickGeometry</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X830213C3843A1BA2">13.1-16 IsThinGeometry</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X877F178084D9A589">13.1-17 IsConnected</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X83A5107981824C2F">13.1-18 IsResiduallyConnected</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X80E7BC8F8612176D">13.1-19 StandardFlagOfCosetGeometry</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X875E89FF7ECD44A6">13.1-20 FlagToStandardFlag</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X7F3A2B47833EA22F">13.1-21 CanonicalResidueOfFlag</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X78BE3D727B060301">13.1-22 ResidueOfFlag</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X815BE6D57D623452">13.1-23 IncidenceGraph</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X8233EE5D7BC9FD15">13.1-24 Rk2GeoGonality</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X8573A0DE841CE7B3">13.1-25 Rk2GeoDiameter</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X8327F4A481DD6DEB">13.1-26 GeometryOfRank2Residue</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X7B63DAB082839BD3">13.1-27 Rank2Parameters</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap13.html#X7967CA67876214A6">13.2 <span class="Heading">Automorphisms, Correlations and Isomorphisms</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X833D384D7B061881">13.2-1 AutGroupIncidenceStructureWithNauty</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X85260FB17EACF6F5">13.2-2 CorGroupIncidenceStructureWithNauty</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X82CB6DDB8068AC42">13.2-3 IsIsomorphicIncidenceStructureWithNauty</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap13.html#X78932FB48237B18F">13.3 <span class="Heading">Diagrams</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X8239310E79D3DE12">13.3-1 DiagramOfGeometry</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X7A2783337F87104F">13.3-2 GeometryOfDiagram</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X808A503579A155BF">13.3-3 DrawDiagram</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap13.html#X79F882017FEFE4DE">13.3-4 DrawDiagramWithNeato</a></span>
</div></div>
</div>

<h3>13 <span class="Heading">Coset Geometries and Diagrams</span></h3>

<p>This part of <strong class="pkg">FinInG</strong> depends on <strong class="pkg">GRAPE</strong>.</p>

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

<h4>13.1 <span class="Heading">Coset Geometries</span></h4>

<p>Suppose we have an <em>incidence geometry</em> Γ (as defined in chapter <a href="chap3.html#X838ACF8A7F100A2B"><span class="RefLink">3</span></a>), together with a group <span class="SimpleMath">G</span> of automorphisms of Γ such that <span class="SimpleMath">G</span> is transitive on the set of <em>chambers</em> of Γ (also defined in chapter <a href="chap3.html#X838ACF8A7F100A2B"><span class="RefLink">3</span></a>). This implies that <span class="SimpleMath">G</span> is also transitive on the set of all elements of any chosen type <span class="SimpleMath">i</span>. If we consider a chamber c<sub>1</sub>,c<sub>2</sub>,...,c<sub>n</sub> such that c<sub>i</sub> is of type <span class="SimpleMath">i</span>, we can look at the stabilizer G<sub>i</sub> of c<sub>i</sub> in <span class="SimpleMath">G</span>. The subgroups G<sub>i</sub> are called <em>parabolic subgroups</em> of Γ. For a type <span class="SimpleMath">i</span>, transitivity of <span class="SimpleMath">G</span> on the elements of type <span class="SimpleMath">i</span> gives a correspondence between the cosets of the stabilizer G<sub>i</sub> and the elements of type <span class="SimpleMath">i</span> in Γ. Two elements of Γ are incident if and only if the corresponding cosets have a nonempty intersection.</p>

<p>We now use the above observation to define an incidence structure from a group <span class="SimpleMath">G</span> together with a set of subgroups G<sub>1</sub>,G<sub>2</sub>,...,G<sub>n</sub>. The type set is {1,2,...,n}. By definition the elements of type <span class="SimpleMath">i</span> are the (right) cosets of the subgroup G<sub>i</sub>. Two cosets are incident if and only if their intersection is not empty. This is an incidence structure which is not necessarily a geometry (see Chapter <a href="chap3.html#X838ACF8A7F100A2B"><span class="RefLink">3</span></a> for definitions). In order to check whether a coset incidence structure is indeed a geometry you can use the command <code class="file">IsFlagTransitiveGeometry</code> which (in case it returns <code class="file">true</code>) guarantees that the argument is a geometry.</p>

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

<h5>13.1-1 IsCosetGeometry</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsCosetGeometry</code></td><td class="tdright">( category )</td></tr></table></div>
<p>This category is a subcategory of <code class="code">IsIncidenceGeometry</code>, and contains all coset geometries.</p>

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

<h5>13.1-2 CosetGeometry</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CosetGeometry</code>( <var class="Arg">G</var>, <var class="Arg">l</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: the coset incidence structure defined by the list <var class="Arg">l</var> of subgroups of the group <var class="Arg">G</var>.</p>

<p><var class="Arg">G</var> must be a group and <var class="Arg">l</var> is a list of subgroups of <var class="Arg">G</var>. The subgroups in <var class="Arg">l</var> will be the <em>parabolic subgroups</em> of the <em>coset incidence structure</em> whose rank equals the length of <var class="Arg">l</var>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:=SymmetricGroup(5);</span>
Sym( [ 1 .. 5 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">g1:=Stabilizer(g,[1,2],OnSets);</span>
Group([ (4,5), (3,5), (1,2)(4,5) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">g2:=Stabilizer(g,[1,2,3],OnSets);</span>
Group([ (4,5), (2,3), (1,2,3) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">cg:=CosetGeometry(g,[g1,g2]);</span>
CosetGeometry( SymmetricGroup( [ 1 .. 5 ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">p:=Random(ElementsOfIncidenceStructure(cg,1));</span>
<element of type 1 of CosetGeometry( SymmetricGroup( [ 1 .. 5 ] ) )>
<span class="GAPprompt">gap></span> <span class="GAPinput">q:=Random(ElementsOfIncidenceStructure(cg,2));</span>
<element of type 2 of CosetGeometry( SymmetricGroup( [ 1 .. 5 ] ) )>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIncident(p,q);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIncident(p,p);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">ParabolicSubgroups(cg);</span>
[ Group([ (4,5), (3,5), (1,2)(4,5) ]), Group([ (4,5), (2,3), (1,2,3) ]) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Rank(cg) = Size(last);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">BorelSubgroup(cg);</span>
Group([ (1,2), (4,5) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">AmbientGroup(cg);</span>
Sym( [ 1 .. 5 ] )
 
</pre></div>

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

<h5>13.1-3 IsIncident</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsIncident</code>( <var class="Arg">ele1</var>, <var class="Arg">ele2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: true if and only if <var class="Arg">ele1</var> and <var class="Arg">ele2</var> are incident</p>

<p><var class="Arg">ele1</var> and <var class="Arg">ele2</var> must be two elements in the same coset geometry.</p>

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

<h5>13.1-4 ParabolicSubgroups</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ParabolicSubgroups</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: the list of parabolic subgroups defining the coset geometry <var class="Arg">cg</var></p>

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

<h5>13.1-5 AmbientGroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AmbientGroup</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: the group used to define the coset geometry <var class="Arg">cg</var></p>

<p><var class="Arg">cg</var> must be a coset geometry.</p>

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

<h5>13.1-6 Borelsubgroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Borelsubgroup</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: the Borel subgroup of de geometry <var class="Arg">cg</var></p>

<p>The Borel subgroup is equal to the stabilizer of a chamber. It corresponds to the intersection of all parabolic subgroups.</p>

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

<h5>13.1-7 RandomElement</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RandomElement</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a random element of <var class="Arg">cg</var></p>

<p><var class="Arg">cg</var> must be a coset geometry.</p>

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

<h5>13.1-8 RandomFlag</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RandomFlag</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a random flag of <var class="Arg">cg</var></p>

<p><var class="Arg">cg</var> must be a coset geometry.</p>

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

<h5>13.1-9 RandomChamber</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RandomChamber</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a random chamber of <var class="Arg">cg</var></p>

<p><var class="Arg">cg</var> must be a coset geometry.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:=SymmetricGroup(5);</span>
Sym( [ 1 .. 5 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">g1:=Stabilizer(g,[1,2],OnSets);</span>
Group([ (4,5), (3,5), (1,2)(4,5) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">g2:=Stabilizer(g,[[1,2],[3,4]],OnSetsSets);</span>
Group([ (1,2), (3,4), (1,3)(2,4) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">cg:=CosetGeometry(g,[g1,g2]);</span>
CosetGeometry( SymmetricGroup( [ 1 .. 5 ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">RandomElement(cg);</span>
<element of type 1 of CosetGeometry( SymmetricGroup( [ 1 .. 5 ] ) )>
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(last);</span>
RightCoset(Group( [ (4,5), (3,5), (1,2)(4,5) ] ),(1,4,2,5,3))
<span class="GAPprompt">gap></span> <span class="GAPinput">RandomFlag(cg);</span>
<Flag of coset geometry < CosetGeometry( SymmetricGroup( [ 1 .. 5 ] ) , 
[ Group( [ (4,5), (3,5), (1,2)(4,5) ] ), 
  Group( [ (1,2), (3,4), (1,3)(2,4) ] ) ] ) >>
<span class="GAPprompt">gap></span> <span class="GAPinput">flg:=RandomFlag(cg);</span>
<Flag of coset geometry < CosetGeometry( SymmetricGroup( [ 1 .. 5 ] ) , 
[ Group( [ (4,5), (3,5), (1,2)(4,5) ] ), 
  Group( [ (1,2), (3,4), (1,3)(2,4) ] ) ] ) >>
<span class="GAPprompt">gap></span> <span class="GAPinput">Type(flg);</span>
[ 1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">flg2:=RandomFlag(cg);</span>
<Flag of coset geometry < CosetGeometry( SymmetricGroup( [ 1 .. 5 ] ) , 
[ Group( [ (4,5), (3,5), (1,2)(4,5) ] ), 
  Group( [ (1,2), (3,4), (1,3)(2,4) ] ) ] ) >>
<span class="GAPprompt">gap></span> <span class="GAPinput">Type(flg2);</span>
[ 2 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">IsChamberOfIncidenceStructure(flg2);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsChamberOfIncidenceStructure(flg);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">Display(flg2);</span>
Flag of coset geometry CosetGeometry( SymmetricGroup( [ 1 .. 5 ] ) , 
[ Group( [ (4,5), (3,5), (1,2)(4,5) ] ), 
  Group( [ (1,2), (3,4), (1,3)(2,4) ] ) ] ) with elements 
[ RightCoset(Group( [ (1,2), (3,4), (1,3)(2,4) ] ),(2,3,5)) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">cham:=RandomChamber(cg);</span>
<Flag of coset geometry < CosetGeometry( SymmetricGroup( [ 1 .. 5 ] ) , 
[ Group( [ (4,5), (3,5), (1,2)(4,5) ] ), 
  Group( [ (1,2), (3,4), (1,3)(2,4) ] ) ] ) >>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsChamberOfIncidenceStructure(cham);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">ElementsOfFlag(cham);</span>
[ <element of type 1 of CosetGeometry( SymmetricGroup( [ 1 .. 5 ] ) )>, 
  <element of type 2 of CosetGeometry( SymmetricGroup( [ 1 .. 5 ] ) )> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIncident(last[1],last[2]);</span>
true
 
</pre></div>

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

<h5>13.1-10 IsFlagTransitiveGeometry</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFlagTransitiveGeometry</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: true if and only if the group <var class="Arg">G</var> defining <var class="Arg">cg</var> acts flag-transitively.</p>

<p><var class="Arg">cg</var> must be a coset geometry.</p>

<p>The group <span class="SimpleMath">G</span> used to define <var class="Arg">cg</var> acts naturally on the elements of <var class="Arg">cg</var> by right translation: a coset <span class="SimpleMath">G_ig</span> is mapped to <span class="SimpleMath">G_i(gx)</span> by an element <span class="SimpleMath">x∈ G</span>. This test can be quite time consuming. You can bind the attribute <code class="code">IsFlagTransitiveGeometry</code> if you are sure the coset geometry is indeed flag-transitive.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:=SymmetricGroup(4);</span>
Sym( [ 1 .. 4 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">g1:=Subgroup(g,[(1,2,3)]);</span>
Group([ (1,2,3) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">g2:=Subgroup(g,[(1,4)]);</span>
Group([ (1,4) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">g3:=Subgroup(g,[(1,2,3,4)]);</span>
Group([ (1,2,3,4) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">cg:=CosetGeometry(g,[g1,g2,g3]);</span>
CosetGeometry( SymmetricGroup( [ 1 .. 4 ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFlagTransitiveGeometry(cg);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">cg2:=CosetGeometry(g,[g1,g2]);</span>
CosetGeometry( SymmetricGroup( [ 1 .. 4 ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFlagTransitiveGeometry(cg2);</span>
true
 
</pre></div>

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

<h5>13.1-11 OnCosetGeometryElement</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ OnCosetGeometryElement</code>( <var class="Arg">ele</var>, <var class="Arg">g</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: the image of the <code class="file">CosetGeometryElement</code> <var class="Arg">ele</var> under the action of <var class="Arg">g</var></p>

<p>The group element <var class="Arg">g</var> must belong to <code class="file">AmbientGroup(AmbientGeometry(ele))</code>.</p>

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

<h5><code>13.1-12 \^</code></h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \^</code>( <var class="Arg">ele</var>, <var class="Arg">g</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: an element of a coset geometry</p>

<p>This is an operation which returns the image of <var class="Arg">ele</var>, an element of a coset incidence structure, under <var class="Arg">g</var>, an element of <code class="file">AmbientGroup(AmbientGeometry(ele))</code>.</p>

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

<h5><code>13.1-13 \^</code></h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \^</code>( <var class="Arg">flg</var>, <var class="Arg">g</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a flag of a coset geometry</p>

<p>This is an operation which returns the image of <var class="Arg">flg</var>, a flag of a coset incidence structure, under <var class="Arg">g</var>, an element of <code class="file">AmbientGroup(AmbientGeometry(flg))</code>.</p>

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

<h5>13.1-14 IsFirmGeometry</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFirmGeometry</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: true if and only if <var class="Arg">cg</var> is firm.</p>

<p>An incidence geometry is said to be <em>firm</em> if every non-maximal flag is contained in at least two chambers. <var class="Arg">cg</var> must be a coset geometry.</p>

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

<h5>13.1-15 IsThickGeometry</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsThickGeometry</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: true if and only if <var class="Arg">cg</var> is thick.</p>

<p>An incidence geometry is said to be <em>thick</em> if every non-maximal flag is contained in at least three chambers. <var class="Arg">cg</var> must be a coset geometry.</p>

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

<h5>13.1-16 IsThinGeometry</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsThinGeometry</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: true if and only if <var class="Arg">cg</var> is thin.</p>

<p>An incidence geometry is said to be <em>thin</em> if every rank one residue contains exactly 2 elements. This means that every comaximal flag is contained in exactly 2 chambers. <var class="Arg">cg</var> must be a coset geometry.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:=SymmetricGroup(8);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pabs:=[];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pabs[1]:=Stabilizer(g,1);; pabs[2]:=Stabilizer(g,2);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pabs[3]:=Stabilizer(g,3);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pabs[4]:=Stabilizer(g,[1,2,3,4],OnSets);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pabs[5]:=Stabilizer(g,[1,2,3,4,5],OnSets);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pabs[6]:=Stabilizer(g,6);; pabs[7]:=Stabilizer(g,7);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cg:=CosetGeometry(g,pabs);</span>
CosetGeometry( SymmetricGroup( [ 1 .. 8 ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFirmGeometry(cg);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsThinGeometry(cg);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsThickGeometry(cg);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">truncation:=CosetGeometry(g,pabs{[1..5]});</span>
CosetGeometry( SymmetricGroup( [ 1 .. 8 ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFirmGeometry(truncation);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsThinGeometry(truncation);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsThickGeometry(truncation);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">truncation2:=CosetGeometry(g,pabs{[4,5]});</span>
CosetGeometry( SymmetricGroup( [ 1 .. 8 ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFirmGeometry(truncation2);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsThinGeometry(truncation2);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsThickGeometry(truncation2);</span>
true
 
</pre></div>

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

<h5>13.1-17 IsConnected</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsConnected</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: true if and only if <var class="Arg">cg</var> is connected.</p>

<p>A geometry is <em>connected</em> if and only if its incidence graph is connected. <var class="Arg">cg</var> must be a coset geometry.</p>

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

<h5>13.1-18 IsResiduallyConnected</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsResiduallyConnected</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: true if and only if <var class="Arg">cg</var> is residually connected.</p>

<p>A geometry is <em>residually connected</em> if the incidence graphs of all its residues of rank at least 2 are connected. <var class="Arg">cg</var> must be a coset geometry.</p>

<p>This test is quite time consuming. You can bind the attribute <code class="code">IsResiduallyConnected</code> if you are sure the coset geometry is indeed residually connected.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">ps:=HyperbolicQuadric(7,2);</span>
Q+(7, 2)
<span class="GAPprompt">gap></span> <span class="GAPinput">g:=IsometryGroup(ps);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">reps:=RepresentativesOfElements(ps);</span>
[ <a point in Q+(7, 2)>, <a line in Q+(7, 2)>, <a plane in Q+(7, 2)>, 
  <a solid in Q+(7, 2)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">solids:=Orbit(g,reps[4]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">ps:=HyperbolicQuadric(7,2);</span>
Q+(7, 2)
<span class="GAPprompt">gap></span> <span class="GAPinput">g:=IsometryGroup(ps);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">reps:=RepresentativesOfElements(ps);</span>
[ <a point in Q+(7, 2)>, <a line in Q+(7, 2)>, <a plane in Q+(7, 2)>, 
  <a solid in Q+(7, 2)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">h:=DerivedSubgroup(g);; # to get greek and latin solids</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">orbs:=FiningOrbits(h,Solids(ps));;</span>
50%..100%..gap> List(orbs, Size);
[ 135, 135 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Filtered(orbs[2], s -> ProjectiveDimension(Meet(orbs[1][1],s))=2); # to</span>
[ <a solid in Q+(7, 2)>, <a solid in Q+(7, 2)>, <a solid in Q+(7, 2)>, 
  <a solid in Q+(7, 2)>, <a solid in Q+(7, 2)>, <a solid in Q+(7, 2)>, 
  <a solid in Q+(7, 2)>, <a solid in Q+(7, 2)>, <a solid in Q+(7, 2)>, 
  <a solid in Q+(7, 2)>, <a solid in Q+(7, 2)>, <a solid in Q+(7, 2)>, 
  <a solid in Q+(7, 2)>, <a solid in Q+(7, 2)>, <a solid in Q+(7, 2)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">#find a latin incident with the greek which is orbs[1][1]</span>
<span class="GAPprompt">gap></span> <span class="GAPinput"># Now we have a chamber</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">goodreps:=[reps[1],reps[2],orbs[1][1],last[1]];</span>
[ <a point in Q+(7, 2)>, <a line in Q+(7, 2)>, <a solid in Q+(7, 2)>, 
  <a solid in Q+(7, 2)> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">pabs:=List(goodreps, r -> FiningStabiliser(h,r));</span>
[ <projective collineation group of size 1290240 with 2 generators>, 
  <projective collineation group of size 110592 with 4 generators>, 
  <projective collineation group of size 1290240 with 2 generators>, 
  <projective collineation group of size 1290240 with 4 generators> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">cos:=CosetGeometry(h,pabs);</span>
CosetGeometry( Group( 
[ ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,1),8,[
    [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ],
    [ 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), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ],
    [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ],
    [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ],
    [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 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), Z(2)^0 ],
    [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) 
     ],]),IdentityMapping( GF(2) )), ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,
    1),8,[[ 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), 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), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ],
    [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ],
    [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ],
    [ 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), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) 
     ],]),IdentityMapping( GF(2) )), ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,
    1),8,[[ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 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), Z(2)^0, 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), 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), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ],
    [ 0*Z(2), Z(2)^0, 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), Z(2)^0, 0*Z(2) ],
    [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 
     ],]),IdentityMapping( GF(2) )) ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">IsConnected(cos);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsResiduallyConnected(cos);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">time;</span>
419960
 
</pre></div>

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

<h5>13.1-19 StandardFlagOfCosetGeometry</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ StandardFlagOfCosetGeometry</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: standard chamber of <var class="Arg">cg</var></p>

<p>The standard chamber just consists of all parabolic subgroups (i.e. the trivial cosets of these subgroups). The object returned is a FlagOfIncidenceStructure. <var class="Arg">cg</var> must be a coset geometry.</p>

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

<h5>13.1-20 FlagToStandardFlag</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FlagToStandardFlag</code>( <var class="Arg">cg</var>, <var class="Arg">fl</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: element of the defining group of <var class="Arg">cg</var> which maps <var class="Arg">fl</var> to the standard chamber of <var class="Arg">cg</var>.</p>

<p><var class="Arg">fl</var> must be a chamber given as a list of cosets of the parabolic subgroups of <var class="Arg">cg</var>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">L:=SimpleLieAlgebra("D",8,Rationals);</span>
<Lie algebra of dimension 120 over Rationals>
<span class="GAPprompt">gap></span> <span class="GAPinput">rs:=RootSystem(L);</span>
<root system of rank 8>
<span class="GAPprompt">gap></span> <span class="GAPinput">w:=WeylGroup(rs);</span>
<matrix group with 8 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">gens:=GeneratorsOfGroup(w);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">pabs:=List(gens, g -> Group(Difference(gens, [g])));</span>
[ <matrix group with 7 generators>, <matrix group with 7 generators>, 
  <matrix group with 7 generators>, <matrix group with 7 generators>, 
  <matrix group with 7 generators>, <matrix group with 7 generators>, 
  <matrix group with 7 generators>, <matrix group with 7 generators> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">g:=Group(gens);</span>
<matrix group with 8 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">cg:=CosetGeometry(g,pabs);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cham:=RandomChamber(cg);; # Time of last command: 23945 ms</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">FlagToStandardFlag(cg,cham); # Time of last command: 1720 ms</span>
[ [ 0, 0, 0, 0, 1, -1, 0, 0 ], [ 0, 0, 0, 1, 0, -1, 0, 0 ], 
  [ 0, 0, 0, 1, 0, 0, -1, -1 ], [ 1, -1, 0, 1, 0, 0, -1, -1 ], 
  [ 0, -1, 0, 1, 0, 0, -1, -1 ], [ 0, -1, 0, 1, 0, 0, 0, -2 ], 
  [ 0, -1, 1, 0, 0, 0, 0, -1 ], [ 0, -1, 0, 1, 0, 0, 0, -1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">cham^last = StandardFlagOfCosetGeometry(cg); # Time of last command:1005 ms</span>
true
 
</pre></div>

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

<h5>13.1-21 CanonicalResidueOfFlag</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CanonicalResidueOfFlag</code>( <var class="Arg">cg</var>, <var class="Arg">fl</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: coset geometry isomorphic to residue of <var class="Arg">fl</var> in <var class="Arg">cg</var></p>

<p><var class="Arg">cg</var> must be a coset incidence structure and <var class="Arg">fl</var> must be a flag in that incidence structure. The returned coset incidence structure for a flag <span class="SimpleMath">{G_i_1g_i_1,G_i_2g_i_2,... , G_i_kg_i_k}</span> is the coset incidence structure defined by the group <span class="SimpleMath">H:=∩_j=1^kG_i_j</span> and parabolic subgroups <span class="SimpleMath">G_j∩ H</span> for <span class="SimpleMath">j</span> not in the type set <span class="SimpleMath">{i_1,i_2,... ,i_k}</span> of <var class="Arg">fl</var>.</p>

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

<h5>13.1-22 ResidueOfFlag</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ResidueOfFlag</code>( <var class="Arg">fl</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: the residue of <var class="Arg">fl</var> in <code class="file">AmbientGeometry(fl)</code>.</p>

<p>This is a <code class="file">CosetGeometry</code> method for the <code class="file">ResidueOfFlag</code> operation given in Chapter <a href="chap3.html#X838ACF8A7F100A2B"><span class="RefLink">3</span></a>. Note that the related operation <code class="file">CanonicalResidueOfFlag</code> takes <em>two</em> arguments.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">pg:=SymplecticSpace(5,2);</span>
W(5, 2)
<span class="GAPprompt">gap></span> <span class="GAPinput">pi:=Random(Planes(pg));</span>
<a plane in W(5, 2)>
<span class="GAPprompt">gap></span> <span class="GAPinput">l:=Random(Lines(pi));</span>
<a line in W(5, 2)>
<span class="GAPprompt">gap></span> <span class="GAPinput">p:=Random(Points(l));</span>
<a point in W(5, 2)>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:=CollineationGroup(pg);</span>
PGammaSp(6,2)
<span class="GAPprompt">gap></span> <span class="GAPinput">g1:=Stabilizer(g,p);</span>
<projective collineation group of size 23040 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">g2:=Stabilizer(g,l);</span>
<projective collineation group of size 4608 with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">g3:=Stabilizer(g,pi);</span>
<projective collineation group of size 10752 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">cg:=CosetGeometry(g, [g1,g2,g3]);</span>
CosetGeometry( PGammaSp(6,2) )
<span class="GAPprompt">gap></span> <span class="GAPinput">RandomFlag(cg); # Time of last command: 10745 ms</span>
<Flag of coset geometry < CosetGeometry( PGammaSp(6,2) , 

  Group( 
    [ ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,1),6,[
        [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ],
        [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 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), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ],
        [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ],
        [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) 
         ],]),IdentityMapping( GF(2) )), 
      ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,1),6,[
        [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ],
        [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ],
        [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ],
        [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ],
        [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ],
        [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) 
         ],]),IdentityMapping( GF(2) )), 
      ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,1),6,[
        [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ],
        [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ],
        [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ],
        [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ],
        [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ],
        [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) 
         ],]),IdentityMapping( GF(2) )) ] ), 
  Group( 
    [ ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,1),6,[
        [ 0*Z(2), Z(2)^0, 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), Z(2)^0, 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), Z(2)^0 ],
        [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) 
         ],]),IdentityMapping( GF(2) )), 
      ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,1),6,[
        [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ],
        [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ],
        [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ],
        [ Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ],
        [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ],
        [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 
         ],]),IdentityMapping( GF(2) )), 
      ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,1),6,[
        [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ],
        [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ],
        [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ],
        [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ],
        [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ],
        [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 
         ],]),IdentityMapping( GF(2) )), 
      ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,1),6,[
        [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ],
        [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ],
        [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ],
        [ 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2) ],
        [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ],
        [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) 
         ],]),IdentityMapping( GF(2) )) ] ), 
  Group( 
    [ ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,1),6,[
        [ 0*Z(2), Z(2)^0, 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), Z(2)^0, 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), Z(2)^0 ],
        [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) 
         ],]),IdentityMapping( GF(2) )), 
      ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,1),6,[
        [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 ],
        [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ],
        [ 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ],
        [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ],
        [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ],
        [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 
         ],]),IdentityMapping( GF(2) )), 
      ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,1),6,[
        [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ],
        [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ],
        [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ],
        [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ],
        [ Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ],
        [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) 
         ],]),IdentityMapping( GF(2) )) ] ) ] ) >>
<span class="GAPprompt">gap></span> <span class="GAPinput">Type(last);</span>
[  ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ResidueOfFlag(last2);</span>
CosetGeometry( PGammaSp(6,2) )
<span class="GAPprompt">gap></span> <span class="GAPinput">Rank(last);</span>
3
<span class="GAPprompt">gap></span> <span class="GAPinput">NrElementsOfIncidenceStructure(last2,1);</span>
63
<span class="GAPprompt">gap></span> <span class="GAPinput">flg:=RandomFlag(cg);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">can:=CanonicalResidueOfFlag(cg,flg);</span>
CosetGeometry( Group( ... ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">Type(flg);</span>
[ 1, 2 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Rank(can);</span>
1
<span class="GAPprompt">gap></span> <span class="GAPinput">res:=ResidueOfFlag(flg);</span>
CosetGeometry( Group( 
[ ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,1),6,[
    [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ],
    [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ],
    [ 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2) ],
    [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ],
    [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ],
    [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) 
     ],]),IdentityMapping( GF(2) )), ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,
    1),6,[[ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ],
    [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 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), Z(2)^0, 0*Z(2), 0*Z(2) ],
    [ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ],
    [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 
     ],]),IdentityMapping( GF(2) )), ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,
    1),6,[[ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ],
    [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ],
    [ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0 ],
    [ 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ],
    [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ],
    [ 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0 
     ],]),IdentityMapping( GF(2) )), ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,
    1),6,[[ Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2) ],
    [ Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0 ],
    [ 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2) ],
    [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, Z(2)^0, Z(2)^0 ],
    [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ],
    [ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2) 
     ],]),IdentityMapping( GF(2) )), ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,
    1),6,[[ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) ],
    [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0 ],
    [ 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), Z(2)^0, 0*Z(2), 0*Z(2) ],
    [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ],
    [ Z(2)^0, Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0, 0*Z(2) 
     ],]),IdentityMapping( GF(2) )), ProjElWithFrob(NewMatrix(IsCMatRep,GF(2,
    1),6,[[ Z(2)^0, 0*Z(2), Z(2)^0, 0*Z(2), 0*Z(2), Z(2)^0 ],
    [ Z(2)^0, 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2), Z(2)^0 ],
    [ 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0, Z(2)^0, 0*Z(2) ],
    [ Z(2)^0, 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2), Z(2)^0 ],
    [ Z(2)^0, 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), Z(2)^0, 0*Z(2) 
     ],]),IdentityMapping( GF(2) )) ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIsomorphicIncidenceStructureWithNauty(res,can);</span>
#I Using NiceMonomorphism...
#I Using NiceMonomorphism...
true
 
</pre></div>

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

<h5>13.1-23 IncidenceGraph</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IncidenceGraph</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: incidence graph of <var class="Arg">cg</var>.</p>

<p><var class="Arg">cg</var> must be a coset geometry. The graph returned is a <strong class="pkg">GRAPE</strongobject. All <strong class="pkg">GRAPE</strong> functionality can now be used to analyse <var class="Arg">cg</var> via its incidence graph.</p>

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

<h5>13.1-24 Rk2GeoGonality</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Rk2GeoGonality</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: the gonality (i.e. half the girth) of the incidence graph of <var class="Arg">cg</var>.</p>

<p><var class="Arg">cg</var> must be a coset geometry of rank 2.</p>

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

<h5>13.1-25 Rk2GeoDiameter</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Rk2GeoDiameter</code>( <var class="Arg">cg</var>, <var class="Arg">type</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: the point (or line) diameter.</p>

<p><var class="Arg">cg</var> must be a coset geometry of rank 2. <var class="Arg">type</var> must be either <code class="code">1</code> or <code class="code">2</code>. This function computes the point diameter of <var class="Arg">cg</var> when <var class="Arg">type</var> is <code class="code">1</code> and the line diameter when <var class="Arg">type</var> is <code class="code">2</code>.</p>

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

<h5>13.1-26 GeometryOfRank2Residue</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GeometryOfRank2Residue</code>( <var class="Arg">resi</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: the geometry of the <code class="file">Rank2Residue</codeobject <var class="Arg">resi</var>.</p>

<p>The rank 2 residues of a geometry are fundamental when dealing with diagrams. Therefore they are kept in an attribute as (a list of) objects of type <code class="file">Rank2Residue</code>. The present operation just extracts the residue as a coset geometry from such a <code class="file">Rank2Residue</codeobject.</p>

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

<h5>13.1-27 Rank2Parameters</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Rank2Parameters</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: a list of length 3.</p>

<p><var class="Arg">cg</var> must be a coset geometry of rank 2. This function computes the gonality, point and line diameter of <var class="Arg">cg</var>. These appear as a list in the first entry of the returned list. The second entry contains a list of length 2 with the point order and the total number of points (i.e. elements of type 1) in the geometry. The last entry contains the line order and the number of lines (i.e. elements of type 2).</p>

<p>The following example illustrates <code class="file">Rank2Parameters</code>. It uses <strong class="pkg">AtlasRep</strong> to fetch the second Janko group, also known as the Hall-Janko group. Beware that <strong class="pkg">AtlasRep</strong> needs special write permissions on some systems. The constructed geometry has gonality 6 and both diameters equal to 8. It is known as the <em>Cohen-Tits near octagon</em>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">LoadPackage("atlasrep");</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">j2:=AtlasGroup("J2"); #Uses AtlasRep package</span>
<permutation group of size 604800 with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">max3:=AtlasSubgroup(j2,3); #member of 3rd ATLAS class of max. subgps</span>
<permutation group of size 1920 with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">max4:=AtlasSubgroup(j2,4); #member of 4th ATLAS class of max. subgps</span>
<permutation group of size 1152 with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">conj3:=ConjugacyClassSubgroups(j2,max3);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g1:=First(conj3, c -> Size(Intersection(c,max4))=384);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g2:=max4;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cg:=CosetGeometry(j2,[g1,g2]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Rank2Parameters(cg);</span>
[ [ 6, 8, 8 ], [ 2, 315 ], [ 4, 525 ] ]
 
</pre></div>

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

<h4>13.2 <span class="Heading">Automorphisms, Correlations and Isomorphisms</span></h4>

<p>An <em>automorphism</em> of an incidence structure Γ is a permutation of the element set of Γ such that incidence is preserved and types are fixed (i.e. the type of the image of an element coincides with the type of that element). One way to compute the (full) automorphism group of Γ is to compute its incidence graph and then use the available <code class="file">nauty</code> machinery to obtain the group.</p>

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

<h5>13.2-1 AutGroupIncidenceStructureWithNauty</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AutGroupIncidenceStructureWithNauty</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: permutation group isomorphic to the full automorphism group of <var class="Arg">cg</var>.</p>

<p>The group is computed with <code class="file">nauty</code>, which is part of <strong class="pkg">GRAPE</strong> but has to be compiled on your system before use. The group returned is a permutation group acting on the set <code class="file">[1..Sum(TypesOfElementsOfIncidenceStructure(cg), t -> NrElementsOfIncidenceStructure(cg,t))]</code>, which is exactly the vertex set of <code class="file">IncidenceGraph(cg)</code>. At the moment the action of the automorphism group on <code class="file">cg</code> is not provided but it can be recovered from the knowledge that the vertex set of <code class="file">IncidenceGraph(cg)</code> first contains all elements of type 1 in <code class="file">cg</code>, then all elements of type 2, etc. or, better still, with the <strong class="pkg">GRAPE</strongcommand <code class="file">VertexNames</code> (see example below).</p>

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

<h5>13.2-2 CorGroupIncidenceStructureWithNauty</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CorGroupIncidenceStructureWithNauty</code>( <var class="Arg">cg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: permutation group isomorphic to the full automorphism group of <var class="Arg">cg</var>.</p>

<p>The group is computed with <code class="file">nauty</code>, which is part of <strong class="pkg">GRAPE</strong> but has to be compiled on your system before use. The group returned is a permutation group acting on the set <code class="file">[1..Sum(TypesOfElementsOfIncidenceStructure(cg), t -> NrElementsOfIncidenceStructure(cg,t))]</code>, which is exactly the vertex set of <code class="file">IncidenceGraph(cg)</code>. At the moment the action of the automorphism group on <code class="file">cg</code> is not provided but it can be recovered from the knowledge that the vertex set of <code class="file">IncidenceGraph(cg)</code> first contains all elements of type 1 in <code class="file">cg</code>, then all elements of type 2, etc. or with the <strong class="pkg">GRAPE</strongcommand <code class="file">VertexNames</code>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">g := PSL(2,11);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g1 := Group([ (1,2,3)(4,8,12)(5,10,9)(6,11,7), </span>
<span class="GAPprompt">></span> <span class="GAPinput">(1,2)(3,4)(5,12)(6,11)(7,10)(8,9) ]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g2 := Group([ (1,2,7)(3,9,4)(5,11,10)(6,8,12), </span>
<span class="GAPprompt">></span> <span class="GAPinput">(1,2)(3,4)(5,12)(6,11)(7,10)(8,9) ]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g3 := Group([ (1,2,11)(3,8,7)(4,9,5)(6,10,12), </span>
<span class="GAPprompt">></span> <span class="GAPinput">(1,2)(3,12)(4,11)(5,10)(6,9)(7,8) ]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g4 := Group([ (1,2,11)(3,8,7)(4,9,5)(6,10,12), </span>
<span class="GAPprompt">></span> <span class="GAPinput">(1,2)(3,10)(4,9)(5,8)(6,7)(11,12) ]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cg:=CosetGeometry(g,[g1,g2,g3,g4]);</span>
CosetGeometry( Group( [ ( 3,11, 9, 7, 5)( 4,12,10, 8, 6), 
  ( 1, 2, 8)( 3, 7, 9)( 4,10, 5)( 6,12,11) ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">aut:=AutGroupIncidenceStructureWithNauty(cg);</span>
<permutation group with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">StructureDescription(aut);</span>
"PSL(2,11)"
<span class="GAPprompt">gap></span> <span class="GAPinput">cor:=CorGroupIncidenceStructureWithNauty(cg);</span>
<permutation group with 5 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">StructureDescription(cor);</span>
"C2 x PSL(2,11)"
<span class="GAPprompt">gap></span> <span class="GAPinput">incgrph:=IncidenceGraph(cg);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">names:=VertexNames(incgrph);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:=Random(aut);</span>
(1,9,7,6,2,3,5,11,4,8,10)(12,13,15,17,14,19,22,16,18,21,20)(23,28,33,25,29,31,
32,26,27,24,30)(34,44,38,41,42,35,43,39,40,36,37)
<span class="GAPprompt">gap></span> <span class="GAPinput">e:=RandomElement(cg);</span>
<element of type 3 of CosetGeometry( Group( 
[ ( 3,11, 9, 7, 5)( 4,12,10, 8, 6), ( 1, 2, 8)( 3, 7, 9)( 4,10, 5)( 6,12,11) 
 ] ) )>
<span class="GAPprompt">gap></span> <span class="GAPinput">pos:=Position(names, e);</span>
26
<span class="GAPprompt">gap></span> <span class="GAPinput">names[pos^g];</span>
<element of type 3 of CosetGeometry( Group( 
[ ( 3,11, 9, 7, 5)( 4,12,10, 8, 6), ( 1, 2, 8)( 3, 7, 9)( 4,10, 5)( 6,12,11) 
 ] ) )>
 
</pre></div>

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

<h5>13.2-3 IsIsomorphicIncidenceStructureWithNauty</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsIsomorphicIncidenceStructureWithNauty</code>( <var class="Arg">cg1</var>, <var class="Arg">cg2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: true iff cg1 and cg2 are isomorphic.</p>

<p>We use <code class="file">nauty</code>, which is part of <strong class="pkg">GRAPE</strong> but has to be compiled on your system before use. Isomorphism is tested (with <code class="file">nauty</code>) after converting the coset geometries <var class="Arg">cg1</var> and <var class="Arg">cg2</var> to coloured graphs.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">g:=SymmetricGroup(4); g1:=Subgroup(g,[(1,2,3)]);</span>
Sym( [ 1 .. 4 ] )
Group([ (1,2,3) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">g2:=Subgroup(g,[(1,4)]); g3:=Subgroup(g,[(1,2,3,4)]);</span>
Group([ (1,4) ])
Group([ (1,2,3,4) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">cg:=CosetGeometry(g,[g1,g2,g3]);</span>
CosetGeometry( SymmetricGroup( [ 1 .. 4 ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFlagTransitiveGeometry(cg);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">aut:=AutGroupIncidenceStructureWithNauty(cg);</span>
<permutation group with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(aut);</span>
48
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(g);</span>
24
<span class="GAPprompt">gap></span> <span class="GAPinput">newg1:=Stabilizer(aut, 1);</span>
Group([ (5,7)(6,8)(10,15)(11,12)(13,16)(14,18)(17,19)(21,25)(23,26), (3,6)
(4,5)(9,18)(10,16)(12,20)(13,17)(15,19)(21,22)(24,26) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">newg2:=Stabilizer(aut, NrElementsOfIncidenceStructure(cg,1) + 1);</span>
Group([ (5,7)(6,8)(10,15)(11,12)(13,16)(14,18)(17,19)(21,25)(23,26), (1,3)
(2,4)(5,6)(7,8)(10,11)(12,15)(13,16)(14,17)(18,19)(21,25)(22,24)(23,26) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">newg3:=Stabilizer(aut, NrElementsOfIncidenceStructure(cg,1) +</span>
<span class="GAPprompt">></span> <span class="GAPinput">   NrElementsOfIncidenceStructure(cg,2) + 1);</span>
Group([ (1,3)(2,4)(5,8)(6,7)(10,12)(11,15)(14,19)(17,18)(22,24), (3,8)(4,7)
(9,14)(10,17)(11,20)(13,15)(16,19)(22,25)(23,24) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">newcg:=CosetGeometry(aut, [newg1, newg2, newg3]);</span>
CosetGeometry( Group( 
[ ( 5, 7)( 6, 8)(10,15)(11,12)(13,16)(14,18)(17,19)(21,25)(23,26), 
  ( 3, 6)( 4, 5)( 9,18)(10,16)(12,20)(13,17)(15,19)(21,22)(24,26), 
  ( 1, 2)( 3, 4)( 5, 6)( 7, 8)( 9,20)(10,17)(11,14)(12,18)(13,16)(15,19)
    (21,26)(22,24)(23,25), ( 1, 3)( 2, 4)( 5, 6)( 7, 8)(10,11)(12,15)(13,16)
    (14,17)(18,19)(21,25)(22,24)(23,26) ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFlagTransitiveGeometry(newcg);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIsomorphicIncidenceStructureWithNauty(cg, newcg);</span>
true
 
</pre></div>

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

<h4>13.3 <span class="Heading">Diagrams</span></h4>

<p>The <em>diagram</em> of a flag-transitive incidence geometry is a schematic description of the structure of the geometry. It is based on the collection of rank 2 residues of the geometry.</p>

<p>Technically, the diagram is added to a <code class="file">CosetGeometry</codeobject as a mutable attribute. Also the list of rank 2 residues of the geometry is added as an attribute once these have been computed. This is done with the operations <code class="file">Rank2Residues</code> (to add the attribute) and <code class="file">MakeRank2Residue</code> (to actually compute the residues). These operations are not for everyday use and hence remain undocumented.</p>

<p>Since the geometry is flag-transitive, all chambers are equivalent. Let's fix a chamber C = { c<sub>1</sub>,c<sub>2</sub>,...,c<sub>n</sub>}, with c<sub>i</sub> of type <span class="SimpleMath">i</span>. For each subset {i,j} of size two in {1,2,...n} we take the residue of the flag C \ { c<sub>i</sub>, c<sub>j</sub>}. Flag transitivity ensures that <em>all</em> residues of type <span class="SimpleMath">{i,j}</span> are isomorphic to each other. For each such residue, the structure is described by some parameters: the gonality and the point and line diameters. For each type <span class="SimpleMath">i</span>, we also define the <span class="SimpleMath">i</span>-order to be one less than the number of elements of type <span class="SimpleMath">i</span> in the residue of a(ny) flag of type <span class="SimpleMath">I∖{i}</span>. All this information is depicted in a <em>diagram</em> which is basically a labelled graph with vertex set <span class="SimpleMath">I</span> and edges whenever the point diameter, the line diameter and the gonality are all greater than <span class="SimpleMath">2</span>.</p>

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

<h5>13.3-1 DiagramOfGeometry</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DiagramOfGeometry</code>( <var class="Arg">Gamma</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: the diagram of the geometry <var class="Arg">Gamma</var></p>

<p><var class="Arg">Gamma</var> must be a flag-transitive coset geometry.</p>

<p>The flag-transitivity is not tested by this operation because such a test can be time consuming. The command <code class="code">IsFlagTransitiveGeometry</code> can be used to check flag-transitivity if needed.</p>

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

<h5>13.3-2 GeometryOfDiagram</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GeometryOfDiagram</code>( <var class="Arg">diag</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: the geometry of which <var class="Arg">diag</var> is the diagram</p>

<p><var class="Arg">diag</var> must be a diagram object.</p>

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

<h5>13.3-3 DrawDiagram</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DrawDiagram</code>( <var class="Arg">diag</var>, <var class="Arg">filename</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">‣ DrawDiagram</code>( <var class="Arg">diag</var>, <var class="Arg">filename</var>, <var class="Arg">vertexverbosity</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">‣ DrawDiagram</code>( <var class="Arg">diag</var>, <var class="Arg">filename</var>, <var class="Arg">vertexverbosity</var>, <var class="Arg">edgeverbosity</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: does not return anything but writes a file <var class="Arg">filename</var>.ps</p>

<p><var class="Arg">diag</var> must be a diagram. Writes a file <var class="Arg">filename</var>.ps in the current directory with a pictorial version of the diagram. This command uses the <strong class="pkg">graphviz</strong> package which is available from http://www.graphviz.org.</p>

<p>In case <strong class="pkg">graphviz</strong> is not available on your system, you will get an friendly error message and a file <var class="Arg">filename</var>.dot will be written. You can then compile this file later or ask a friend to help you. By default the diagram provides for each type <span class="SimpleMath">i</span> the <span class="SimpleMath">i</span>-order and the number of elements of type <span class="SimpleMath">i</span>. This behaviour can be changed by providing a <var class="Arg">vertexverbosity</var> level. A value <var class="Arg">2</var> results in no label under the vertices and a value <var class="Arg">1</var> gives only the <span class="SimpleMath">i</span>-order. Any other positive integer value yields the default behaviour. The default labels for the edges of the diagram use the standard convention that a <span class="SimpleMath">[g,dp,dl]</span>-gon with all three parameters equal is labelled only with the number <span class="SimpleMath">g</span>. Putting <var class="Arg">edgeverbosity</var> equal to <span class="SimpleMath">2</span> puts no labels at all. This yields the so called ``basic diagram'' of the geometry. With <var class="Arg">edgeverbosity</var> equal to any integer greater than <span class="SimpleMath">2</span> all labels contain girth and both diameters.</p>

<p>We illustrate the diagram feature with Neumaier's A<sub>8</sub>-geometry. The affine space of dimension 3 over the field with two elements is denoted by <span class="SimpleMath">AG(3,2)</span>. If we fix a plane Π in <span class="SimpleMath">PG(3,2)</span>, the structure induced on the 8 points not in Π by the lines and planes of <span class="SimpleMath">PG(3,2)</span> is isomorphic to <span class="SimpleMath">AG(3,2)</span>. Since every two points of <span class="SimpleMath">AG(3,2)</span> define a line, the collinearity graph of <span class="SimpleMath">AG(3,2)</span> (that is the graph whose vertices are the points of <span class="SimpleMath">AG(3,2)</span> and in which two vertices are adjacent whenever they are collinear) is the complete graph K<sub>8</sub> on 8 vertices. Given two copies of the complete graph on 8 vertices, one can label the vertices of each of them with the numbers from 1 to 8. These labelings are always equivalent when the two copies are seen as graphs, but not if they are understood as models of the affine space. The reason is that an affine space has parallel lines and to be affinely equivalent, the labelings must be such that edges which were parallel in the first labeling remain parallel in the second labeling. In fact there are 15 affinely nonequivalent ways to label the vertices of K<sub>8</sub>. The affine space has 14 planes of 4 points and there are 70 subsets of 4 elements in the vertex set of K<sub>8</sub>. Each time we label K<sub>8</sub>, there are 14 of the 70 sets of 4 elements which become planes of <span class="SimpleMath">AG(3,2)</span>. The remaining 4-subsets will be called <em>nonplanes</em> for that labeling. A well-known rank 4 geometry discovered by Neumaier in 1984 can be described using these concepts. This geometry is quite important since its residue of cotype <span class="SimpleMath">1</span> is the famous A<sub>7</sub>-geometry which is known to be the only flag-transitive locally classical <span class="SimpleMath">C_3</span>-geometry which is not a polar space (see Aschbacher1984 for details). The Neumaier geometry can be constructed as follows. The elements of types 1 and 2 are the vertices and edges of the complete graph K<sub>8</sub>, the elements of type 3 are the 4-subsets of the vertex set of K<sub>8</sub> and the elements of type 4 are the 15 nonequivalent labelings of K<sub>8</sub>. Incidences are mostly the natural ones. A 4-subset is incident with a labeling of K<sub>8</sub> if it is the set of points of a nonplane in the model of <span class="SimpleMath">AG(3,2)</span> defined by the labeling.</p>


<div class="example"><pre>
Alt( [ 1 .. 8 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">pabs:= [</span>
<span class="GAPprompt">></span> <span class="GAPinput">  Group([ (2,4,6), (1,3,2)(4,8)(6,7) ]), </span>
<span class="GAPprompt">></span> <span class="GAPinput">  Group([ (1,6,7,8,4), (2,5)(3,4) ]),</span>
<span class="GAPprompt">></span> <span class="GAPinput">  Group([ (3,6)(7,8), (2,4,5), (1,5)(2,4), (2,4)(6,7), (6,8,7), </span>
<span class="GAPprompt">></span> <span class="GAPinput">(1,2)(4,5), (3,7)(6,8) ]),</span>
<span class="GAPprompt">></span> <span class="GAPinput">  Group([ (1,7,8,4)(2,5,3,6), (1,3)(2,6)(4,8)(5,7), (1,5)(2,4)(3,7)(6,8),</span>
<span class="GAPprompt">></span> <span class="GAPinput">      (1,8)(2,7)(3,4)(5,6), (1,3)(2,6)(4,7)(5,8) ]) ];</span>
[ Group([ (2,4,6), (1,3,2)(4,8)(6,7) ]), Group([ (1,6,7,8,4), (2,5)(3,4) ]), 
  Group([ (3,6)(7,8), (2,4,5), (1,5)(2,4), (2,4)(6,7), (6,8,7), (1,2)
  (4,5), (3,7)(6,8) ]), Group([ (1,7,8,4)(2,5,3,6), (1,3)(2,6)(4,8)
  (5,7), (1,5)(2,4)(3,7)(6,8), (1,8)(2,7)(3,4)(5,6), (1,3)(2,6)(4,7)(5,8) ]) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">cg:=CosetGeometry(g,pabs);</span>
CosetGeometry( AlternatingGroup( [ 1 .. 8 ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">diag:=DiagramOfGeometry(cg);</span>
< Diagram of CosetGeometry( AlternatingGroup( [ 1 .. 8 ] ) , 
[ Group( [ (2,4,6), (1,3,2)(4,8)(6,7) ] ), 
  Group( [ (1,6,7,8,4), (2,5)(3,4) ] ), 
  Group( [ (3,6)(7,8), (2,4,5), (1,5)(2,4), (2,4)(6,7), (6,8,7), (1,2)(4,5), 
      (3,7)(6,8) ] ), 
  Group( [ (1,7,8,4)(2,5,3,6), (1,3)(2,6)(4,8)(5,7), (1,5)(2,4)(3,7)(6,8), 
      (1,8)(2,7)(3,4)(5,6), (1,3)(2,6)(4,7)(5,8) ] ) ] ) >
<span class="GAPprompt">gap></span> <span class="GAPinput">DrawDiagram(diag, "neuma8");</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">#Exec("gv neuma8.ps");</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">point:=Random(ElementsOfIncidenceStructure(cg,1));</span>
<element of type 1 of CosetGeometry( AlternatingGroup( [ 1 .. 8 ] ) )>
<span class="GAPprompt">gap></span> <span class="GAPinput">residue:=ResidueOfFlag(FlagOfIncidenceStructure(cg,[point]));</span>
CosetGeometry( Group( [ (3,5,7), (1,7)(2,4,3)(5,8) ] ) )
<span class="GAPprompt">gap></span> <span class="GAPinput">diagc3:=DiagramOfGeometry(residue);</span>
< Diagram of CosetGeometry( Group( [ (3,5,7), (1,7)(2,4,3)(5,8) ] ) , 
[ Group( [ (4,5,8), (1,4,5), (1,7,8), (1,8,4,2,7) ] ), 
  Group( [ (1,8)(4,7), (2,5,3), (1,7)(2,3), (1,7,8), (1,4)(7,8) ] ), 
  Group( [ (1,5,4,3)(7,8), (2,4)(5,8) ] ) ] ) >
<span class="GAPprompt">gap></span> <span class="GAPinput">DrawDiagram(diagc3, "a7geo");</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">#Exec("gv a7geo.ps");</span>
 
</pre></div>

<p>The produced diagrams are included here: Neumaier's A<sub>8</sub></p>

<p><img src="./graphics/neuma8.jpg"></img></p>

<p>The A<sub>7</sub> geometry:</p>

<p><img src="./graphics/a7geo.jpg"></img></p>

<p>On a UNIX system we can start an external viewer (``gv'' or ghostview in this case) from within GAP with the <code class="file">Exec</codecommand.</p>

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

<h5>13.3-4 DrawDiagramWithNeato</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DrawDiagramWithNeato</code>( <var class="Arg">diag</var>, <var class="Arg">filename</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: does not return anything but writes a file <var class="Arg">filename</var>.ps</p>

<p><var class="Arg">diag</var> must be a diagram. Writes a file <var class="Arg">filename</var>.ps in the current directory with a pictorial version of the diagram.</p>

<p>This command uses a "spring tension" algorithm to draw the diagram <var class="Arg">diag</var> with straight edges. For some diagrams this looks better than the result of <code class="file">DrawDiagram</code>. However this algorithm does not print the vertex labels.</p>

<p>This command uses the <strong class="pkg">graphviz</strong> package which is available from http://www.graphviz.org. In case <strong class="pkg">graphviz</strong> is not available on your system, you will get an friendly error message and a file <var class="Arg">filename</var>.dot will be written. You can then compile this file later or ask a friend to help you. An <span class="SimpleMath">E_6</span> geometry for comparison: on the left hand side we have the output of DrawDiagram and on the right hand side we see the result of DrawDiagramWithNeato</p>

<p><img src="./graphics/E6.jpg"></img> <img src="./graphics/E6bis.jpg"></img></p>


<div class="chlinkprevnextbot"> <a href="chap0.html">[Top of Book]</a>   <a href="chap0.html#contents">[Contents]</a>    <a href="chap12.html">[Previous Chapter]</a>    <a href="chap14.html">[Next Chapter]</a>   </div>


<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chap8.html">8</a>  <a href="chap9.html">9</a>  <a href="chap10.html">10</a>  <a href="chap11.html">11</a>  <a href="chap12.html">12</a>  <a href="chap13.html">13</a>  <a href="chap14.html">14</a>  <a href="chapA.html">A</a>  <a href="chapB.html">B</a>  <a href="chapC.html">C</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>

<hr />
<p class="foot">generated by <a href="http://www.math.rwth-aachen.de/~Frank.Luebeck/GAPDoc">GAPDoc2HTML</a></p>
</body>
</html>

Messung V0.5 in Prozent
C=95 H=99 G=96

¤ Dauer der Verarbeitung: 0.19 Sekunden  (vorverarbeitet am  2026-04-25) ¤

*© Formatika GbR, Deutschland






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 und die Messung sind 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