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


Quelle  chap48_mj.html   Sprache: HTML

 
 products/sources/formale Sprachen/GAP/doc/ref/chap48_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://cdn.jsdelivr.net/npm/mathjax@2/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
<title>GAP (ref) - Chapter 48: Presentations and Tietze Transformations</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="chap48"  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="chap15_mj.html">15</a>  <a href="chap16_mj.html">16</a>  <a href="chap17_mj.html">17</a>  <a href="chap18_mj.html">18</a>  <a href="chap19_mj.html">19</a>  <a href="chap20_mj.html">20</a>  <a href="chap21_mj.html">21</a>  <a href="chap22_mj.html">22</a>  <a href="chap23_mj.html">23</a>  <a href="chap24_mj.html">24</a>  <a href="chap25_mj.html">25</a>  <a href="chap26_mj.html">26</a>  <a href="chap27_mj.html">27</a>  <a href="chap28_mj.html">28</a>  <a href="chap29_mj.html">29</a>  <a href="chap30_mj.html">30</a>  <a href="chap31_mj.html">31</a>  <a href="chap32_mj.html">32</a>  <a href="chap33_mj.html">33</a>  <a href="chap34_mj.html">34</a>  <a href="chap35_mj.html">35</a>  <a href="chap36_mj.html">36</a>  <a href="chap37_mj.html">37</a>  <a href="chap38_mj.html">38</a>  <a href="chap39_mj.html">39</a>  <a href="chap40_mj.html">40</a>  <a href="chap41_mj.html">41</a>  <a href="chap42_mj.html">42</a>  <a href="chap43_mj.html">43</a>  <a href="chap44_mj.html">44</a>  <a href="chap45_mj.html">45</a>  <a href="chap46_mj.html">46</a>  <a href="chap47_mj.html">47</a>  <a href="chap48_mj.html">48</a>  <a href="chap49_mj.html">49</a>  <a href="chap50_mj.html">50</a>  <a href="chap51_mj.html">51</a>  <a href="chap52_mj.html">52</a>  <a href="chap53_mj.html">53</a>  <a href="chap54_mj.html">54</a>  <a href="chap55_mj.html">55</a>  <a href="chap56_mj.html">56</a>  <a href="chap57_mj.html">57</a>  <a href="chap58_mj.html">58</a>  <a href="chap59_mj.html">59</a>  <a href="chap60_mj.html">60</a>  <a href="chap61_mj.html">61</a>  <a href="chap62_mj.html">62</a>  <a href="chap63_mj.html">63</a>  <a href="chap64_mj.html">64</a>  <a href="chap65_mj.html">65</a>  <a href="chap66_mj.html">66</a>  <a href="chap67_mj.html">67</a>  <a href="chap68_mj.html">68</a>  <a href="chap69_mj.html">69</a>  <a href="chap70_mj.html">70</a>  <a href="chap71_mj.html">71</a>  <a href="chap72_mj.html">72</a>  <a href="chap73_mj.html">73</a>  <a href="chap74_mj.html">74</a>  <a href="chap75_mj.html">75</a>  <a href="chap76_mj.html">76</a>  <a href="chap77_mj.html">77</a>  <a href="chap78_mj.html">78</a>  <a href="chap79_mj.html">79</a>  <a href="chap80_mj.html">80</a>  <a href="chap81_mj.html">81</a>  <a href="chap82_mj.html">82</a>  <a href="chap83_mj.html">83</a>  <a href="chap84_mj.html">84</a>  <a href="chap85_mj.html">85</a>  <a href="chap86_mj.html">86</a>  <a href="chap87_mj.html">87</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="chap47_mj.html">[Previous Chapter]</a>    <a href="chap49_mj.html">[Next Chapter]</a>   </div>

<p id="mathjaxlink" class="pcenter"><a href="chap48.html">[MathJax off]</a></p>
<p><a id="X782985197BE809BF" name="X782985197BE809BF"></a></p>
<div class="ChapSects"><a href="chap48_mj.html#X782985197BE809BF">48 <span class="Heading">Presentations and Tietze Transformations</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap48_mj.html#X867D00387957450F">48.1 <span class="Heading">Creating Presentations</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X797867B287AD92F8">48.1-1 PresentationFpGroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X8637837A79422445">48.1-2 TzSort</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X849429BC7D435F77">48.1-3 GeneratorsOfPresentation</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7D6F40A87F24D3D6">48.1-4 FpGroupPresentation</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X84E056C57AFEDEA8">48.1-5 PresentationViaCosetTable</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7E1F2658827FC228">48.1-6 SimplifiedFpGroup</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap48_mj.html#X8118FECE7AD1879B">48.2 <span class="Heading">Subgroup Presentations</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7DB32FA97DAC5AC8">48.2-1 PresentationSubgroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X857365CD87ADC29E">48.2-2 <span class="Heading">PresentationSubgroupRrs</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7FCE7ED581CF7897">48.2-3 PrimaryGeneratorWords</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X80BA10F780EAE68E">48.2-4 PresentationSubgroupMtc</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7D6A52837BEE5C3D">48.2-5 PresentationNormalClosureRrs</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7A7E5D0084DB0B4F">48.2-6 PresentationNormalClosure</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap48_mj.html#X7BC960AB7E8DE419">48.3 <span class="Heading">Relators in a Presentation</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X8365BAFA785FCD8D">48.3-1 TietzeWordAbstractWord</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X8573E91C838B1D13">48.3-2 AbstractWordTietzeWord</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap48_mj.html#X867F64FA840B3F81">48.4 <span class="Heading">Printing Presentations</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X847EA6737C21171C">48.4-1 TzPrintGenerators</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X821B63DD82894443">48.4-2 TzPrintRelators</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X852C52C37FAAB7DD">48.4-3 TzPrintLengths</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7D7B3F46865443E4">48.4-4 TzPrintStatus</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X85F8DAE27F06C32B">48.4-5 TzPrintPresentation</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7CA8BA51802655FC">48.4-6 TzPrint</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X82F6B0EE7C7C7901">48.4-7 TzPrintPairs</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap48_mj.html#X82455E5885D73FFF">48.5 <span class="Heading">Changing Presentations</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7F632A6D8685855D">48.5-1 AddGenerator</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X83A5667086FD538A">48.5-2 TzNewGenerator</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X78D1BCE67FA852D8">48.5-3 AddRelator</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7B11E89E78A22EBF">48.5-4 RemoveRelator</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap48_mj.html#X829B634286471AB7">48.6 <span class="Heading">Tietze Transformations</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7C4A30328224C466">48.6-1 TzGo</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X78C3D23387DAC35A">48.6-2 SimplifyPresentation</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X801D3D8984E1CA55">48.6-3 TzGoGo</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap48_mj.html#X7D19E30080290FC7">48.7 <span class="Heading">Elementary Tietze Transformations</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X85989AF886EC2BF6">48.7-1 <span class="Heading">TzEliminate</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7DF4BBDF839643DD">48.7-2 TzSearch</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X87F7A87A7ACF2445">48.7-3 TzSearchEqual</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X80D31A0F7C2A51BD">48.7-4 TzFindCyclicJoins</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap48_mj.html#X7D2FACCF79F57040">48.8 <span class="Heading">Tietze Transformations that introduce new Generators</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X846DB23E8236FF8A">48.8-1 <span class="Heading">TzSubstitute</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7ADE3B437C19B94D">48.8-2 TzSubstituteCyclicJoins</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap48_mj.html#X85E703997A0212EE">48.9 <span class="Heading">Tracing generator images through Tietze transformations</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7D855FA08242898A">48.9-1 TzInitGeneratorImages</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7AB9A06F80FB3659">48.9-2 OldGeneratorsOfPresentation</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X798B38F87C082C45">48.9-3 TzImagesOldGens</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7AC41B117DBB87D6">48.9-4 TzPreImagesNewGens</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7F086D0E7AD6173B">48.9-5 TzPrintGeneratorImages</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap48_mj.html#X7D9E283D81CCCF1A">48.10 <span class="Heading">The Decoding Tree Procedure</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7ACBFE2F78D72A31">48.10-1 DecodeTree</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap48_mj.html#X856F37537E9927EE">48.11 <span class="Heading">Tietze Options</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X8178683283214D88">48.11-1 TzOptions</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap48_mj.html#X7BC90B6882DE6D10">48.11-2 TzPrintOptions</a></span>
</div></div>
</div>

<h3>48 <span class="Heading">Presentations and Tietze Transformations</span></h3>

<p>A finite presentation describes a group, but usually there is a multitude of presentations that describe isomorphic groups. Therefore a presentation in <strong class="pkg">GAP</strong> is different from a finitely presented group though there are ways to translate between both.</p>

<p>An important feature of presentations is that they can be modified (see sections <a href="chap48_mj.html#X82455E5885D73FFF"><span class="RefLink">48.5</span></a> to <a href="chap48_mj.html#X7D2FACCF79F57040"><span class="RefLink">48.8</span></a>).</p>

<p>If you only want to get new presentations for subgroups of a finitely presented group (and do not want to manipulate presentations yourself), chances are that the operation <code class="func">IsomorphismFpGroup</code> (<a href="chap47_mj.html#X7F28268F850F454E"><span class="RefLink">47.11-1</span></a>) already does what you want (see <a href="chap47_mj.html#X826604AA7F18BFA3"><span class="RefLink">47.12</span></a>).</p>

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

<h4>48.1 <span class="Heading">Creating Presentations</span></h4>

<p>Most of the functions creating presentations and all functions performing Tietze transformations on them sort the relators by increasing lengths. The function <code class="func">PresentationFpGroup</code> (<a href="chap48_mj.html#X797867B287AD92F8"><span class="RefLink">48.1-1</span></a>) is an exception because it is intended to reflect the relators that were used to define the involved f. p. group. You may use the command <code class="func">TzSort</code> (<a href="chap48_mj.html#X8637837A79422445"><span class="RefLink">48.1-2</span></a>) to sort the presentation.</p>

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

<h5>48.1-1 PresentationFpGroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PresentationFpGroup</code>( <var class="Arg">G</var>[, <var class="Arg">printlevel</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>creates a presentation, i. e., a Tietze object, for the given finitely presented group <var class="Arg">G</var>. This presentation will be exactly as the presentation of <var class="Arg">G</varand <em>no</em> initial Tietze transformations are applied to it.</p>

<p>The optional <var class="Arg">printlevel</var> parameter can be used to restrict or to extend the amount of output provided by Tietze transformation commands when being applied to the created presentation. The default value 1 is designed for interactive use and implies explicit messages to be displayed by most of these commands. A <var class="Arg">printlevel</var> value of 0 will suppress these messages, whereas a <var class="Arg">printlevel</var> value of 2 will enforce some additional output.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">f := FreeGroup( "a""b" );</span>
<free group on the generators [ a, b ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">g := f / [ f.1^3, f.2^2, (f.1*f.2)^3 ];</span>
<fp group on the generators [ a, b ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">p := PresentationFpGroup( g );</span>
<presentation with 2 gens and 3 rels of total length 11>
</pre></div>

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

<h5>48.1-2 TzSort</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TzSort</code>( <var class="Arg">P</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>sorts the relators of the given presentation <var class="Arg">P</var> by increasing lengths. There is no particular ordering defined for the relators of equal length. Note that <code class="func">TzSort</code> does not return a new object. It changes the given presentation.</p>

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

<h5>48.1-3 GeneratorsOfPresentation</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GeneratorsOfPresentation</code>( <var class="Arg">P</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns a list of free generators that is a shallow copy (see <code class="func">ShallowCopy</code> (<a href="chap12_mj.html#X846BC7107C352031"><span class="RefLink">12.7-1</span></a>)) of the current generators of the presentation <var class="Arg">P</var>.</p>

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

<h5>48.1-4 FpGroupPresentation</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FpGroupPresentation</code>( <var class="Arg">P</var>[, <var class="Arg">nam</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>constructs an f. p. group as defined by the given Tietze presentation <var class="Arg">P</var>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">h := FpGroupPresentation( p );</span>
<fp group on the generators [ a, b ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">h = g;</span>
false
</pre></div>

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

<h5>48.1-5 PresentationViaCosetTable</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PresentationViaCosetTable</code>( <var class="Arg">G</var>[, <var class="Arg">F</var>, <var class="Arg">words</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>constructs a presentation for a given concrete finite group. It applies the relations finding algorithm which has been described in <a href="chapBib_mj.html#biBCan73">[Can73]</a> and <a href="chapBib_mj.html#biBNeu82">[Neu82]</a>. It automatically applies Tietze transformations to the presentation found.</p>

<p>If only a group <var class="Arg">G</var> has been specified, the single stage algorithm is applied.</p>

<p>The operation <code class="func">IsomorphismFpGroup</code> (<a href="chap47_mj.html#X7F28268F850F454E"><span class="RefLink">47.11-1</span></a>) in contrast uses a multiple-stage algorithm using a chief series and stabilizer chains. It usually should be used rather than <code class="func">PresentationViaCosetTable</code>. (It does not apply Tietze transformations automatically.)</p>

<p>If the two stage algorithm is to be used, <code class="func">PresentationViaCosetTable</codeexpects a subgroup <var class="Arg">H</var> of <var class="Arg">G</var> to be provided in form of two additional arguments <var class="Arg">F</var> and <var class="Arg">words</var>, where <var class="Arg">F</var> is a free group with the same number of generators as <var class="Arg">G</var>, and <var class="Arg">words</var> is a list of words in the generators of <var class="Arg">F</var> which supply a list of generators of <var class="Arg">H</var> if they are evaluated as words in the corresponding generators of <var class="Arg">G</var>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">G := GeneralLinearGroup( 2, 7 );</span>
GL(2,7)
<span class="GAPprompt">gap></span> <span class="GAPinput">GeneratorsOfGroup( G );</span>
[ [ [ Z(7), 0*Z(7) ], [ 0*Z(7), Z(7)^0 ] ],
  [ [ Z(7)^3, Z(7)^0 ], [ Z(7)^3, 0*Z(7) ] ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Size( G );</span>
2016
<span class="GAPprompt">gap></span> <span class="GAPinput">P := PresentationViaCosetTable( G );</span>
<presentation with 2 gens and 5 rels of total length 46>
<span class="GAPprompt">gap></span> <span class="GAPinput">TzPrintRelators( P );</span>
#I  1. f2^3
#I  2. f1^6
#I  3. (f1*f2)^6
#I  4. f1*f2*f1^-1*f2*f1*f2^-1*f1^-1*f2*f1*f2*f1^-1*f2^-1
#I  5. f1^-3*f2*f1*f2*(f1^-1*f2^-1)^2*f1^-2*f2
</pre></div>

<p>The two stage algorithm saves an essential amount of space by constructing two coset tables of lengths <span class="SimpleMath">\(|H|\)</span> and <span class="SimpleMath">\(|G|/|H|\)</span> instead of just one coset table of length <span class="SimpleMath">\(|G|\)</span>. The next example shows an application of this option in the case of a subgroup of size 7920 and index 12 in a permutation group of size 95040.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">M12 := Group( [ (1,2,3,4,5,6,7,8,9,10,11), (3,7,11,8)(4,10,5,6),</span>
<span class="GAPprompt">></span> <span class="GAPinput">(1,12)(2,11)(3,6)(4,8)(5,9)(7,10) ], () );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">F := FreeGroup( "a""b""c" );</span>
<free group on the generators [ a, b, c ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">words := [ F.1, F.2 ];</span>
[ a, b ]
<span class="GAPprompt">gap></span> <span class="GAPinput">P := PresentationViaCosetTable( M12, F, words );</span>
<presentation with 3 gens and 10 rels of total length 97>
<span class="GAPprompt">gap></span> <span class="GAPinput">G := FpGroupPresentation( P );</span>
<fp group on the generators [ a, b, c ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">RelatorsOfFpGroup( G );</span>
[ c^2, b^4, (a*c)^3, (a*b^-2)^3, a^11,
  a^2*b*a^-2*b^-1*(b^-1*a)^2*a*b^-1, (a*(b*a^-1)^2*b^-1)^2,
  a^2*b*a^2*b^-2*a^-1*b*(a^-1*b^-1)^2,
  a^2*b^-1*a^-1*b^-1*a*c*b*c*(a*b)^2, a^2*(a^2*b)^2*a^-2*c*a*b*a^-1*c
 ]
</pre></div>

<p>Before it is returned, the resulting presentation is being simplified by appropriate calls of the function <code class="func">SimplifyPresentation</code> (<a href="chap48_mj.html#X78C3D23387DAC35A"><span class="RefLink">48.6-2</span></a>) (see <a href="chap48_mj.html#X829B634286471AB7"><span class="RefLink">48.6</span></a>), but without allowing any eliminations of generators. This restriction guarantees that we get a bijection between the list of generators of <var class="Arg">G</var> and the list of generators in the presentation. Hence, if the generators of <var class="Arg">G</var> are redundant and if you don't care for the bijection, you may get a shorter presentation by calling the function SimplifyPresentation (48.6-2), now without this restriction, once more yourself.




<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">H := Group(</span>
<span class="GAPprompt">></span> <span class="GAPinput">[ (2,5,3), (2,7,5), (1,8,4), (1,8,6), (4,8,6), (3,5,7) ], () );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">P := PresentationViaCosetTable( H );</span>
<presentation with 6 gens and 12 rels of total length 42>
<span class="GAPprompt">gap></span> <span class="GAPinput">SimplifyPresentation( P );</span>
#I  there are 4 generators and 10 relators of total length 36
</pre></div>

<p>If you apply the function <code class="func">FpGroupPresentation</code> (<a href="chap48_mj.html#X7D6F40A87F24D3D6"><span class="RefLink">48.1-4</span></a>) to the resulting presentation you will get a finitely presented group isomorphic to <var class="Arg">G</var>. Note, however, that the function <code class="func">IsomorphismFpGroup</code> (<a href="chap47_mj.html#X7F28268F850F454E"><span class="RefLink">47.11-1</span></a>) is recommended for this purpose.</p>

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

<h5>48.1-6 SimplifiedFpGroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SimplifiedFpGroup</code>( <var class="Arg">G</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>applies Tietze transformations to a copy of the presentation of the given finitely presented group <var class="Arg">G</var> in order to reduce it with respect to the number of generators, the number of relators, and the relator lengths.</p>

<p><code class="func">SimplifiedFpGroup</code> returns a group isomorphic to the given one with a presentation which has been tried to simplify via Tietze transformations.</p>

<p>If the connection to the original group is important, then the operation <code class="func">IsomorphismSimplifiedFpGroup</code> (<a href="chap47_mj.html#X78D87FA68233C401"><span class="RefLink">47.12-1</span></a>) should be used instead.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">F6 := FreeGroup( 6, "G" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">G := F6 / [ F6.1^2, F6.2^2, F6.4*F6.6^-1, F6.5^2, F6.6^2,</span>
<span class="GAPprompt">></span> <span class="GAPinput">F6.1*F6.2^-1*F6.3, F6.1*F6.5*F6.3^-1, F6.2*F6.4^-1*F6.3,</span>
<span class="GAPprompt">></span> <span class="GAPinput">F6.3*F6.4*F6.5^-1, F6.1*F6.6*F6.3^-2, F6.3^4 ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">H := SimplifiedFpGroup( G );</span>
<fp group on the generators [ G1, G3 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">RelatorsOfFpGroup( H );</span>
[ G1^2, (G1*G3^-1)^2, G3^4 ]
</pre></div>

<p>In fact, the command</p>


<div class="example"><pre>
H := SimplifiedFpGroup( G );
</pre></div>

<p>is an abbreviation of the command sequence</p>


<div class="example"><pre>
P := PresentationFpGroup( G, 0 );;
SimplifyPresentation( P );
H := FpGroupPresentation( P );
</pre></div>

<p>which applies a rather simple-minded strategy of Tietze transformations to the intermediate presentation <var class="Arg">P</var>. If, for some concrete group, the resulting presentation is unsatisfying, then you should try a more sophisticated, interactive use of the available Tietze transformation commands (see <a href="chap48_mj.html#X829B634286471AB7"><span class="RefLink">48.6</span></a>).</p>

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

<h4>48.2 <span class="Heading">Subgroup Presentations</span></h4>

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

<h5>48.2-1 PresentationSubgroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PresentationSubgroup</code>( <var class="Arg">G</var>, <var class="Arg">H</var>[, <var class="Arg">string</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p><code class="func">PresentationSubgroup</code> is a synonym for <code class="func">PresentationSubgroupRrs</code> (<a href="chap48_mj.html#X857365CD87ADC29E"><span class="RefLink">48.2-2</span></a>).</p>

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

<h5>48.2-2 <span class="Heading">PresentationSubgroupRrs</span></h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PresentationSubgroupRrs</code>( <var class="Arg">G</var>, <var class="Arg">H</var>[, <var class="Arg">string</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PresentationSubgroupRrs</code>( <var class="Arg">G</var>, <var class="Arg">table</var>[, <var class="Arg">string</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>uses the Reduced Reidemeister-Schreier method to compute a presentation <var class="Arg">P</var> for a subgroup <var class="Arg">H</var> of a finitely presented group <var class="Arg">G</var>. The generators in the resulting presentation will be named <var class="Arg">string</var><code class="code">1</code>, <var class="Arg">string</var><code class="code">2</code>, <span class="SimpleMath">\(\ldots\)</span>, the default string is <code class="code">"_x"</code>. You may access the <span class="SimpleMath">\(i\)</span>-th of these generators by <var class="Arg">P</var><code class="code">!.</code><span class="SimpleMath">\(i\)</span>.</p>

<p>Alternatively to the subgroup <var class="Arg">H</var>, its coset table <var class="Arg">table</var> in <var class="Arg">G</var> may be given as second argument.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">f := FreeGroup( "a""b" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g := f / [ f.1^2, f.2^3, (f.1*f.2)^5 ];</span>
<fp group on the generators [ a, b ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">g1 := Size( g );</span>
60
<span class="GAPprompt">gap></span> <span class="GAPinput">u := Subgroup( g, [ g.1, g.1^g.2 ] );</span>
Group([ a, b^-1*a*b ])
<span class="GAPprompt">gap></span> <span class="GAPinput">p := PresentationSubgroup( g, u, "g" );</span>
<presentation with 3 gens and 4 rels of total length 12>
<span class="GAPprompt">gap></span> <span class="GAPinput">gens := GeneratorsOfPresentation( p );</span>
[ g1, g2, g3 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">TzPrintRelators( p );</span>
#I  1. g1^2
#I  2. g2^2
#I  3. g3*g2*g1
#I  4. g3^5
</pre></div>

<p>Note that you cannot call the generators by their names. These names are not variables, but just display figures. So, if you want to access the generators by their names, you first will have to introduce the respective variables and to assign the generators to them.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gens[1] = g1;</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">g1;</span>
60
<span class="GAPprompt">gap></span> <span class="GAPinput">g1 := gens[1];; g2 := gens[2];; g3 := gens[3];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g1;</span>
g1
</pre></div>

<p>The Reduced Reidemeister-Schreier algorithm is a modification of the Reidemeister-Schreier algorithm of George Havas <a href="chapBib_mj.html#biBHav74b">[Hav74]</a>. It was proposed by Joachim Neubüser and first implemented in 1986 by Andrea Lucchini and Volkmar Felsch in the SPAS system <a href="chapBib_mj.html#biBSpa89">[SPA89]</a>. Like the Reidemeister-Schreier algorithm of George Havas, it needs only the presentation of <var class="Arg">G</var> and a coset table of <var class="Arg">H</var> in <var class="Arg">G</var> to construct a presentation of <var class="Arg">H</var>.</p>

<p>Whenever you call the command <code class="func">PresentationSubgroupRrs</code>, it first obtains a coset table of <var class="Arg">H</var> in <var class="Arg">G</var> if not given. Next, a set of generators of <var class="Arg">H</var> is determined by reconstructing the coset table and introducing in that process as many Schreier generators of <var class="Arg">H</var> in <var class="Arg">G</var> as are needed to do a Felsch strategy coset enumeration without any coincidences. (In general, though containing redundant generators, this set will be much smaller than the set of all Schreier generators. That is why we call the method the <em>Reduced</em> Reidemeister-Schreier.)</p>

<p>After having constructed this set of <em>primary subgroup generators</em>, say, the coset table is extended to an <em>augmented coset table</em> which describes the action of the group generators on coset representatives, i.e., on elements instead of cosets. For this purpose, suitable words in the (primary) subgroup generators have to be associated to the coset table entries. In order to keep the lengths of these words short, additional <em>secondary subgroup generators</em> are introduced as abbreviations of subwords. Their number may be large.</p>

<p>Finally, a Reidemeister rewriting process is used to get defining relators for <var class="Arg">H</var> from the relators of <var class="Arg">G</var>. As the resulting presentation of <var class="Arg">H</var> is a presentation on primary <em>and</em> secondary generators, in general you will have to simplify it by appropriate Tietze transformations (see <a href="chap48_mj.html#X829B634286471AB7"><span class="RefLink">48.6</span></a>) or by the command <code class="func">DecodeTree</code> (<a href="chap48_mj.html#X7ACBFE2F78D72A31"><span class="RefLink">48.10-1</span></a>) before you can use it. Therefore it is returned in the form of a presentation, <var class="Arg">P</var> say.</p>

<p>Compared with the Modified Todd-Coxeter method described below, the Reduced Reidemeister-Schreier method (as well as Havas' original Reidemeister-Schreier program) has the advantage that it does not require generators of H to be given if a coset table of H in G is known. This provides a possibility to compute a presentation of the normal closure of a given subgroup (see PresentationNormalClosureRrs (48.2-5)).



<p>For certain applications you may be interested in getting not only just a presentation for <var class="Arg">H</var>, but also a relation between the involved generators of <var class="Arg">H</var> and the generators of <var class="Arg">G</var>. The subgroup generators in the presentation are sorted such that the primary generators precede the secondary ones. Moreover, for each secondary subgroup generator there is a relator in the presentation which expresses this generator as a word in preceding ones. Hence, all we need in addition is a list of words in the generators of <var class="Arg">G</var> which express the primary subgroup generators. In fact, such a list is provided in the attribute <code class="func">PrimaryGeneratorWords</code> (<a href="chap48_mj.html#X7FCE7ED581CF7897"><span class="RefLink">48.2-3</span></a>) of the resulting presentation.</p>

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

<h5>48.2-3 PrimaryGeneratorWords</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PrimaryGeneratorWords</code>( <var class="Arg">P</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>is an attribute of the presentation <var class="Arg">P</var> which holds a list of words in the associated group generators (of the underlying free group) which express the primary subgroup generators of <var class="Arg">P</var>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">PrimaryGeneratorWords( p );</span>
[ a, b^-1*a*b ]
</pre></div>

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

<h5>48.2-4 PresentationSubgroupMtc</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PresentationSubgroupMtc</code>( <var class="Arg">G</var>, <var class="Arg">H</var>[, <var class="Arg">string</var>][, <var class="Arg">print</var>, <var class="Arg">level</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>uses the Modified Todd-Coxeter coset representative enumeration method to compute a presentation <span class="SimpleMath">\(P\)</span> for a subgroup <var class="Arg">H</var> of a finitely presented group <var class="Arg">G</var>. The presentation returned is in generators corresponding to the generators of <var class="Arg">H</var>. The generators in the resulting presentation will be named <var class="Arg">string</var><code class="code">1</code>, <var class="Arg">string</var><code class="code">2</code>, <span class="SimpleMath">\(\ldots\)</span>, the default string is <code class="code">"_x"</code>. You may access the <span class="SimpleMath">\(i\)</span>-th of these generators by <span class="SimpleMath">\(P\)</span><code class="code">!.</code><span class="SimpleMath">\(i\)</span>.</p>

<p>The default print level is <span class="SimpleMath">\(1\)</span>. If the print level is set to <span class="SimpleMath">\(0\)</span>, then the printout of the implicitly called function <code class="func">DecodeTree</code> (<a href="chap48_mj.html#X7ACBFE2F78D72A31"><span class="RefLink">48.10-1</span></a>) will be suppressed.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">p := PresentationSubgroupMtc( g, u );</span>
<presentation with 2 gens and 3 rels of total length 14>
</pre></div>

<p>The so called Modified Todd-Coxeter method was proposed, in slightly different forms, by Nathan S. Mendelsohn and William O. J. Moser in 1966. Moser's method was proved in [BC76]. It has been generalized to cover a broad spectrum of different versions (see the survey [Neu82]).



<p>The <em>Modified Todd-Coxeter</em> method performs an enumeration of coset representatives. It proceeds like an ordinary coset enumeration (see <a href="chap47_mj.html#X7BD0CEBA7B225416"><span class="RefLink">47.6</span></a>), but as the product of a coset representative by a group generator or its inverse need not be a coset representative itself, the Modified Todd-Coxeter has to store a kind of correction element for each coset table entry. Hence it builds up a so called <em>augmented coset table</em> of <var class="Arg">H</var> in <var class="Arg">G</var> consisting of the ordinary coset table and a second table in parallel which contains the associated subgroup elements.</p>

<p>Theoretically, these subgroup elements could be expressed as words in the given generators of <var class="Arg">H</var>, but in general these words tend to become unmanageable because of their enormous lengths. Therefore, a highly redundant list of subgroup generators is built up starting from the given (<q>primary</q>) generators of <var class="Arg">H</var> and adding additional (<q>secondary</q>) generators which are defined as abbreviations of suitable words of length two in the preceding generators such that each of the subgroup elements in the augmented coset table can be expressed as a word of length at most one in the resulting (primary <em>and</em> secondary) subgroup generators.</p>

<p>Then a rewriting process (which is essentially a kind of Reidemeister rewriting process) is used to get relators for <var class="Arg">H</var> from the defining relators of <var class="Arg">G</var>.</p>

<p>The resulting presentation involves all the primary, but not all the secondary generators of <var class="Arg">H</var>. In fact, it contains only those secondary generators which explicitly occur in the augmented coset table. If we extended this presentation by those secondary generators which are not yet contained in it as additional generators, and by the definitions of all secondary generators as additional relators, we would get a presentation of <var class="Arg">H</var>, but, in general, we would end up with a large number of generators and relators.</p>

<p>On the other hand, if we avoid this extension, the current presentation will not necessarily define <var class="Arg">H</var> although we have used the same rewriting process which in the case of the <code class="func">PresentationSubgroupRrs</code> (<a href="chap48_mj.html#X857365CD87ADC29E"><span class="RefLink">48.2-2</span></a>) command computes a defining set of relators for <var class="Arg">H</var> from an augmented coset table and defining relators of <var class="Arg">G</var>. The different behaviour here is caused by the fact that coincidences may have occurred in the Modified Todd-Coxeter coset enumeration.</p>

<p>To overcome this problem without extending the presentation by all secondary generators, the <code class="func">PresentationSubgroupMtc</codecommand applies the so called <em>decoding tree</em> algorithm which provides a more economical approach. The reader is strongly recommended to carefully read section <a href="chap48_mj.html#X7D9E283D81CCCF1A"><span class="RefLink">48.10</span></a> where this algorithm is described in more detail. Here we will only mention that this procedure may add a lot of intermediate generators and relators (and even change the isomorphism type) in a process which in fact eliminates all secondary generators from the presentation and hence finally provides a presentation of <var class="Arg">H</var> on the primary, i.e., the originally given, generators of <var class="Arg">H</var>. This is a remarkable advantage of the command <code class="func">PresentationSubgroupMtc</code> compared to the command <code class="func">PresentationSubgroupRrs</code> (<a href="chap48_mj.html#X857365CD87ADC29E"><span class="RefLink">48.2-2</span></a>). But note that, for some particular subgroup <var class="Arg">H</var>, the Reduced Reidemeister-Schreier method might quite well produce a more concise presentation.</p>

<p>The resulting presentation is returned in the form of a presentation, <span class="SimpleMath">\(P\)</span> say.</p>

<p>As the function <code class="func">PresentationSubgroupRrs</code> (<a href="chap48_mj.html#X857365CD87ADC29E"><span class="RefLink">48.2-2</span></a>) described above (see there for details), the function <code class="func">PresentationSubgroupMtc</code> returns a list of the primary subgroup generators of <var class="Arg">H</var> in the attribute <code class="func">PrimaryGeneratorWords</code> (<a href="chap48_mj.html#X7FCE7ED581CF7897"><span class="RefLink">48.2-3</span></a>) of <span class="SimpleMath">\(P\)</span>. In fact, this list is not very exciting here because it is just a shallow copy of the value of <code class="func">GeneratorsOfPresentation</code> (<a href="chap48_mj.html#X849429BC7D435F77"><span class="RefLink">48.1-3</span></a>) of <var class="Arg">H</var>, however it is needed to guarantee a certain consistency between the results of the different functions for computing subgroup presentations.</p>

<p>Though the decoding tree routine already involves a lot of Tietze transformations, we recommend that you try to further simplify the resulting presentation by appropriate Tietze transformations (see <a href="chap48_mj.html#X829B634286471AB7"><span class="RefLink">48.6</span></a>).</p>

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

<h5>48.2-5 PresentationNormalClosureRrs</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PresentationNormalClosureRrs</code>( <var class="Arg">G</var>, <var class="Arg">H</var>[, <var class="Arg">string</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>uses the Reduced Reidemeister-Schreier method to compute a presentation <span class="SimpleMath">\(P\)</span> for the normal closure of a subgroup <var class="Arg">H</var> of a finitely presented group <var class="Arg">G</var>. The generators in the resulting presentation will be named <var class="Arg">string</var><code class="code">1</code>, <var class="Arg">string</var><code class="code">2</code>, <span class="SimpleMath">\(\ldots\)</span>, the default string is <code class="code">"_x"</code>. You may access the <span class="SimpleMath">\(i\)</span>-th of these generators by <span class="SimpleMath">\(P\)</span><code class="code">!.</code><span class="SimpleMath">\(i\)</span>.</p>

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

<h5>48.2-6 PresentationNormalClosure</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PresentationNormalClosure</code>( <var class="Arg">G</var>, <var class="Arg">H</var>[, <var class="Arg">string</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p><code class="func">PresentationNormalClosure</code> is a synonym for <code class="func">PresentationNormalClosureRrs</code> (<a href="chap48_mj.html#X7D6A52837BEE5C3D"><span class="RefLink">48.2-5</span></a>).</p>

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

<h4>48.3 <span class="Heading">Relators in a Presentation</span></h4>

<p>In order to speed up the Tietze transformation routines, each relator in a presentation is internally represented by a list of positive or negative generator numbers, i.e., each factor of the proper <strong class="pkg">GAP</strong> word is represented by the position number of the corresponding generator with respect to the current list of generators, or by the respective negative number, if the factor is the inverse of a generator. Note that the numbering of the generators in Tietze words is always relative to a generator list and bears no relation to the internal numbering of generators in a family of associative words.</p>

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

<h5>48.3-1 TietzeWordAbstractWord</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TietzeWordAbstractWord</code>( <var class="Arg">word</var>, <var class="Arg">fgens</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>assumes <var class="Arg">fgens</var> to be a list of free group generators and <var class="Arg">word</var> to be an abstract word in these generators. It converts <var class="Arg">word</var> into a Tietze word, i. e., a list of positive or negative generator numbers.</p>

<p>This function simply calls <code class="func">LetterRepAssocWord</code> (<a href="chap37_mj.html#X7BD7647C7B088389"><span class="RefLink">37.6-8</span></a>).</p>

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

<h5>48.3-2 AbstractWordTietzeWord</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AbstractWordTietzeWord</code>( <var class="Arg">word</var>, <var class="Arg">fgens</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>assumes <var class="Arg">fgens</var> to be a list of free group generators and <var class="Arg">word</var> to be a Tietze word in these generators, i. e., a list of positive or negative generator numbers. It converts <var class="Arg">word</var> to an abstract word.</p>

<p>This function simply calls <code class="func">AssocWordByLetterRep</code> (<a href="chap37_mj.html#X7AC8EC757CFB9A51"><span class="RefLink">37.6-9</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">F := FreeGroup( "a""b""c" ,"d");</span>
<free group on the generators [ a, b, c, d ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">tzword := TietzeWordAbstractWord(</span>
<span class="GAPprompt">></span> <span class="GAPinput">Comm(F.4,F.2) * (F.3^2 * F.2)^-1, GeneratorsOfGroup( F ){[2,3,4]} );</span>
[ -3, -1, 3, -2, -2 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">AbstractWordTietzeWord( tzword, GeneratorsOfGroup( F ){[2,3,4]} );</span>
d^-1*b^-1*d*c^-2
</pre></div>

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

<h4>48.4 <span class="Heading">Printing Presentations</span></h4>

<p>Whenever you create a presentation <span class="SimpleMath">\(P\)</span>, or assign it to a variable, <strong class="pkg">GAP</strong> will respond by printing <span class="SimpleMath">\(P\)</span>. However, as <span class="SimpleMath">\(P\)</span> may contain a lot of generators and many relators of large length, it would be annoying if the standard print facilities displayed all this information in detail. So they restrict the printout to just one line of text containing the number of generators, the number of relators, and the total length of all relators of <span class="SimpleMath">\(P\)</span>. As compensation, <strong class="pkg">GAP</strong> offers some special print commands which display various details of a presentation. Note that there is also a function <code class="func">TzPrintOptions</code> (<a href="chap48_mj.html#X7BC90B6882DE6D10"><span class="RefLink">48.11-2</span></a>). It is described in Section <a href="chap48_mj.html#X856F37537E9927EE"><span class="RefLink">48.11</span></a>.</p>

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

<h5>48.4-1 TzPrintGenerators</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TzPrintGenerators</code>( <var class="Arg">P</var>[, <var class="Arg">list</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>prints the generators of the given Tietze presentation <var class="Arg">P</var> together with the number of their occurrences in the relators. The optional second argument can be used to specify the numbers of the generators to be printed. Default: all generators are printed.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">G := Group( [ (1,2,3,4,5), (2,3,5,4), (1,6)(3,4) ], () );</span>
Group([ (1,2,3,4,5), (2,3,5,4), (1,6)(3,4) ])
<span class="GAPprompt">gap></span> <span class="GAPinput">P := PresentationViaCosetTable( G );</span>
<presentation with 3 gens and 6 rels of total length 28>
<span class="GAPprompt">gap></span> <span class="GAPinput">TzPrintGenerators( P );</span>
#I  1.  f1   11 occurrences
#I  2.  f2   10 occurrences
#I  3.  f3   7 occurrences   involution
</pre></div>

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

<h5>48.4-2 TzPrintRelators</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TzPrintRelators</code>( <var class="Arg">P</var>[, <var class="Arg">list</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>prints the relators of the given Tietze presentation <var class="Arg">P</var>. The optional second argument <var class="Arg">list</var> can be used to specify the numbers of the relators to be printed. Default: all relators are printed.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">TzPrintRelators( P );</span>
#I  1. f3^2
#I  2. f2^4
#I  3. (f2*f3)^2
#I  4. f1^5
#I  5. f1^2*f2*f1*f2^-1
#I  6. f1*f2^-2*f3*f1*f3*f1^-1*f3
</pre></div>

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

<h5>48.4-3 TzPrintLengths</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TzPrintLengths</code>( <var class="Arg">P</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>prints just a list of all relator lengths of the given presentation <var class="Arg">P</var>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">TzPrintLengths( P );</span>
[ 2, 4, 4, 5, 5, 8 ]
</pre></div>

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

<h5>48.4-4 TzPrintStatus</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TzPrintStatus</code>( <var class="Arg">P</var>[, <var class="Arg">norepeat</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>is an internal function which is used by the Tietze transformation routines to print the number of generators, the number of relators, and the total length of all relators in the given Tietze presentation <var class="Arg">P</var>. If <var class="Arg">norepeat</var> is specified as <code class="keyw">true</code>, the printing is suppressed if none of the three values has changed since the last call.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">TzPrintStatus( P );</span>
#I  there are 3 generators and 6 relators of total length 28
</pre></div>

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

<h5>48.4-5 TzPrintPresentation</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TzPrintPresentation</code>( <var class="Arg">P</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>prints the generators and the relators of a Tietze presentation. In fact, it is an abbreviation for the successive call of the three commands <code class="func">TzPrintGenerators</code> (<a href="chap48_mj.html#X847EA6737C21171C"><span class="RefLink">48.4-1</span></a>), <code class="func">TzPrintRelators</code> (<a href="chap48_mj.html#X821B63DD82894443"><span class="RefLink">48.4-2</span></a>), and <code class="func">TzPrintStatus</code> (<a href="chap48_mj.html#X7D7B3F46865443E4"><span class="RefLink">48.4-4</span></a>), each with the presentation <var class="Arg">P</var> as only argument.</p>

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

<h5>48.4-6 TzPrint</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TzPrint</code>( <var class="Arg">P</var>[, <var class="Arg">list</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>prints the current generators of the given presentation <var class="Arg">P</var>, and prints the relators of <var class="Arg">P</var> as Tietze words (without converting them back to abstract words as the functions <code class="func">TzPrintRelators</code> (<a href="chap48_mj.html#X821B63DD82894443"><span class="RefLink">48.4-2</span></a>) and <code class="func">TzPrintPresentation</code> (<a href="chap48_mj.html#X85F8DAE27F06C32B"><span class="RefLink">48.4-5</span></a>) do). The optional second argument can be used to specify the numbers of the relators to be printed. Default: all relators are printed.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">TzPrint( P );</span>
#I  generators: [ f1, f2, f3 ]
#I  relators:
#I  1.  2  [ 3, 3 ]
#I  2.  4  [ 2, 2, 2, 2 ]
#I  3.  4  [ 2, 3, 2, 3 ]
#I  4.  5  [ 1, 1, 1, 1, 1 ]
#I  5.  5  [ 1, 1, 2, 1, -2 ]
#I  6.  8  [ 1, -2, -2, 3, 1, 3, -1, 3 ]
</pre></div>

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

<h5>48.4-7 TzPrintPairs</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TzPrintPairs</code>( <var class="Arg">P</var>[, <var class="Arg">n</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>prints the <var class="Arg">n</var> most often occurring relator subwords of the form <span class="SimpleMath">\(a b\)</span>, where <span class="SimpleMath">\(a\)</span> and <span class="SimpleMath">\(b\)</span> are different generators or inverses of generators, together with the number of their occurrences. The default value of <var class="Arg">n</var> is 10. A value <var class="Arg">n</var> = 0 is interpreted as <code class="func">infinity</code> (<a href="chap18_mj.html#X8511B8DF83324C27"><span class="RefLink">18.2-1</span></a>).</p>

<p>The function <code class="func">TzPrintPairs</code> is useful in the context of Tietze transformations which introduce new generators by substituting words in the current generators (see <a href="chap48_mj.html#X7D2FACCF79F57040"><span class="RefLink">48.8</span></a>). It gives some evidence for an appropriate choice of a word of length 2 to be substituted.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">TzPrintPairs( P, 3 );</span>
#I  1.  3  occurrences of  f2^-1 * f3
#I  2.  2  occurrences of  f2 * f3
#I  3.  2  occurrences of  f1^-1 * f3
</pre></div>

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

<h4>48.5 <span class="Heading">Changing Presentations</span></h4>

<p>The functions described in this section may be used to change a presentation. Note, however, that in general they do not perform Tietze transformations because they change or may change the isomorphism type of the group defined by the presentation.</p>

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

<h5>48.5-1 AddGenerator</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AddGenerator</code>( <var class="Arg">P</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>extends the presentation <var class="Arg">P</var> by a new generator.</p>

<p>Let <span class="SimpleMath">\(i\)</span> be the smallest positive integer which has not yet been used as a generator number in the given presentation. <code class="func">AddGenerator</code> defines a new abstract generator <span class="SimpleMath">\(x_i\)</span> with the name <code class="code">"_x\(i\)"</code> and adds it to the list of generators of <var class="Arg">P</var>.</p>

<p>You may access the generator <span class="SimpleMath">\(x_i\)</span> by typing <var class="Arg">P</var><code class="code">!.</code><span class="SimpleMath">\(i\)</span>. However, this is only practicable if you are running an interactive job because you have to know the value of <span class="SimpleMath">\(i\)</span>. Hence the proper way to access the new generator is to write <code class="code">Last(GeneratorsOfPresentation(P))</code>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">G := PerfectGroup(IsFpGroup, 120 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">H := Subgroup( G, [ G.1^G.2, G.3 ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">P := PresentationSubgroup( G, H );</span>
<presentation with 4 gens and 7 rels of total length 21>
<span class="GAPprompt">gap></span> <span class="GAPinput">AddGenerator( P );</span>
#I  now the presentation has 5 generators, the new generator is _x7
<span class="GAPprompt">gap></span> <span class="GAPinput">gens := GeneratorsOfPresentation( P );</span>
[ _x1, _x2, _x4, _x5, _x7 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">gen := Last(gens);</span>
_x7
<span class="GAPprompt">gap></span> <span class="GAPinput">gen = P!.7;</span>
true
</pre></div>

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

<h5>48.5-2 TzNewGenerator</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TzNewGenerator</code>( <var class="Arg">P</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>is an internal function which defines a new abstract generator and adds it to the presentation <var class="Arg">P</var>. It is called by <code class="func">AddGenerator</code> (<a href="chap48_mj.html#X7F632A6D8685855D"><span class="RefLink">48.5-1</span></a>) and by several Tietze transformation commands. As it does not know which global lists have to be kept consistent, you should not call it. Instead, you should call the function <code class="func">AddGenerator</code> (<a href="chap48_mj.html#X7F632A6D8685855D"><span class="RefLink">48.5-1</span></a>), if needed.</p>

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

<h5>48.5-3 AddRelator</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AddRelator</code>( <var class="Arg">P</var>, <var class="Arg">word</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>adds the relator <var class="Arg">word</var> to the presentation <var class="Arg">P</var>, probably changing the group defined by <var class="Arg">P</var>. <var class="Arg">word</var> must be an abstract word in the generators of <var class="Arg">P</var>.</p>

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

<h5>48.5-4 RemoveRelator</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RemoveRelator</code>( <var class="Arg">P</var>, <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>removes the <var class="Arg">n</var>-th relator from the presentation <var class="Arg">P</var>, probably changing the group defined by <var class="Arg">P</var>.</p>

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

<h4>48.6 <span class="Heading">Tietze Transformations</span></h4>

<p>The commands in this section can be used to modify a presentation by Tietze transformations.</p>

<p>In general, the aim of such modifications will be to <em>simplify</em> the given presentation, i.e., to reduce the number of generators and the number of relators without increasing too much the sum of all relator lengths which we will call the <em>total length</em> of the presentation. Depending on the concrete presentation under investigation one may end up with a nice, short presentation or with a very huge one.</p>

<p>Unfortunately there is no algorithm which could be applied to find the shortest presentation which can be obtained by Tietze transformations from a given one. Therefore, what <strong class="pkg">GAP</strong> offers are some lower-level Tietze transformation commands and, in addition, some higher-level commands which apply the lower-level ones in a kind of default strategy which of course cannot be the optimal choice for all presentations.</p>

<p>The design of these commands follows closely the concept of the ANU Tietze transformation program <a href="chapBib_mj.html#biBHav69">[Hav69]</a> and its later revisions (see <a href="chapBib_mj.html#biBHKRR84">[HKRR84]</a>, <a href="chapBib_mj.html#biBRob88">[Rob88]</a>).</p>

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

<h5>48.6-1 TzGo</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TzGo</code>( <var class="Arg">P</var>[, <var class="Arg">silent</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>automatically performs suitable Tietze transformations of the given presentation <var class="Arg">P</var>. It is perhaps the most convenient one among the interactive Tietze transformation commands. It offers a kind of default strategy which, in general, saves you from explicitly calling the lower-level commands it involves.</p>

<p>If <var class="Arg">silent</var> is specified as <code class="keyw">true</code>, the printing of the status line by <code class="func">TzGo</code> is suppressed if the Tietze option <code class="code">printLevel</code> (see <a href="chap48_mj.html#X856F37537E9927EE"><span class="RefLink">48.11</span></a>) has a value less than <span class="SimpleMath">\(2\)</span>.</p>

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

<h5>48.6-2 SimplifyPresentation</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SimplifyPresentation</code>( <var class="Arg">P</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><code class="func">SimplifyPresentation</code> is a synonym for <code class="func">TzGo</code(<a href="chap48_mj.html#X7C4A30328224C466"><span class="RefLink">48.6-1</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">F2 := FreeGroup( "a""b" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">G := F2 / [ F2.1^9, F2.2^2, (F2.1*F2.2)^4, (F2.1^2*F2.2)^3 ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">a := G.1;; b := G.2;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">H := Subgroup( G, [ (a*b)^2, (a^-1*b)^2 ] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Index( G, H );</span>
408
<span class="GAPprompt">gap></span> <span class="GAPinput">P := PresentationSubgroup( G, H );</span>
<presentation with 8 gens and 36 rels of total length 111>
<span class="GAPprompt">gap></span> <span class="GAPinput">PrimaryGeneratorWords( P );</span>
[ b, a*b*a ]
<span class="GAPprompt">gap></span> <span class="GAPinput">TzOptions( P ).protected := 2;</span>
2
<span class="GAPprompt">gap></span> <span class="GAPinput">TzOptions( P ).printLevel := 2;</span>
2
<span class="GAPprompt">gap></span> <span class="GAPinput">SimplifyPresentation( P );</span>
#I  eliminating _x7 = _x5^-1
#I  eliminating _x5 = _x4
#I  eliminating _x18 = _x3
#I  eliminating _x8 = _x3
#I  there are 4 generators and 8 relators of total length 21
#I  there are 4 generators and 7 relators of total length 18
#I  eliminating _x4 = _x3^-1*_x2^-1
#I  eliminating _x3 = _x2*_x1^-1
#I  there are 2 generators and 4 relators of total length 14
--> --------------------

--> maximum size reached

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

100%


¤ Dauer der Verarbeitung: 0.25 Sekunden  (vorverarbeitet)  ¤

*© 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 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