Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/GAP/doc/ref/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 18.9.2025 mit Größe 44 kB image not shown  

Quelle  chap52_mj.html   Sprache: HTML

 
 products/sources/formale Sprachen/GAP/doc/ref/chap52_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 52: Finitely Presented Semigroups and Monoids</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="chap52"  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="chap51_mj.html">[Previous Chapter]</a>    <a href="chap53_mj.html">[Next Chapter]</a>   </div>

<p id="mathjaxlink" class="pcenter"><a href="chap52.html">[MathJax off]</a></p>
<p><a id="X7DE7C52A7C4BDADE" name="X7DE7C52A7C4BDADE"></a></p>
<div class="ChapSects"><a href="chap52_mj.html#X7DE7C52A7C4BDADE">52 <span class="Heading">Finitely Presented Semigroups and Monoids</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap52_mj.html#X78C80F1A84C58E1E">52.1 <span class="Heading">IsSubsemigroupFpSemigroup (Filter)</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X8496E23C80453C33">52.1-1 IsSubsemigroupFpSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X8239EF2B853411E9">52.1-2 IsFpSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X81ABBE997A4C19B7">52.1-3 IsElementOfFpSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X7DC8A5D380AFE5DB">52.1-4 FpGrpMonSmgOfFpGrpMonSmgElement</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap52_mj.html#X865E230B83982E66">52.2 <span class="Heading">Creating Finitely Presented Semigroups and Monoids</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X84745EC6789FEB4C"><code>52.2-1 \/</code></a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X822F04B2833BE254">52.2-2 FactorFreeSemigroupByRelations</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X869F966B8196F28C">52.2-3 IsomorphismFpSemigroup</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap52_mj.html#X85E7C8407C9D5FBE">52.3 <span class="Heading">Comparison of Elements of Finitely Presented Semigroups</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X7DD9D81F863EBE31"><code>52.3-1 \=</code></a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap52_mj.html#X7CD806CA7E0A1438">52.4 <span class="Heading">Preimages in the Free Semigroup or Monoid</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X784B3DB686E7080C">52.4-1 UnderlyingElement</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X847012347856C55E">52.4-2 ElementOfFpSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X8726523779601873">52.4-3 FreeSemigroupOfFpSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X79A39402806B5EB7">52.4-4 FreeGeneratorsOfFpSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X862BE9FA7C987CAB">52.4-5 RelationsOfFpSemigroup</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap52_mj.html#X87693BDC79DC6EBF">52.5 <span class="Heading">Rewriting Systems and the Knuth-Bendix Procedure</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X7D8F804E814D894D">52.5-1 ReducedConfluentRewritingSystem</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X7A3F8AE285C41D80">52.5-2 KB_REW</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X87A3823483E4FF86">52.5-3 <span class="Heading">KnuthBendixRewritingSystem</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X7966343587A04AFF">52.5-4 SemigroupOfRewritingSystem</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X80B8115C8147F605">52.5-5 FreeSemigroupOfRewritingSystem</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap52_mj.html#X812C28217F3E6720">52.6 <span class="Heading">Todd-Coxeter Procedure</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap52_mj.html#X7C24508A7F677520">52.6-1 CosetTableOfFpSemigroup</a></span>
</div></div>
</div>

<h3>52 <span class="Heading">Finitely Presented Semigroups and Monoids</span></h3>

<p>A <em>finitely presented semigroup</em> (resp. <em>finitely presented monoid</em>) is a quotient of a free semigroup (resp. free monoid) on a finite number of generators over a finitely generated congruence on the free semigroup (resp. free monoid).</p>

<p>Finitely presented semigroups are obtained by factoring a free semigroup by a set of relations (a generating set for the congruence), i.e., a set of pairs of words in the free semigroup.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">f := FreeSemigroup( "a""b" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">x := GeneratorsOfSemigroup( f );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">s := f / [ [ x[1] * x[2], x[2] * x[1] ] ];</span>
<fp semigroup on the generators [ a, b ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">GeneratorsOfSemigroup( s );</span>
[ a, b ]
<span class="GAPprompt">gap></span> <span class="GAPinput">RelationsOfFpSemigroup( s );</span>
[ [ a*b, b*a ] ]
</pre></div>

<p>Finitely presented monoids are obtained by factoring a free monoid by a set of relations, i.e. a set of pairs of words in the free monoid.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">f := FreeMonoid( "a""b" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">x := GeneratorsOfMonoid( f );</span>
[ a, b ]
<span class="GAPprompt">gap></span> <span class="GAPinput">e := Identity( f );</span>
<identity ...>
<span class="GAPprompt">gap></span> <span class="GAPinput">m := f / [ [ x[1] * x[2], e ] ];</span>
<fp monoid on the generators [ a, b ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">RelationsOfFpMonoid( m );</span>
[ [ a*b, <identity ...> ] ]
</pre></div>

<p>Notice that for <strong class="pkg">GAP</strong> a finitely presented monoid is not a finitely presented semigroup.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFpSemigroup( m );</span>
false
</pre></div>

<p>However, one can build a finitely presented semigroup isomorphic to that finitely presented monoid (see <code class="func">IsomorphismFpSemigroup</code> (<a href="chap52_mj.html#X869F966B8196F28C"><span class="RefLink">52.2-3</span></a>)).</p>

<p>Also note that is not possible to refer to the generators by their names. These names are not variables, but just display figures. So, if one wants to access the generators by their names, one first has 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">Unbind( a );</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">f := FreeSemigroup( "a""b" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">s := f / [ [ f.1 * f.2, f.2 * f.1 ] ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">a;</span>
Error, Variable: 'a' must have a value
<span class="GAPprompt">gap></span> <span class="GAPinput">a := s.1;</span>
a
<span class="GAPprompt">gap></span> <span class="GAPinput">a in f;</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">a in s;</span>
true
</pre></div>

<p>The generators of the free semigroup (resp. free monoid) are different from the generators of the finitely presented semigroup (resp. finitely presented monoid) (even though they are displayed by the same names). This means that words in the generators of the free semigroup (resp. free monoid) are not elements of the finitely presented semigroup (resp. finitely presented monoid). Conversely elements of the finitely presented semigroup (resp. finitely presented monoid) are not words of the free semigroup (resp. free monoid).</p>

<p>Calculations comparing elements of a finitely presented semigroup may run into problems: there are finitely presented semigroups for which no algorithm exists (it is known that no such algorithm can exist) that will tell for two arbitrary words in the generators whether the corresponding elements in the finitely presented semigroup are equal. Therefore the methods used by <strong class="pkg">GAP</strong> to compute in finitely presented semigroups may run into warning errors, run out of memory or run forever. If the finitely presented semigroup is (by theory) known to be finite the algorithms are guaranteed to terminate (if there is sufficient memory available), but the time needed for the calculation cannot be bounded a priori. The same can be said for monoids. (See <a href="chap52_mj.html#X87693BDC79DC6EBF"><span class="RefLink">52.5</span></a>.)</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">b := s.2;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">a*b = a^5;</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">a^5 * b^2 * a = a^6 * b^2;</span>
true
</pre></div>

<p>Note that elements of a finitely presented semigroup (or monoid) are not printed in a unique way:</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">a^5 * b^2 * a;</span>
a^5*b^2*a
<span class="GAPprompt">gap></span> <span class="GAPinput">a^6 * b^2;</span>
a^6*b^2
</pre></div>

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

<h4>52.1 <span class="Heading">IsSubsemigroupFpSemigroup (Filter)</span></h4>

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

<h5>52.1-1 IsSubsemigroupFpSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsSubsemigroupFpSemigroup</code>( <var class="Arg">t</var> )</td><td class="tdright">( filter )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsSubmonoidFpMonoid</code>( <var class="Arg">t</var> )</td><td class="tdright">( filter )</td></tr></table></div>
<p>The first function returns true if <var class="Arg">t</var> is a finitely presented semigroup or a subsemigroup of a finitely presented semigroup. The second function does the equivalent thing for monoids. (Generally speaking, such a subsemigroup or monoid can be constructed with <code class="code">Semigroup(<var class="Arg">gens</var>)</code> or <code class="code">Monoid(<var class="Arg">gens</var>)</code>, where <var class="Arg">gens</var> is a list of elements of a finitely presented semigroup or monoid.)</p>

<p>A submonoid of a monoid has the same identity as the monoid.</p>

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

<h5>52.1-2 IsFpSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFpSemigroup</code>( <var class="Arg">s</var> )</td><td class="tdright">( filter )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFpMonoid</code>( <var class="Arg">m</var> )</td><td class="tdright">( filter )</td></tr></table></div>
<p>The first function is a synonym for <code class="code">IsSubsemigroupFpSemigroup(<var class="Arg">s</var>)</code> and <code class="code">IsWholeFamily(<var class="Arg">s</var>)</code> (this is because a subsemigroup of a finitely presented semigroup is not necessarily finitely presented).</p>

<p>Similarly, the second function is a synonym for <code class="code">IsSubmonoidFpMonoid(<var class="Arg">m</var>)</code> and <code class="code">IsWholeFamily(<var class="Arg">m</var>)</code>.</p>

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

<h5>52.1-3 IsElementOfFpSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsElementOfFpSemigroup</code>( <var class="Arg">elm</var> )</td><td class="tdright">( category )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsElementOfFpMonoid</code>( <var class="Arg">elm</var> )</td><td class="tdright">( category )</td></tr></table></div>
<p>returns true if <var class="Arg">elm</var> is an element of a finitely presented semigroup or monoid.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">f := FreeSemigroup( "a""b" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFpSemigroup( f );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">s := f / [ [ f.1^2, f.2^2 ] ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFpSemigroup( s );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">t := Semigroup( [ s.1^2 ] );</span>
<commutative semigroup with 1 generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsSubsemigroupFpSemigroup( t );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsSubsemigroupFpSemigroup( s );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsSubsemigroupFpSemigroup( f );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsElementOfFpSemigroup( t.1^3 );</span>
true
</pre></div>

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

<h5>52.1-4 FpGrpMonSmgOfFpGrpMonSmgElement</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FpGrpMonSmgOfFpGrpMonSmgElement</code>( <var class="Arg">elm</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>returns the finitely presented group, monoid or semigroup to which <var class="Arg">elm</var> belongs.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">s = FpGrpMonSmgOfFpGrpMonSmgElement( s.1 );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">s = FpGrpMonSmgOfFpGrpMonSmgElement( t.1 );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">f := FreeMonoid( 2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">m := f / [ [ f.1^2, f.2^2 ] ];</span>
<fp monoid on the generators [ m1, m2 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">m = FpGrpMonSmgOfFpGrpMonSmgElement( m.1 * m.2 );</span>
true
</pre></div>

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

<h4>52.2 <span class="Heading">Creating Finitely Presented Semigroups and Monoids</span></h4>

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

<h5><code>52.2-1 \/</code></h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \/</code>( <var class="Arg">F</var>, <var class="Arg">rels</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>creates a finitely presented semigroup or monoid given by the presentation <span class="SimpleMath">\(\langle \textit{gens} \mid \textit{rels} \rangle\)</span> where <var class="Arg">gens</var> are the generators of the free semigroup or free monoid <var class="Arg">F</var>, and the relations <var class="Arg">rels</var> are entered as pairs of words in the generators of the free semigroup or free monoid.</p>

<p>The same result is obtained with the infix operator <code class="code">/</code>, i.e. as <var class="Arg">F</var> <code class="code">/</code> <var class="Arg">rels</var>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">fs := FreeSemigroup( 3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">x := GeneratorsOfSemigroup( fs );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">s := fs / [ [ x[1] * x[2] * x[1], x[1] ], [ x[2]^4, x[1] ] ];</span>
<fp semigroup on the generators [ s1, s2, s3 ]>
</pre></div>

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

<h5>52.2-2 FactorFreeSemigroupByRelations</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FactorFreeSemigroupByRelations</code>( <var class="Arg">f</var>, <var class="Arg">rels</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">‣ FactorFreeMonoidByRelations</code>( <var class="Arg">f</var>, <var class="Arg">rels</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>for a free semigroup or free monoid <var class="Arg">f</var> and a list <var class="Arg">rels</var> of pairs of elements of <var class="Arg">f</var>. Returns the finitely presented semigroup or monoid which is the quotient of <var class="Arg">f</var> by the least congruence on <var class="Arg">f</vargenerated by the pairs in <var class="Arg">rels</var>.</p>

<p>Users should be aware that much of the code described in this chapter is in need of substantial revision. In particular, the two functions described here are <em>not</em> called by the operation <code class="code">\/</code> of the previous subsection, and so are liable to be removed in due course.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">fm := FreeMonoid( 3 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">y := GeneratorsOfMonoid( fm );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">m := FactorFreeMonoidByRelations( fm,</span>
<span class="GAPprompt">></span> <span class="GAPinput">          [ [ y[1] * y[2] * y[1], y[1] ],[ y[2]^4, y[1] ] ] );</span>
<fp monoid on the generators [ m1, m2, m3 ]>
</pre></div>

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

<h5>52.2-3 IsomorphismFpSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsomorphismFpSemigroup</code>( <var class="Arg">m</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsomorphismFpMonoid</code>( <var class="Arg">g</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>for a finitely presented monoid <var class="Arg">m</var> or a finitely presented group <var class="Arg">g</var>. Returns an isomorphism from <var class="Arg">m</var> or <var class="Arg">g</var> to a finitely presented semigroup or monoid.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">phis := IsomorphismFpSemigroup( m );</span>
MappingByFunction( <fp monoid on the generators
[ m1, m2, m3 ]>, <fp semigroup on the generators [ <identity ...>, m1, m2, m3
 ]>, function( x ) ... end, function( x ) ... end )
<span class="GAPprompt">gap></span> <span class="GAPinput">fg := FreeGroup( 2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">g := fg / [ fg.1^4, fg.2^5 ];</span>
<fp group on the generators [ f1, f2 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">phim := IsomorphismFpMonoid( g );</span>
MappingByFunction( <fp group on the generators
[ f1, f2 ]>, <fp monoid on the generators [ f1, f1^-1, f2, f2^-1
 ]>, function( x ) ... end, function( x ) ... end )
</pre></div>

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

<h4>52.3 <span class="Heading">Comparison of Elements of Finitely Presented Semigroups</span></h4>

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

<h5><code>52.3-1 \=</code></h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \=</code>( <var class="Arg">a</var>, <var class="Arg">b</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>Two elements <var class="Arg">a</var>, <var class="Arg">b</var> of a finitely presented semigroup are equal if they are equal in the semigroup. Nevertheless they may be represented as different words in the generators. Because of the fundamental problems mentioned in the introduction to this chapter such a test may take a very long time and cannot be guaranteed to finish (see <a href="chap52_mj.html#X87693BDC79DC6EBF"><span class="RefLink">52.5</span></a>).</p>

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

<h4>52.4 <span class="Heading">Preimages in the Free Semigroup or Monoid</span></h4>

<p>Elements of a finitely presented semigroup or monoid are not words, but are represented using a word from the free semigroup or free monoid as representative.</p>

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

<h5>52.4-1 UnderlyingElement</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ UnderlyingElement</code>( <var class="Arg">elm</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>for an element <var class="Arg">elm</var> of a finitely presented semigroup or monoid. Returns the word from the free semigroup or free monoid that is used as a representative for <var class="Arg">elm</var>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">genm := GeneratorsOfMonoid( m );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">e := genm[2]^4;</span>
m2^4
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWord( e );</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">ue := UnderlyingElement( e );</span>
m2^4
<span class="GAPprompt">gap></span> <span class="GAPinput">IsWord( ue );</span>
true
</pre></div>

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

<h5>52.4-2 ElementOfFpSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ElementOfFpSemigroup</code>( <var class="Arg">fam</var>, <var class="Arg">word</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">‣ ElementOfFpMonoid</code>( <var class="Arg">fam</var>, <var class="Arg">word</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>for a family <var class="Arg">fam</var> of elements of a finitely presented semigroup or monoid and a word <var class="Arg">word</var> in the free generators underlying this finitely presented semigroup or monoid. Returns the element of the finitely presented semigroup or monoid with the representative <var class="Arg">word</var> in the free semigroup or free monoid. These operations are inverse to <code class="code">UnderlyingElement</code>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">fam := FamilyObj( genm[1] );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">w := y[1]^3 * y[2]^4 * y[3]^5;</span>
m1^3*m2^4*m3^5
<span class="GAPprompt">gap></span> <span class="GAPinput">ew := ElementOfFpMonoid( fam, w );</span>
m1^3*m2^4*m3^5
<span class="GAPprompt">gap></span> <span class="GAPinput">ew in fm;</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">ew in m;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">w = UnderlyingElement( ew );</span>
true
</pre></div>

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

<h5>52.4-3 FreeSemigroupOfFpSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FreeSemigroupOfFpSemigroup</code>( <var class="Arg">s</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FreeMonoidOfFpMonoid</code>( <var class="Arg">m</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>returns the underlying free semigroup or free monoid for the finitely presented semigroup <var class="Arg">s</var> or monoid <var class="Arg">m</var>, i.e. the free semigroup or free monoid over which <var class="Arg">s</var> or <var class="Arg">m</var> is defined as a quotient. (This is the free semigroup or free monoid generated by the free generators provided by <code class="code">FreeGeneratorsOfFpSemigroup(<var class="Arg">s</var>)</code> or <code class="code">FreeGeneratorsOfFpMonoid(<var class="Arg">m</var>)</code>).</p>

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

<h5>52.4-4 FreeGeneratorsOfFpSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FreeGeneratorsOfFpSemigroup</code>( <var class="Arg">s</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FreeGeneratorsOfFpMonoid</code>( <var class="Arg">m</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>returns the underlying free generators corresponding to the generators of the finitely presented semigroup <var class="Arg">s</var> or monoid <var class="Arg">m</var>.</p>

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

<h5>52.4-5 RelationsOfFpSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RelationsOfFpSemigroup</code>( <var class="Arg">s</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RelationsOfFpMonoid</code>( <var class="Arg">m</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>returns the relations of the finitely presented semigroup <var class="Arg">s</var> or monoid <var class="Arg">m</var> as pairs of words in the free generators provided by <code class="code">FreeGeneratorsOfFpSemigroup(<var class="Arg">s</var>)</code> or <code class="code">FreeGeneratorsOfFpMonoid(<var class="Arg">m</var>)</code>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">fs = FreeSemigroupOfFpSemigroup( s );</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">FreeGeneratorsOfFpMonoid( m );</span>
[ m1, m2, m3 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">RelationsOfFpSemigroup( s );</span>
[ [ s1*s2*s1, s1 ], [ s2^4, s1 ] ]
</pre></div>

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

<h4>52.5 <span class="Heading">Rewriting Systems and the Knuth-Bendix Procedure</span></h4>

<p>If a finitely presented semigroup (or monoid) has a confluent rewriting system then it has a solvable word problem, that is, there is an algorithm to decide when two words in the free underlying semigroup represent the same element of the finitely presented semigroup. Indeed, once we have a confluent rewriting system, it is possible to successfully test that two words represent the same element in the semigroup, by reducing both words using the rewriting system rules. This is, at the moment, the method that <strong class="pkg">GAP</strong> uses to check equality in finitely presented semigroups and monoids.</p>

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

<h5>52.5-1 ReducedConfluentRewritingSystem</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ReducedConfluentRewritingSystem</code>( <var class="Arg">S</var>[, <var class="Arg">ordering</var>] )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>returns a reduced confluent rewriting system of the finitely presented semigroup or monoid <var class="Arg">S</var> with respect to the reduction ordering <var class="Arg">ordering</var> (see <a href="chap34_mj.html#X7E4AAA7382D42361"><span class="RefLink">34</span></a>).</p>

<p>The default for <var class="Arg">ordering</var> is the length plus lexicographic ordering on words, also called the shortlex ordering; for the definition see for example <a href="chapBib_mj.html#biBSims94">[Sim94]</a>.</p>

<p>Notice that this might not terminate. In particular, if the semigroup or monoid <var class="Arg">S</var> does not have a solvable word problem then it this will certainly never end. Also, in this case, the object returned is an immutable rewriting system, because once we have a confluent rewriting system for a finitely presented semigroup or monoid we do not want to allow it to change (as it was most probably very time consuming to get it in the first place). Furthermore, this is also an attribute storing object (see <a href="chap13_mj.html#X8698205F8648EB33"><span class="RefLink">13.4</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">f := FreeSemigroup( "a""b" );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">a := f.1;;  b := f.2;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">s := f / [ [ a*b*a, b ], [ b*a*b, a ] ];;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">rws := ReducedConfluentRewritingSystem( s );</span>
Rewriting System for Semigroup( [ a, b ] ) with rules
[ [ a*b*a, b ], [ b*a*b, a ], [ b*a^2, a^2*b ], [ b^2, a^2 ],
  [ a^5, a ], [ a^3*b, b*a ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">c := s.1;;  d := s.2;;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">e := (c*d^2)^3;</span>
(a*b^2)^3
<span class="GAPprompt">gap></span> <span class="GAPinput">## ReducedForm( rws, e );  gives an error!</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">w := UnderlyingElement( e );</span>
(a*b^2)^3
<span class="GAPprompt">gap></span> <span class="GAPinput">ReducedForm( rws, w );</span>
a
</pre></div>

<p>The creation of a reduced confluent rewriting system for a semigroup or for a monoid, in <strong class="pkg">GAP</strong>, uses the Knuth-Bendix procedure for strings, which manipulates a rewriting system of the semigroup or monoid and attempts to make it confluent, (see Chapter <a href="chap38_mj.html#X7CA8FCFD81AA1890"><span class="RefLink">38</span></a> and also Sims <a href="chapBib_mj.html#biBSims94">[Sim94]</a>). (Since the word problem for semigroups/monoids is not solvable in general, the Knuth-Bendix procedure cannot always terminate).</p>

<p>In order to apply this procedure we will build a rewriting system for the semigroup or monoid, which we will call a <em>Knuth-Bendix Rewriting System</em> (we need to define this because we need the rewriting system to store some information needed for the implementation of the Knuth-Bendix procedure).</p>

<p>Actually, Knuth-Bendix Rewriting Systems do not only serve this purpose. Indeed these are objects which are mutable and which can be manipulated (see <a href="chap38_mj.html#X7CA8FCFD81AA1890"><span class="RefLink">38</span></a>).</p>

<p>Note that the implemented version of the Knuth-Bendix procedure, in <strong class="pkg">GAP</strong> returns, if it terminates, a confluent rewriting system which is reduced. Also, a reduction ordering has to be specified when building a rewriting system. If none is specified, the shortlex ordering is assumed (note that the procedure may terminate with a certain ordering and not with another one).</p>

<p>On Unix systems it is possible to replace the built-in Knuth-Bendix by other routines, for example the package <strong class="pkg">kbmag</strong> offers such a possibility.</p>

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

<h5>52.5-2 KB_REW</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ KB_REW</code></td><td class="tdright">( global variable )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GAPKB_REW</code></td><td class="tdright">( global variable )</td></tr></table></div>
<p><code class="code">KB_REW</code> is a global record variable whose components contain functions used for Knuth-Bendix. By default <code class="code">KB_REW</code> is assigned to <code class="code">GAPKB_REW</code>, which contains the KB functions provided by the GAP library.</p>

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

<h5>52.5-3 <span class="Heading">KnuthBendixRewritingSystem</span></h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ KnuthBendixRewritingSystem</code>( <var class="Arg">s</var>, <var class="Arg">wordord</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">‣ KnuthBendixRewritingSystem</code>( <var class="Arg">m</var>, <var class="Arg">wordord</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>in the first form, for a semigroup <var class="Arg">s</var> and a reduction ordering for the underlying free semigroup, it returns the Knuth-Bendix rewriting system of the finitely presented semigroup <var class="Arg">s</var> using the reduction ordering <var class="Arg">wordord</var>. In the second form, for a monoid <var class="Arg">m</var> and a reduction ordering for the underlying free monoid, it returns the Knuth-Bendix rewriting system of the finitely presented monoid <var class="Arg">m</var> using the reduction ordering <var class="Arg">wordord</var>.</p>

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

<h5>52.5-4 SemigroupOfRewritingSystem</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SemigroupOfRewritingSystem</code>( <var class="Arg">rws</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MonoidOfRewritingSystem</code>( <var class="Arg">rws</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>returns the semigroup or monoid over which <var class="Arg">rws</var> is a rewriting system.</p>

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

<h5>52.5-5 FreeSemigroupOfRewritingSystem</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FreeSemigroupOfRewritingSystem</code>( <var class="Arg">rws</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FreeMonoidOfRewritingSystem</code>( <var class="Arg">rws</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>returns the free semigroup or monoid over which <var class="Arg">rws</var> is a rewriting system.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">f1 := FreeSemigroupOfRewritingSystem( rws );</span>
<free semigroup on the generators [ a, b ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">f1 = f;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">s1 := SemigroupOfRewritingSystem( rws );</span>
<fp semigroup on the generators [ a, b ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">s1 = s;</span>
true
</pre></div>

<p>As mentioned before, having a confluent rewriting system, one can decide whether two words represent the same element of a finitely presented semigroup (or finitely presented monoid).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">d^6 = c^2;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">ReducedForm( rws, UnderlyingElement( d^6 ) );</span>
a^2
<span class="GAPprompt">gap></span> <span class="GAPinput">ReducedForm( rws, UnderlyingElement( c^2 ) );</span>
a^2
</pre></div>

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

<h4>52.6 <span class="Heading">Todd-Coxeter Procedure</span></h4>

<p>This procedure gives a standard way of finding a transformation representation of a finitely presented semigroup. Usually one does not explicitly call this procedure but uses <code class="func">IsomorphismTransformationSemigroup</code> (<a href="chap53_mj.html#X78F29C817CF6827F"><span class="RefLink">53.7-5</span></a>).</p>

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

<h5>52.6-1 CosetTableOfFpSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CosetTableOfFpSemigroup</code>( <var class="Arg">r</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p><var class="Arg">r</var> is a right congruence of an fp-semigroup <var class="Arg">S</var>. This attribute is the coset table of FP semigroup <var class="Arg">S</var> on a right congruence <var class="Arg">r</var>. Given a right congruence <var class="Arg">r</var> we represent <var class="Arg">S</varas a set of transformations of the congruence classes of <var class="Arg">r</var>.</p>

<p>The images of the cosets under the generators are compiled in a list <var class="Arg">table</varsuch that <var class="Arg">table[i][s]</var> contains the image of coset <var class="Arg">s</var> under generator <var class="Arg">i</var>.</p>


<div class="chlinkprevnextbot"> <a href="chap0_mj.html">[Top of Book]</a>   <a href="chap0_mj.html#contents">[Contents]</a>    <a href="chap51_mj.html">[Previous Chapter]</a>    <a href="chap53_mj.html">[Next Chapter]</a>   </div>


<div class="chlinkbot"><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>

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

100%


¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.23Angebot  Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können  ¤

*Eine klare Vorstellung vom Zielzustand






Versionsinformation zu Columbo

Bemerkung:

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Anfrage:

Dauer der Verarbeitung:

Sekunden

sprechenden Kalenders