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


Quelle  chap7.html

  Sprache: HTML
 

 products/Sources/formale Sprachen/GAP/pkg/semigroups/doc/chap7.html


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

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

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>GAP (Semigroups) - Chapter 7: 
    Standard examples
  </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="chap7"  onload="jscontent()">


<div class="chlinktop"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chap8.html">8</a>  <a href="chap9.html">9</a>  <a href="chap10.html">10</a>  <a href="chap11.html">11</a>  <a href="chap12.html">12</a>  <a href="chap13.html">13</a>  <a href="chap14.html">14</a>  <a href="chap15.html">15</a>  <a href="chap16.html">16</a>  <a href="chap17.html">17</a>  <a href="chap18.html">18</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.html">Ind</a>  </div>

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

<p id="mathjaxlink" class="pcenter"><a href="chap7_mj.html">[MathJax on]</a></p>
<p><a id="X7C76D1DC7DAF03D3" name="X7C76D1DC7DAF03D3"></a></p>
<div class="ChapSects"><a href="chap7.html#X7C76D1DC7DAF03D3">7 <span class="Heading">
    Standard examples
  </span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap7.html#X7E42E8337A78B076">7.1 <span class="Heading">
      Transformation semigroups
    </span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X84C4C81380B0239D">7.1-1 CatalanMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85C1D4307D0F5FF7">7.1-2 EndomorphismsPartition</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X808A27F87E5AC598">7.1-3 PartialTransformationMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7894EE357D103806">7.1-4 SingularTransformationSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X80E80A0A83B57483">7.1-5 <span class="Heading">Semigroups of order-preserving transformations</span></a>
</span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X868955247F2AFAA5">7.1-6 EndomorphismMonoid</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap7.html#X862BA1C67AA1C77C">7.2 <span class="Heading">
      Semigroups of partial permutations
    </span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X78FBE6DD7BCA30C1">7.2-1 MunnSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82D9619B7845CAEB">7.2-2 RookMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85D841AE83DF101C">7.2-3 <span class="Heading">Inverse monoids of order-preserving partial permutations</span></a>
</span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap7.html#X876C963F830719E2">7.3 <span class="Heading">
      Semigroups of bipartitions
    </span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E4B61FF7CCFD74A">7.3-1 PartitionMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X79D33B2E7BA3073A">7.3-2 BrauerMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8378FC8B840B9706">7.3-3 JonesMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8458B0F7874484CE">7.3-4 PartialJonesMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7DB8CB067CBE1254">7.3-5 AnnularJonesMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8375152F7AB52B7B">7.3-6 MotzkinMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X83C7587C81B985BA">7.3-7 DualSymmetricInverseSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8301C61384168D6F">7.3-8 UniformBlockBijectionMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8444092A7967A029">7.3-9 PlanarPartitionMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7F208DC584C0B9D1">7.3-10 ModularPartitionMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7C82B25F8441928E">7.3-11 ApsisMonoid</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap7.html#X874C945E7C61A969">7.4 <span class="Heading">
      Standard PBR semigroups
    </span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7DBB30AA83663CE8">7.4-1 FullPBRMonoid</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap7.html#X857DBF537A9A9976">7.5 <span class="Heading">
      Semigroups of matrices over a finite field
    </span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7D4B473A7D7735E3">7.5-1 FullMatrixMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X785924807B60F187">7.5-2 SpecialLinearMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X860B2A4382CA8F87">7.5-3 IsFullMatrixMonoid</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap7.html#X85BACB7F81660ECC">7.6 <span class="Heading">
      Semigroups of boolean matrices
    </span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B20103D84E010EF">7.6-1 FullBooleanMatMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A43263981F2F2AF">7.6-2 RegularBooleanMatMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X78DF50747A28098C">7.6-3 ReflexiveBooleanMatMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X79EF0EA68782CFCA">7.6-4 HallMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7F083600787C78FF">7.6-5 GossipMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X81BBCF2E84239521">7.6-6 TriangularBooleanMatMonoid</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap7.html#X7F3D0AEE79AA8C98">7.7 <span class="Heading">
      Semigroups of matrices over a semiring
    </span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X81E937B6852A9C69">7.7-1 FullTropicalMaxPlusMonoid</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85EDC03180768931">7.7-2 FullTropicalMinPlusMonoid</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap7.html#X7ED2F2577CD6B578">7.8 <span class="Heading">
      Examples in various representations
    </span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X82B07E907B3A55F0">7.8-1 TrivialSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8411EBD97A220921">7.8-2 MonogenicSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E4DFDE27BF8B8F7">7.8-3 RectangularBand</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7982E0667ECEB265">7.8-4 FreeSemilattice</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X801FC1D97D832A6F">7.8-5 ZeroSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8672CFA47CA620B2">7.8-6 LeftZeroSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7E2B20C77D47F7FB">7.8-7 BrandtSemigroup</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap7.html#X7BB29A6779E8066A">7.9 <span class="Heading">
      Free bands
    </span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B2A65F382DB36EC">7.9-1 FreeBand</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7F5658DC7E56C4A6">7.9-2 IsFreeBandCategory</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B1CD5FC7E034B88">7.9-3 IsFreeBand</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7DECF69087BB3B16">7.9-4 IsFreeBandElement</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X842839C87DAAA43C">7.9-5 IsFreeBandElementCollection</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7AEF4CD1857E7DCC">7.9-6 IsFreeBandSubsemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X808CAEC17BF271D1">7.9-7 ContentOfFreeBandElement</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7CD9426180587CA4">7.9-8 EqualInFreeBand</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X85DC5D50875E55D6">7.9-9 GreensDClassOfElement</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7AD6F77E7D95C996">7.9-10 <span class="Heading">Operators</span></a>
</span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap7.html#X850B10D783053100">7.10 <span class="Heading">
      Graph inverse semigroups
    </span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A9EEFD386D6F630">7.10-1 GraphInverseSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8187F0FF784A82CD">7.10-2 Range</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7DEE927C83D4DFDD">7.10-3 IsVertex</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7BFDF88B799B05A0">7.10-4 IsGraphInverseSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7BE287A385A058BC">7.10-5 GraphOfGraphInverseSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X870128E4845D6ABD">7.10-6 IsGraphInverseSemigroupElementCollection</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7BC6D5107ED09DBA">7.10-7 IsGraphInverseSubsemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7DF1ACC27CC998EB">7.10-8 VerticesOfGraphInverseSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X87500BC782212D4A">7.10-9 IndexOfVertexOfGraphInverseSemigroup</a></span>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap7.html#X7E51292C8755DCF2">7.11 <span class="Heading">
      Free inverse semigroups
    </span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7F3F9DED8003CBD0">7.11-1 FreeInverseSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7CE4CFD886220179">7.11-2 IsFreeInverseSemigroupCategory</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7B91643B827DA6DB">7.11-3 IsFreeInverseSemigroup</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7999FE0286283CC2">7.11-4 IsFreeInverseSemigroupElement</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X813A291779726739">7.11-5 IsFreeInverseSemigroupElementCollection</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7DB7DCEC7E0FE9A3">7.11-6 CanonicalForm</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X87BB5D047EB7C2BF">7.11-7 MinimalWord</a></span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X8073A2387A42B52D">7.11-8 <span class="Heading">Displaying free inverse semigroup elements </span></a>
</span>
<span class="ContSS"><br /><span class="nocss">  </span><a href="chap7.html#X7A55FD9A7DF21C60">7.11-9 <span class="Heading">Operators for free inverse semigroup elements
      </span></a>
</span>
</div></div>
</div>

<h3>7 <span class="Heading">
    Standard examples
  </span></h3>

<p>In this chapter we describe some standard families of examples of semigroups and monoids which are available in the <strong class="pkg">Semigroups</strong> package.</p>

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

<h4>7.1 <span class="Heading">
      Transformation semigroups
    </span></h4>

<p>In this section, we describe the operations in <strong class="pkg">Semigroups</strong> that can be used to create transformation semigroups belonging to several standard classes of example. See <a href="../../../doc/ref/chap53_mj.html#X860026B880BCB2A5"><span class="RefLink">Reference: Transformations</span></a> for more information about transformations.</p>

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

<h5>7.1-1 CatalanMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CatalanMonoid</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A transformation monoid.</p>

<p>If <var class="Arg">n</var> is a positive integer, then this operation returns the Catalan monoid of degree <var class="Arg">n</var>. The <em>Catalan monoid</em> is the semigroup of the order-preserving and order-decreasing transformations of <code class="code">[1 .. n]</code> with the usual ordering.</p>

<p>The Catalan monoid is generated by the <span class="SimpleMath"><var class="Arg">n - 1</var></span> transformations <span class="SimpleMath">f_i</span>:</p>

<p class="pcenter">
          \left(
          \begin{array}{cccccccccc}
          1&2&3&\cdots& i &i + 1& i + 2 & \cdots & n\\
          1&2&3&\cdots& i &i    & i + 2 & \cdots & n
          \end{array}\right), \qquad
        </p>

<p>where <span class="SimpleMath">i = 1, ..., n - 1</span> and has size equal to the <span class="SimpleMath">n</span>th Catalan number.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := CatalanMonoid(6);</span>
<transformation monoid of degree 6 with 5 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
132</pre></div>

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

<h5>7.1-2 EndomorphismsPartition</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ EndomorphismsPartition</code>( <var class="Arg">list</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A transformation monoid.</p>

<p>If <var class="Arg">list</var> is a list of positive integers, then <code class="code">EndomorphismsPartition</code> returns a monoid of endomorphisms preserving a partition of <code class="code">[1 .. Sum(<var class="Arg">list</var>)]</code> with a part of length <code class="code"><var class="Arg">list</var>[i]</code> for every <code class="code">i</code>. For example, if <code class="code"><var class="Arg">list</var> = [1, 2, 3]</code>, then <code class="code">EndomorphismsPartition</code> returns the monoid of endomorphisms of the partition <code class="code">[[1], [2, 3], [4, 5, 6]]</code>.</p>

<p>If <code class="code">f</code> is a transformation of <code class="code">[1 .. n]</code>, then it is an <strong class="button">endomorphism</strong> of a partition <code class="code">P</code> on <code class="code">[1 .. n]</code> if <code class="code">(i, j)</code> in <code class="code">P</code> implies that <code class="code">(i ^ f, j ^ f)</code> is in <code class="code">P</code>.</p>

<p><code class="code">EndomorphismsPartition</code> returns a monoid with a minimal size generating set, as described in <a href="chapBib.html#biBAraujo2015aa">[ABMS15]</a>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := EndomorphismsPartition([3, 3, 3]);</span>
<transformation semigroup of degree 9 with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
531441</pre></div>

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

<h5>7.1-3 PartialTransformationMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PartialTransformationMonoid</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A transformation monoid.</p>

<p>If <var class="Arg">n</var> is a positive integer, then this function returns a semigroup of transformations on <code class="code"><var class="Arg">n</var> + 1</code> points which is isomorphic to the semigroup consisting of all partial transformation on <var class="Arg">n</var> points. This monoid has <code class="code">(<var class="Arg">n</var> + 1) ^ <var class="Arg">n</var></code> elements.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := PartialTransformationMonoid(5);</span>
<regular transformation monoid of degree 6 with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
7776</pre></div>

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

<h5>7.1-4 SingularTransformationSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SingularTransformationSemigroup</code>( <var class="Arg">n</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">‣ SingularTransformationMonoid</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The semigroup of non-invertible transformations.</p>

<p>If <var class="Arg">n</var> is a integer greater than 1, then this function returns the semigroup of non-invertible transformations, which is generated by the <code class="code"><var class="Arg">n</var>(<var class="Arg">n</var> - 1)</code> idempotents of degree <var class="Arg">n</var> and rank <code class="code"><var class="Arg">n</var> - 1</code> and has <span class="SimpleMath">n ^ n - n!</span> elements.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := SingularTransformationSemigroup(4);</span>
<regular transformation semigroup ideal of degree 4 with 1 generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
232</pre></div>

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

<h5>7.1-5 <span class="Heading">Semigroups of order-preserving transformations</span></h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ OrderEndomorphisms</code>( <var class="Arg">n</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">‣ SingularOrderEndomorphisms</code>( <var class="Arg">n</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">‣ OrderAntiEndomorphisms</code>( <var class="Arg">n</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">‣ PartialOrderEndomorphisms</code>( <var class="Arg">n</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">‣ PartialOrderAntiEndomorphisms</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A semigroup of transformations related to a linear order.</p>


<dl>
<dt><strong class="Mark"><code class="code">OrderEndomorphisms(<var class="Arg">n</var>)</code></strong></dt>
<dd><p><code class="code">OrderEndomorphisms(<var class="Arg">n</var>)</code> returns the monoid of transformations that preserve the usual order on <span class="SimpleMath">{1, 2, ..., n}</span>, where <var class="Arg">n</var> is a positive integer. <code class="code">OrderEndomorphisms(<var class="Arg">n</var>)</code> is generated by the <span class="SimpleMath"><var class="Arg">n + 1</var></span> transformations:</p>

<p class="pcenter">
              \left(
              \begin{array}{ccccccccc}
              1&2&3&\cdots&n-1& n\\
              1&1&2&\cdots&n-2&n-1
              \end{array}\right), \qquad
              \left(
              \begin{array}{ccccccccc}
              1&2&\cdots&i-1& i& i+1&i+2&\cdots
              &n\\
              1&2&\cdots&i-1& i+1&i+1&i+2&\cdots
              &n\\
              \end{array}\right)
            </p>

<p>where <span class="SimpleMath">i=0,...,n-1</span>, and has <span class="SimpleMath">2n-1choose n-1</span> elements.</p>

</dd>
<dt><strong class="Mark"><code class="code">SingularOrderEndomorphisms(<var class="Arg">n</var>)</code></strong></dt>
<dd><p><code class="code">SingularOrderEndomorphisms(<var class="Arg">n</var>)</code> returns the ideal of <code class="code">OrderEndomorphisms(<var class="Arg">n</var>)</code> consisting of the non-invertible elements, when <var class="Arg">n</var> is at least <code class="code">2</code>. The only invertible element in <code class="code">OrderEndomorphisms(<var class="Arg">n</var>)</code> is the identity transformation. Therefore <code class="code">SingularOrderEndomorphisms(<var class="Arg">n</var>)</code> has <span class="SimpleMath">2n-1choose n-1 - 1</span> elements.</p>

</dd>
<dt><strong class="Mark"><code class="code">OrderAntiEndomorphisms(<var class="Arg">n</var>)</code></strong></dt>
<dd><p><code class="code">OrderAntiEndomorphisms(<var class="Arg">n</var>)</code> returns the monoid of transformations that preserve or reverse the usual order on <span class="SimpleMath">{1, 2, ..., n}</span>, where <var class="Arg">n</var> is a positive integer. <code class="code">OrderAntiEndomorphisms(<var class="Arg">n</var>)</code> is generated by the generators of <code class="code">OrderEndomorphisms(<var class="Arg">n</var>)</code> along with the bijective transformation that reverses the order on <span class="SimpleMath">{1, 2, ..., n}</span>. The monoid <code class="code">OrderAntiEndomorphisms(<var class="Arg">n</var>)</code> has <span class="SimpleMath">2n-1choose n-1 - n</span> elements.</p>

</dd>
<dt><strong class="Mark"><code class="code">PartialOrderEndomorphisms(<var class="Arg">n</var>)</code></strong></dt>
<dd><p><code class="code">PartialOrderEndomorphisms(<var class="Arg">n</var>)</code> returns a monoid of transformations on <code class="code"><var class="Arg">n</var> + 1</code> points that is isomorphic to the monoid consisting of all partial transformations that preserve the usual order on <span class="SimpleMath">{1, 2, ..., n}</span>.</p>

</dd>
<dt><strong class="Mark"><code class="code">PartialOrderAntiEndomorphisms(<var class="Arg">n</var>)</code></strong></dt>
<dd><p><code class="code">PartialAntiOrderEndomorphisms(<var class="Arg">n</var>)</code> returns a monoid of transformations on <code class="code"><var class="Arg">n</var> + 1</code> points that is isomorphic to the monoid consisting of all partial transformations that preserve or reverse the usual order on <span class="SimpleMath">{1, 2, ..., n}</span>.</p>

</dd>
</dl>

<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := OrderEndomorphisms(5);</span>
<regular transformation monoid of degree 5 with 5 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsIdempotentGenerated(S);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S) = Binomial(2 * 5 - 1, 5 - 1);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Difference(S, SingularOrderEndomorphisms(5));</span>
[ IdentityTransformation ]
<span class="GAPprompt">gap></span> <span class="GAPinput">SingularOrderEndomorphisms(10);</span>
<regular transformation semigroup ideal of degree 10 with 1 generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">T := OrderAntiEndomorphisms(4);</span>
<regular transformation monoid of degree 4 with 5 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Transformation([4, 2, 2, 1]) in T;</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">U := PartialOrderEndomorphisms(6);</span>
<regular transformation monoid of degree 7 with 12 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">V := PartialOrderAntiEndomorphisms(6);</span>
<regular transformation monoid of degree 7 with 13 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsSubsemigroup(V, U);</span>
true</pre></div>

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

<h5>7.1-6 EndomorphismMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ EndomorphismMonoid</code>( <var class="Arg">digraph</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">‣ EndomorphismMonoid</code>( <var class="Arg">digraph</var>, <var class="Arg">colors</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A monoid.</p>

<p>An endomorphism of <var class="Arg">digraph</var> is a homomorphism <code class="func">DigraphHomomorphism</code> (<a href="https://gap-packages.github.io/io/doc/chap7_mj.html#X85E9B019877AD7FE"><span class="RefLink">Digraphs: DigraphHomomorphism</span></a>) from <var class="Arg">digraph</var> back to itself.</p>

<p><code class="code">EndomorphismMonoid</code>, called with a single argument, returns the monoid of all endomorphisms of <var class="Arg">digraph</var>.</p>

<p>If the <var class="Arg">colors</var> argument is specified, then it will return the monoid of endomorphisms which respect the given colouring. The colouring <var class="Arg">colors</var> can be in one of two forms:</p>


<ul>
<li><p>A list of positive integers of size the number of vertices of <var class="Arg">digraph</var>, where <var class="Arg">colors</var><code class="code">[i]</code> is the colour of vertex <code class="code">i</code>.</p>

</li>
<li><p>A list of lists, such that <var class="Arg">colors</var><code class="code">[i]</code> is a list of all vertices with colour <code class="code">i</code>.</p>

</li>
</ul>
<p>See also <code class="func">GeneratorsOfEndomorphismMonoid</code> (<a href="https://gap-packages.github.io/io/doc/chap7_mj.html#X7E93B268823F6478"><span class="RefLink">Digraphs: GeneratorsOfEndomorphismMonoid</span></a>). Note that the performance of <code class="code">EndomorphismMonoid</code> may differ from that of <code class="func">GeneratorsOfEndomorphismMonoid</code> (<a href="https://gap-packages.github.io/io/doc/chap7_mj.html#X7E93B268823F6478"><span class="RefLink">Digraphs: GeneratorsOfEndomorphismMonoid</span></a>) since the former incrementally adds newly discovered endomorphisms to the monoid using <code class="func">ClosureMonoid</code> (<a href="chap6.html#X7BE36790862AE26F"><span class="RefLink">6.4-1</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph(List([1 .. 3], x -> [1 .. 3]));;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">EndomorphismMonoid(gr);</span>
<transformation monoid of degree 3 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := CompleteDigraph(3);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">EndomorphismMonoid(gr);</span>
<transformation group of size 6, degree 3 with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := EndomorphismMonoid(gr, [1, 2, 2]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsGroupAsSemigroup(S);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
2
<span class="GAPprompt">gap></span> <span class="GAPinput">S := EndomorphismMonoid(gr, [[1], [2, 3]]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := EndomorphismMonoid(gr, [1, 2, 2]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsGroupAsSemigroup(S);</span>
true</pre></div>

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

<h4>7.2 <span class="Heading">
      Semigroups of partial permutations
    </span></h4>

<p>In this section, we describe the operations in <strong class="pkg">Semigroups</strong> that can be used to create semigroups of partial permutations belonging to several standard classes of example. See <a href="../../../doc/ref/chap54_mj.html#X7D6495F77B8A77BD"><span class="RefLink">Reference: Partial permutations</span></a> for more information about partial permutations.</p>

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

<h5>7.2-1 MunnSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MunnSemigroup</code>( <var class="Arg">S</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The Munn semigroup of a semilattice.</p>

<p>If <var class="Arg">S</var> is a semilattice, then <code class="code">MunnSemigroup</code> returns the inverse semigroup of partial permutations of isomorphisms of principal ideals of <var class="Arg">S</var>; called the <em>Munn semigroup</em> of <var class="Arg">S</var>.</p>

<p>This function was written jointly by J. D. Mitchell, Yann Péresse (St Andrews), Yanhui Wang (York).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := InverseSemigroup([</span>
<span class="GAPprompt">></span> <span class="GAPinput">PartialPerm([1, 2, 3, 4, 5, 6, 7, 10], [4, 6, 7, 3, 8, 2, 9, 5]),</span>
<span class="GAPprompt">></span> <span class="GAPinput">PartialPerm([1, 2, 7, 9], [5, 6, 4, 3])]);</span>
<inverse partial perm semigroup of rank 10 with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">T := IdempotentGeneratedSubsemigroup(S);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">M := MunnSemigroup(T);</span>
<inverse partial perm semigroup of rank 60 with 7 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">NrIdempotents(M);</span>
60
<span class="GAPprompt">gap></span> <span class="GAPinput">NrIdempotents(S);</span>
60</pre></div>

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

<h5>7.2-2 RookMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RookMonoid</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: An inverse monoid of partial permutations.</p>

<p><code class="code">RookMonoid</code> is a synonym for <code class="func">SymmetricInverseMonoid</code> (<a href="../../../doc/ref/chap54_mj.html#X81D271B380995F8A"><span class="RefLink">Reference: SymmetricInverseMonoid</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := RookMonoid(4);</span>
<symmetric inverse monoid of degree 4>
<span class="GAPprompt">gap></span> <span class="GAPinput">S = SymmetricInverseMonoid(4);</span>
true</pre></div>

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

<h5>7.2-3 <span class="Heading">Inverse monoids of order-preserving partial permutations</span></h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ POI</code>( <var class="Arg">n</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">‣ PODI</code>( <var class="Arg">n</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">‣ POPI</code>( <var class="Arg">n</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">‣ PORI</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: An inverse monoid of partial permutations related to a linear order.</p>


<dl>
<dt><strong class="Mark"><code class="code">POI(<var class="Arg">n</var>)</code></strong></dt>
<dd><p><code class="code">POI(<var class="Arg">n</var>)</code> returns the inverse monoid of partial permutations that preserve the usual order on <span class="SimpleMath">{1, 2, ..., n}</span>, where <var class="Arg">n</var> is a positive integer. <code class="code">POI(<var class="Arg">n</var>)</code> is generated by the <span class="SimpleMath"><var class="Arg">n</var></span> partial permutations:</p>

<p class="pcenter">
        \left(
        \begin{array}{ccccc}
        1&2&3&\cdots&n\\
        -&1&2&\cdots&n-1
        \end{array}\right), \qquad
        \left(
        \begin{array}{ccccccccc}
        1&2&\cdots&i-1& i& i+1&i+2&\cdots
        &n\\
        1&2&\cdots&i-1& i+1&-&i+2&\cdots&n\\
        \end{array}\right)
      </p>

<p>where <span class="SimpleMath">i = 1, ..., n - 1</span>, and has <span class="SimpleMath">2nchoose n</span> elements.</p>

</dd>
<dt><strong class="Mark"><code class="code">PODI(<var class="Arg">n</var>)</code></strong></dt>
<dd><p><code class="code">PODI(<var class="Arg">n</var>)</code> returns the inverse monoid of partial permutations that preserve or reverse the usual order on <span class="SimpleMath">{1, 2, ..., n}</span>, where <var class="Arg">n</var> is a positive integer. <code class="code">PODI(<var class="Arg">n</var>)</code> is generated by the generators of <code class="code">POI(<var class="Arg">n</var>)</code>, along with the permutation that reverses the usual order on <span class="SimpleMath">{1, 2, ..., n}</span>. <code class="code">PODI(<var class="Arg">n</var>)</code> has <span class="SimpleMath">2nchoose n - n^2 - 1</span> elements.</p>

</dd>
<dt><strong class="Mark"><code class="code">POPI(<var class="Arg">n</var>)</code></strong></dt>
<dd><p><code class="code">POPI(<var class="Arg">n</var>)</code> returns the inverse monoid of partial permutations that preserve the orientation of <span class="SimpleMath">{1,2,..., n}</span>, where <span class="SimpleMath">n</span> is a positive integer. <code class="code">POPI(<var class="Arg">n</var>)</code> is generated by the partial permutations:</p>

<p class="pcenter">
      \left(
      \begin{array}{ccccc}
1&2&\cdots&n-1&n\\
2&3&\cdots&n&1
\end{array}\right),\qquad
\left(
\begin{array}{cccccc}
1&2&\cdots&n-2&n-1&n\\
1&2&\cdots&n-2&n&-
\end{array}\right),
      </p>

<p>and has <span class="SimpleMath">1+fracn22nchoose n</span> elements.</p>

</dd>
<dt><strong class="Mark"><code class="code">PORI(<var class="Arg">n</var>)</code></strong></dt>
<dd><p><code class="code">PORI(<var class="Arg">n</var>)</code> returns the inverse monoid of partial permutations that preserve or reverse the orientation of <span class="SimpleMath">{1, 2, ..., n}</span>, where <span class="SimpleMath">n</span> is a positive integer. <code class="code">PORI(<var class="Arg">n</var>)</code> is generated by the generators of <code class="code">POPI(<var class="Arg">n</var>)</code>, along with the permutation that reverses the usual order on <span class="SimpleMath">{1, 2, ..., n}</span>. <code class="code">PORI(<var class="Arg">n</var>)</code> has <span class="SimpleMath">fracn22nchoose n - n(n + 1)</span> elements.</p>

</dd>
</dl>

<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := PORI(10);</span>
<inverse partial perm monoid of rank 10 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := POPI(10);</span>
<inverse partial perm monoid of rank 10 with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S) = 1 + 5 * Binomial(20, 10);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">S := PODI(10);</span>
<inverse partial perm monoid of rank 10 with 11 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := POI(10);</span>
<inverse partial perm monoid of rank 10 with 10 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S) = Binomial(20, 10);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsSubsemigroup(PORI(10), PODI(10))</span>
<span class="GAPprompt">></span> <span class="GAPinput">and IsSubsemigroup(PORI(10), POPI(10))</span>
<span class="GAPprompt">></span> <span class="GAPinput">and IsSubsemigroup(PODI(10), POI(10))</span>
<span class="GAPprompt">></span> <span class="GAPinput">and IsSubsemigroup(POPI(10), POI(10));</span>
true</pre></div>

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

<h4>7.3 <span class="Heading">
      Semigroups of bipartitions
    </span></h4>

<p>In this section, we describe the operations in <strong class="pkg">Semigroups</strong> that can be used to create bipartition semigroups belonging to several standard classes of example. See Chapter <a href="chap3.html#X7C18DB427C9C0917"><span class="RefLink">3</span></a> for more information about bipartitions.</p>

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

<h5>7.3-1 PartitionMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PartitionMonoid</code>( <var class="Arg">n</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">‣ RookPartitionMonoid</code>( <var class="Arg">n</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">‣ SingularPartitionMonoid</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A bipartition monoid.</p>

<p>If <var class="Arg">n</var> is a non-negative integer, then this operation returns the partition monoid of degree <var class="Arg">n</var>. The <em>partition monoid of degree <var class="Arg">n</var></em> is the monoid consisting of all the bipartitions of degree <var class="Arg">n</var>.</p>

<p><code class="code">SingularPartitionMonoid</code> returns the ideal of the partition monoid consisting of the non-invertible elements (i.e. those not in the group of units), when <var class="Arg">n</var> is positive.</p>

<p>If <var class="Arg">n</var> is positive, then <code class="code">RookPartitionMonoid</code> returns submonoid of the partition monoid of degree <code class="code"><var class="Arg">n</var> + 1</code> consisting of those bipartitions with <code class="code"><var class="Arg">n</var> + 1</code> and <code class="code">-<var class="Arg">n</var> - 1</code> in the same block; see <a href="chapBib.html#biBHalverson2005PartitionAlgebras">[HR05]</a>, <a href="chapBib.html#biBGrood2006aa">[Gro06]</a>, and <a href="chapBib.html#biBEast2019aa">[Eas19]</a>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := PartitionMonoid(4);</span>
<regular bipartition *-monoid of size 4140, degree 4 with 4
 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
4140
<span class="GAPprompt">gap></span> <span class="GAPinput">T := SingularPartitionMonoid(4);</span>
<regular bipartition *-semigroup ideal of degree 4 with 1 generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S) - Size(T) = Factorial(4);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">S := RookPartitionMonoid(4);</span>
<regular bipartition *-monoid of degree 5 with 5 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
21147</pre></div>

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

<h5>7.3-2 BrauerMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BrauerMonoid</code>( <var class="Arg">n</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">‣ PartialBrauerMonoid</code>( <var class="Arg">n</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">‣ SingularBrauerMonoid</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A bipartition monoid.</p>

<p>If <var class="Arg">n</var> is a non-negative integer, then this operation returns the Brauer monoid of degree <var class="Arg">n</var>. The <em>Brauer monoid</em> is the submonoid of the partition monoid consisting of those bipartitions where the size of every block is 2.</p>

<p><code class="code">PartialBrauerMonoid</code> returns the partial Brauer monoid, which is the submonoid of the partition monoid consisting of those bipartitions where the size of every block is <em>at most</em> 2. The partial Brauer monoid contains the Brauer monoid as a submonoid.</p>

<p><code class="code">SingularBrauerMonoid</code> returns the ideal of the Brauer monoid consisting of the non-invertible elements (i.e. those not in the group of units), when <var class="Arg">n</var> is at least 2.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := BrauerMonoid(4);</span>
<regular bipartition *-monoid of degree 4 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsSubsemigroup(S, JonesMonoid(4));</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
105
<span class="GAPprompt">gap></span> <span class="GAPinput">SingularBrauerMonoid(8);</span>
<regular bipartition *-semigroup ideal of degree 8 with 1 generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := PartialBrauerMonoid(3);</span>
<regular bipartition *-monoid of degree 3 with 8 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsSubsemigroup(S, BrauerMonoid(3));</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
76</pre></div>

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

<h5>7.3-3 JonesMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ JonesMonoid</code>( <var class="Arg">n</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">‣ TemperleyLiebMonoid</code>( <var class="Arg">n</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">‣ SingularJonesMonoid</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A bipartition monoid.</p>

<p>If <var class="Arg">n</var> is a non-negative integer, then this operation returns the Jones monoid of degree <var class="Arg">n</var>. The <em>Jones monoid</em> is the subsemigroup of the Brauer monoid consisting of those bipartitions that are planar; see <code class="func">PlanarPartitionMonoid</code> (<a href="chap7.html#X8444092A7967A029"><span class="RefLink">7.3-9</span></a>). The Jones monoid is sometimes referred to as the <strong class="button">Temperley-Lieb monoid</strong>.</p>

<p><code class="code">SingularJonesMonoid</code> returns the ideal of the Jones monoid consisting of the non-invertible elements (i.e. those not in the group of units), when <var class="Arg">n</var> is at least 2.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := JonesMonoid(4);</span>
<regular bipartition *-monoid of degree 4 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">S = TemperleyLiebMonoid(4);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">SingularJonesMonoid(8);</span>
<regular bipartition *-semigroup ideal of degree 8 with 1 generator></pre></div>

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

<h5>7.3-4 PartialJonesMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PartialJonesMonoid</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A bipartition monoid.</p>

<p>If <var class="Arg">n</var> is a non-negative integer, then <code class="code">PartialJonesMonoid</code> returns the partial Jones monoid of degree <var class="Arg">n</var>. The <em>partial Jones monoid</em> is a subsemigroup of the partial Brauer monoid. An element of the partial Brauer monoid is contained in the partial Jones monoid if the partition that it defines is finer than the partition defined by some element of the Jones monoid. In other words, an element of the partial Jones monoid can be formed from some element <code class="code">x</code> of the Jones monoid by replacing some blocks <code class="code">[a, b]</code> of <code class="code">x</code> by singleton blocks <code class="code">[a], [b]</code>.</p>

<p>Note that, in general, the partial Jones monoid of degree <var class="Arg">n</var> is strictly contained in the Motzkin monoid of the same degree.</p>

<p>See <code class="func">PartialBrauerMonoid</code> (<a href="chap7.html#X79D33B2E7BA3073A"><span class="RefLink">7.3-2</span></a>), <code class="func">JonesMonoid</code> (<a href="chap7.html#X8378FC8B840B9706"><span class="RefLink">7.3-3</span></a>), and <code class="func">MotzkinMonoid</code> (<a href="chap7.html#X8375152F7AB52B7B"><span class="RefLink">7.3-6</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := PartialJonesMonoid(4);</span>
<regular bipartition *-monoid of degree 4 with 7 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">T := JonesMonoid(4);</span>
<regular bipartition *-monoid of degree 4 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">U := MotzkinMonoid(4);</span>
<regular bipartition *-monoid of degree 4 with 8 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsSubsemigroup(U, S);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsSubsemigroup(S, T);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(U);</span>
323
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
143
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(T);</span>
14</pre></div>

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

<h5>7.3-5 AnnularJonesMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AnnularJonesMonoid</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A bipartition monoid.</p>

<p>If <var class="Arg">n</var> is a non-negative integer, then <code class="code">AnnularJonesMonoid</code> returns the annular Jones monoid of degree <var class="Arg">n</var>. The <em>annular Jones monoid</em> is the subsemigroup of the partition monoid consisting of all annular bipartitions whose blocks have size 2 (annular bipartitions are defined in Chapter <a href="chap3.html#X7C18DB427C9C0917"><span class="RefLink">3</span></a>). See <code class="func">BrauerMonoid</code> (<a href="chap7.html#X79D33B2E7BA3073A"><span class="RefLink">7.3-2</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := AnnularJonesMonoid(4);</span>
<regular bipartition *-monoid of degree 4 with 2 generators></pre></div>

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

<h5>7.3-6 MotzkinMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MotzkinMonoid</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A bipartition monoid.</p>

<p>If <var class="Arg">n</var> is a non-negative integer, then this operation returns the Motzkin monoid of degree <var class="Arg">n</var>. The <em>Motzkin monoid</em> is the subsemigroup of the partial Brauer monoid consisting of those bipartitions that are planar (planar bipartitions are defined in Chapter <a href="chap3.html#X7C18DB427C9C0917"><span class="RefLink">3</span></a>).</p>

<p>Note that the Motzkin monoid of degree <var class="Arg">n</var> contains the partial Jones monoid of degree <var class="Arg">n</var>, but in general, these monoids are not equal; see <code class="func">PartialJonesMonoid</code> (<a href="chap7.html#X8458B0F7874484CE"><span class="RefLink">7.3-4</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := MotzkinMonoid(4);</span>
<regular bipartition *-monoid of degree 4 with 8 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">T := PartialJonesMonoid(4);</span>
<regular bipartition *-monoid of degree 4 with 7 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsSubsemigroup(S, T);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
323
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(T);</span>
143</pre></div>

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

<h5>7.3-7 DualSymmetricInverseSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DualSymmetricInverseSemigroup</code>( <var class="Arg">n</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">‣ DualSymmetricInverseMonoid</code>( <var class="Arg">n</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">‣ SingularDualSymmetricInverseMonoid</code>( <var class="Arg">n</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">‣ PartialDualSymmetricInverseMonoid</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: An inverse bipartition monoid.</p>

<p>If <var class="Arg">n</var> is a positive integer, then the operations <code class="code">DualSymmetricInverseSemigroup</code> and <code class="code">DualSymmetricInverseMonoid</code> return the dual symmetric inverse monoid of degree <var class="Arg">n</var>, which is the subsemigroup of the partition monoid consisting of the block bijections of degree <var class="Arg">n</var>.</p>

<p><code class="code">SingularDualSymmetricInverseMonoid</code> returns the ideal of the dual symmetric inverse monoid consisting of the non-invertible elements (i.e. those not in the group of units), when <var class="Arg">n</var> is at least 2.</p>

<p><code class="code">PartialDualSymmetricInverseMonoid</code> returns the submonoid of the dual symmetric inverse monoid of degree <code class="code"><var class="Arg">n</var> + 1</code> consisting of those block bijections with <code class="code"><var class="Arg">n</var> + 1</code> and <code class="code">-<var class="Arg">n</var> - 1</code> in the same block; see <a href="chapBib.html#biBKudryavtseva2011aa">[KM11]</a> and <a href="chapBib.html#biBKudryavtseva2015aa">[KMU15]</a>.</p>

<p>See <code class="func">IsBlockBijection</code> (<a href="chap3.html#X829494DF7FD6CFEC"><span class="RefLink">3.5-16</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Number(PartitionMonoid(3), IsBlockBijection);</span>
25
<span class="GAPprompt">gap></span> <span class="GAPinput">S := DualSymmetricInverseSemigroup(3);</span>
<inverse block bijection monoid of degree 3 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
25
<span class="GAPprompt">gap></span> <span class="GAPinput">S := PartialDualSymmetricInverseMonoid(5);</span>
<inverse block bijection monoid of degree 6 with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
29072</pre></div>

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

<h5>7.3-8 UniformBlockBijectionMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ UniformBlockBijectionMonoid</code>( <var class="Arg">n</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">‣ FactorisableDualSymmetricInverseMonoid</code>( <var class="Arg">n</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">‣ SingularUniformBlockBijectionMonoid</code>( <var class="Arg">n</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">‣ PartialUniformBlockBijectionMonoid</code>( <var class="Arg">n</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">‣ SingularFactorisableDualSymmetricInverseMonoid</code>( <var class="Arg">n</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">‣ PlanarUniformBlockBijectionMonoid</code>( <var class="Arg">n</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">‣ SingularPlanarUniformBlockBijectionMonoid</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: An inverse bipartition monoid.</p>

<p>If <var class="Arg">n</var> is a positive integer, then this operation returns the uniform block bijection monoid of degree <var class="Arg">n</var>. The <em>uniform block bijection monoid</em> is the submonoid of the partition monoid consisting of the block bijections of degree <span class="SimpleMath">n</span> where the number of positive integers in a block equals the number of negative integers in that block. The uniform block bijection monoid is also referred to as the <em>factorisable dual symmetric inverse monoid</em>.</p>

<p><code class="code">SingularUniformBlockBijectionMonoid</code> returns the ideal of the uniform block bijection monoid consisting of the non-invertible elements (i.e. those not in the group of units), when <var class="Arg">n</var> is at least 2.</p>

<p><code class="code">PlanarUniformBlockBijectionMonoid</code> returns the submonoid of the uniform block bijection monoid consisting of the planar elements (i.e. those in the planar partition monoid, see <code class="func">PlanarPartitionMonoid</code> (<a href="chap7.html#X8444092A7967A029"><span class="RefLink">7.3-9</span></a>)).</p>

<p><code class="code">SingularPlanarUniformBlockBijectionMonoid</code> returns the ideal of the planar uniform block bijection monoid consisting of the non-invertible elements (i.e. those not in the group of units), when <var class="Arg">n</var> is at least 2.</p>

<p><code class="code">PartialUniformBlockBijectionMonoid</code> returns the submonoid of the uniform block bijection monoid of degree <code class="code"><var class="Arg">n</var> + 1</code> consisting of those uniform block bijection with <code class="code"><var class="Arg">n</var> + 1</code> and <code class="code">-<var class="Arg">n</var> - 1</code> in the same block.</p>

<p>See <code class="func">IsUniformBlockBijection</code> (<a href="chap3.html#X79D54AD8833B9551"><span class="RefLink">3.5-17</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := UniformBlockBijectionMonoid(4);</span>
<inverse block bijection monoid of degree 4 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(PlanarUniformBlockBijectionMonoid(8));</span>
128
<span class="GAPprompt">gap></span> <span class="GAPinput">S := DualSymmetricInverseMonoid(4);</span>
<inverse block bijection monoid of degree 4 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFactorisableInverseMonoid(S);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">S := UniformBlockBijectionMonoid(4);</span>
<inverse block bijection monoid of degree 4 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFactorisableInverseMonoid(S);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">S := AsSemigroup(IsBipartitionSemigroup,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                    SymmetricInverseMonoid(5));</span>
<inverse bipartition monoid of degree 5 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFactorisableInverseMonoid(S);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">S := PartialUniformBlockBijectionMonoid(5);</span>
<inverse block bijection monoid of degree 6 with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">NrIdempotents(S);</span>
203
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFactorisableInverseMonoid(S);</span>
true</pre></div>

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

<h5>7.3-9 PlanarPartitionMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PlanarPartitionMonoid</code>( <var class="Arg">n</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">‣ SingularPlanarPartitionMonoid</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A bipartition monoid.</p>

<p>If <var class="Arg">n</var> is a positive integer, then this operation returns the planar partition monoid of degree <var class="Arg">n</var> which is the monoid consisting of all the planar bipartitions of degree <var class="Arg">n</var> (planar bipartitions are defined in Chapter <a href="chap3.html#X7C18DB427C9C0917"><span class="RefLink">3</span></a>).</p>

<p><code class="code">SingularPlanarPartitionMonoid</code> returns the ideal of the planar partition monoid consisting of the non-invertible elements (i.e. those not in the group of units).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := PlanarPartitionMonoid(3);</span>
<regular bipartition *-monoid of degree 3 with 5 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
132
<span class="GAPprompt">gap></span> <span class="GAPinput">T := SingularPlanarPartitionMonoid(3);</span>
<regular bipartition *-semigroup ideal of degree 3 with 1 generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(T);</span>
131
<span class="GAPprompt">gap></span> <span class="GAPinput">Difference(S, T);</span>
[ <block bijection: [ 1, -1 ], [ 2, -2 ], [ 3, -3 ]> ]
</pre></div>

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

<h5>7.3-10 ModularPartitionMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ModularPartitionMonoid</code>( <var class="Arg">m</var>, <var class="Arg">n</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">‣ SingularModularPartitionMonoid</code>( <var class="Arg">m</var>, <var class="Arg">n</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">‣ PlanarModularPartitionMonoid</code>( <var class="Arg">m</var>, <var class="Arg">n</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">‣ SingularPlanarModularPartitionMonoid</code>( <var class="Arg">m</var>, <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A bipartition monoid.</p>

<p>If <var class="Arg">m</var> and <var class="Arg">n</var> are positive integers, then this operation returns the modular-<var class="Arg">m</var> partition monoid of degree <var class="Arg">n</var>. The <em>modular-</em><var class="Arg">m</var> <em>partition monoid</em> is the submonoid of the partition monoid such that the numbers of positive and negative integers contained in each block are congruent mod <var class="Arg">m</var>.</p>

<p><code class="code">SingularModularPartitionMonoid</code> returns the ideal of the modular partition monoid consisting of the non-invertible elements (i.e. those not in the group of units), when either <var class="Arg">m = n = 1</var> or <var class="Arg">m, n > 1</var>.</p>

<p><code class="code">PlanarModularPartitionMonoid</code> returns the submonoid of the modular-<var class="Arg">m</var> partition monoid consisting of the planar elements (i.e. those in the planar partition monoid, see <code class="func">PlanarPartitionMonoid</code> (<a href="chap7.html#X8444092A7967A029"><span class="RefLink">7.3-9</span></a>)).</p>

<p><code class="code">SingularPlanarModularPartitionMonoid</code> returns the ideal of the planar modular partition monoid consisting of the non-invertible elements (i.e. those not in the group of units), when either <var class="Arg">m = n = 1</var> or <var class="Arg">m, n > 1</var>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := ModularPartitionMonoid(3, 6);</span>
<regular bipartition *-monoid of degree 6 with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
36243
<span class="GAPprompt">gap></span> <span class="GAPinput">S := SingularModularPartitionMonoid(1, 1);</span>
<commutative inverse bipartition semigroup ideal of degree 1 with
  1 generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(SingularModularPartitionMonoid(2, 4));</span>
355
<span class="GAPprompt">gap></span> <span class="GAPinput">S := PlanarModularPartitionMonoid(4, 9);</span>
<regular bipartition *-monoid of degree 9 with 14 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
1795
<span class="GAPprompt">gap></span> <span class="GAPinput">S := SingularPlanarModularPartitionMonoid(3, 5);</span>
<regular bipartition *-semigroup ideal of degree 5 with 1 generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(SingularPlanarModularPartitionMonoid(1, 2));</span>
13</pre></div>

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

<h5>7.3-11 ApsisMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ApsisMonoid</code>( <var class="Arg">m</var>, <var class="Arg">n</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">‣ SingularApsisMonoid</code>( <var class="Arg">m</var>, <var class="Arg">n</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">‣ CrossedApsisMonoid</code>( <var class="Arg">m</var>, <var class="Arg">n</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">‣ SingularCrossedApsisMonoid</code>( <var class="Arg">m</var>, <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A bipartition monoid.</p>

<p>If <var class="Arg">m</var> and <var class="Arg">n</var> are positive integers, then this operation returns the <var class="Arg">m</var>-apsis monoid of degree <var class="Arg">n</var>. The <var class="Arg">m</var><em>-apsis monoid</em> is the monoid of bipartitions generated when the diapses in generators of the Jones monoid are replaced with <var class="Arg">m</var>-apses. Note that an <var class="Arg">m</var><em>-apsis</em> is a block that contains precisely <var class="Arg">m</var> consecutive integers.</p>

<p><code class="code">SingularApsisMonoid</code> returns the ideal of the apsis monoid consisting of the non-invertible elements (i.e. those not in the group of units), when <var class="Arg">m</var> <span class="SimpleMath">≤</span> <var class="Arg">n</var>.</p>

<p><code class="code">CrossedApsisGeneratedMonoid</code> returns the semigroup generated by the symmetric group of degree <var class="Arg">n</var> and the <var class="Arg">m</var>-apsis monoid of degree <var class="Arg">n</var>.</p>

<p><code class="code">SingularCrossedApsisMonoid</code> returns the ideal of the crossed apsis monoid consisting of the non-invertible elements (i.e. those not in the group of units), when <var class="Arg">m <= n</var>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := ApsisMonoid(3, 7);</span>
<regular bipartition *-monoid of degree 7 with 5 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
320
<span class="GAPprompt">gap></span> <span class="GAPinput">T := SingularApsisMonoid(3, 7);</span>
<regular bipartition *-semigroup ideal of degree 7 with 1 generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">Difference(S, T) = [One(S)];</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(CrossedApsisMonoid(2, 5));</span>
945
<span class="GAPprompt">gap></span> <span class="GAPinput">SingularCrossedApsisMonoid(4, 6);</span>
<regular bipartition *-semigroup ideal of degree 6 with 1 generator></pre></div>

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

<h4>7.4 <span class="Heading">
      Standard PBR semigroups
    </span></h4>

<p>In this section, we describe the operations in <strong class="pkg">Semigroups</strong> that can be used to create standard examples of semigroups of partitioned binary relations (PBRs). See Chapter <a href="chap4.html#X85A717D1790B7BB5"><span class="RefLink">4</span></a> for more information about PBRs.</p>

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

<h5>7.4-1 FullPBRMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FullPBRMonoid</code>( <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A PBR monoid.</p>

<p>If <var class="Arg">n</var> is a positive integer not greater than <code class="code">2</code>, then this operation returns the monoid consisting of all of the partitioned binary relations (PBRs) of degree <var class="Arg">n</var>; called the <em>full PBR monoid</em>. There are <code class="code">2 ^ ((2 * n) ^ 2)</code> PBRs of degree <var class="Arg">n</var>. The full PBR monoid of degree <var class="Arg">n</var> is currently too large to compute when <span class="SimpleMath"><var class="Arg">n</var> ≥ 3</span>.</p>

<p>The full PBR monoid is not regular in general.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FullPBRMonoid(1);</span>
<pbr monoid of degree 1 with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FullPBRMonoid(2);</span>
<pbr monoid of degree 2 with 10 generators></pre></div>

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

<h4>7.5 <span class="Heading">
      Semigroups of matrices over a finite field
    </span></h4>

<p>In this section, we describe the operations in <strong class="pkg">Semigroups</strong> that can be used to create semigroups of matrices over a finite field that belonging to several standard classes of example. See the section <a href="chap5.html#X873822B6830CE367"><span class="RefLink"><span class="Heading"> Matrices over finite fields </span></span></a> for more information about matrices over a finite field.</p>

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

<h5>7.5-1 FullMatrixMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FullMatrixMonoid</code>( <var class="Arg">d</var>, <var class="Arg">q</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GeneralLinearMonoid</code>( <var class="Arg">d</var>, <var class="Arg">q</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GLM</code>( <var class="Arg">d</var>, <var class="Arg">q</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A matrix monoid.</p>

<p>These operations return the full matrix monoid of <var class="Arg">d</var> by <var class="Arg">d</var> matrices over the field with <var class="Arg">q</var> elements. The <em>full matrix monoid</em>, also known as the <em>general linear monoid</em>, with these parameters, is the monoid consisting of all <var class="Arg">d</var> by <var class="Arg">d</var> matrices with entries from the field <code class="code">GF(<var class="Arg">q</var>)</code>. This monoid has <code class="code"><var class="Arg">q</var> ^ (<var class="Arg">d</var> ^ 2)</code> elements.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FullMatrixMonoid(2, 4);</span>
<general linear monoid 2x2 over GF(2^2)>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
256
<span class="GAPprompt">gap></span> <span class="GAPinput">S = GeneralLinearMonoid(2, 4);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">GLM(2, 2);</span>
<general linear monoid 2x2 over GF(2)></pre></div>

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

<h5>7.5-2 SpecialLinearMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SpecialLinearMonoid</code>( <var class="Arg">d</var>, <var class="Arg">q</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SLM</code>( <var class="Arg">d</var>, <var class="Arg">q</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A matrix monoid.</p>

<p>These operations return the special linear monoid of <var class="Arg">d</var> by <var class="Arg">d</var> matrices over the field with <var class="Arg">q</var> elements. The <em>special linear monoid</em> is the monoid consisting of all <var class="Arg">d</var> by <var class="Arg">d</var> matrices with entries from the field <code class="code">GF(<var class="Arg">q</var>)</code> that have determinant <code class="code">0</code> or <code class="code">1</code>. In other words, the special linear monoid is formed from the general linear monoid of the same parameters by replacing its group of units (the general linear group) by the special linear group.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := SpecialLinearMonoid(2, 4);</span>
<regular monoid of 2x2 matrices over GF(2^2) with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">S = SLM(2, 4);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
136</pre></div>

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

<h5>7.5-3 IsFullMatrixMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFullMatrixMonoid</code>( <var class="Arg">S</var> )</td><td class="tdright">( property )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsGeneralLinearMonoid</code>( <var class="Arg">S</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p><code class="code">IsFullMatrixMonoid</code> and <code class="code">IsGeneralLinearMonoid</code> return <code class="keyw">true</code> if the semigroup <code class="code">S</code> was created using either of the commands <code class="func">FullMatrixMonoid</code> (<a href="chap7.html#X7D4B473A7D7735E3"><span class="RefLink">7.5-1</span></a>) or <code class="func">GeneralLinearMonoid</code> (<a href="chap7.html#X7D4B473A7D7735E3"><span class="RefLink">7.5-1</span></a>) and <code class="keyw">false</code> otherwise.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := RandomSemigroup(IsTransformationSemigroup, 4, 4);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFullMatrixMonoid(S);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">S := GeneralLinearMonoid(3, 3);</span>
<general linear monoid 3x3 over GF(3)>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFullMatrixMonoid(S);</span>
true</pre></div>

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

<h4>7.6 <span class="Heading">
      Semigroups of boolean matrices
    </span></h4>

<p>In this section, we describe the operations in <strong class="pkg">Semigroups</strong> that can be used to create semigroups of boolean matrices belonging to several standard classes of example. See the section <a href="chap5.html#X844A32A184E5EB75"><span class="RefLink"><span class="Heading"> Boolean matrices </span></span></a> for more information about boolean matrices.</p>

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

<h5>7.6-1 FullBooleanMatMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FullBooleanMatMonoid</code>( <var class="Arg">d</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The monoid of all boolean matrices of dimension <var class="Arg">d</var>.</p>

<p>If <var class="Arg">d</var> is a positive integer less than or equal to <code class="code">5</code>, then this operation returns the full boolean matrix monoid of dimension <var class="Arg">d</var>. The <em>full boolean matrix monoid of dimension <var class="Arg">d</var></em> is the monoid consisting of all <var class="Arg">d</var> by <var class="Arg">d</var> boolean matrices, and has <code class="code">2 ^ (<var class="Arg">n</var> ^ 2)</code> matrices.</p>

<p><code class="code">FullBooleanMatMonoid</code> returns a monoid with a generating set that is minimal in size. These generating sets are pre-computed.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FullBooleanMatMonoid(3);</span>
<monoid of 3x3 boolean matrices with 5 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
512</pre></div>

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

<h5>7.6-2 RegularBooleanMatMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RegularBooleanMatMonoid</code>( <var class="Arg">d</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A monoid of boolean matrices.</p>

<p>If <var class="Arg">d</var> is a positive integer, then <code class="code">RegularBooleanMatMonoid</code> returns the monoid generated by the regular <var class="Arg">d</var> by <var class="Arg">d</var> boolean matrices. Note that this monoid is <em>not</em> regular in general. <code class="code">RegularBooleanMatMonoid(<var class="Arg">d</var>)</code> is generated by the four boolean matrices <code class="code">A, B, C, D</code>, whose <code class="keyw">true</code> entries are:</p>


<ul>
<li><p><code class="code">A[i][i + 1]</code> and <code class="code">A[n][1]</code>, for <span class="SimpleMath">i ∈ {1, ..., n - 1}</span>;</p>

</li>
<li><p><code class="code">B[1][2]</code>, <code class="code">B[2][1]</code>, and <code class="code">B[i][i]</code> for <span class="SimpleMath">i ∈ {3, ..., n}</span>;</p>

</li>
<li><p><code class="code">C[1][2]</code> and <code class="code">C[i][i]</code>, for <span class="SimpleMath">i ∈ {2, ..., n - 1}</span>; and</p>

</li>
<li><p><code class="code">D[1][2]</code>, <code class="code">D[i][i]</code>, for <span class="SimpleMath">i ∈ {2, ..., n}</span>, and <code class="code">D[n][1]</code>.</p>

</li>
</ul>
<p>This monoid has nearly <code class="code">2 ^ (n ^ 2)</code> elements.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := RegularBooleanMatMonoid(3);</span>
<monoid of 3x3 boolean matrices with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
506</pre></div>

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

<h5>7.6-3 ReflexiveBooleanMatMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ReflexiveBooleanMatMonoid</code>( <var class="Arg">d</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A monoid of boolean matrices.</p>

<p>If <var class="Arg">d</var> is a positive integer less than or equal to <code class="code">5</code>, then this operation returns the monoid consisting of all reflexive <var class="Arg">d</var> by <var class="Arg">d</var> boolean matrices. A boolean matrix <code class="code">mat</code> is <em>reflexive</em> if each entry of its leading diagonal is <code class="keyw">true</code>, i.e. if <code class="code">mat[i][i]</code> is <code class="keyw">true</code> for all <span class="SimpleMath">i ∈ {1, ..., d}</span>.</p>

<p>The generating sets for the monoids returned by <code class="code">ReflexiveBooleanMatMonoid</code> are pre-computed, and read from a file. Small generating sets are not known for <span class="SimpleMath"><var class="Arg">d</var> ≥ 6</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := ReflexiveBooleanMatMonoid(3);</span>
<monoid of 3x3 boolean matrices with 8 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
64</pre></div>

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

<h5>7.6-4 HallMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HallMonoid</code>( <var class="Arg">d</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A monoid of boolean matrices.</p>

<p>If <var class="Arg">d</var> is a positive integer less than or equal to <code class="code">5</code>, then this operation returns the monoid consisting Hall matrices of degree <var class="Arg">d</var>. A <em>Hall matrix</em> is a boolean matrix in which every column and every row contains at least one <code class="keyw">true</code> entry. Equivalently, a Hall matrix is a boolean matrix than contains a permutation.</p>

<p>A Hall matrix of dimension <var class="Arg">d</var> corresponds to a solution to Hall's Marriage Problem, when there are two collection of <var class="Arg">d</var> people. Thus the number of solutions to Hall's Marriage Problem in this instance is the number of elements of <code class="code">HallMonoid(<var class="Arg">d</var>)</code>.</p>

<p>The operation <code class="code">HallMonoid</code> returns a monoid with a generating set that is minimal in size. These generating sets are pre-computed, and a minimal generating set is not known for larger dimensions.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := HallMonoid(3);</span>
<monoid of 3x3 boolean matrices with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
247</pre></div>

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

<h5>7.6-5 GossipMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GossipMonoid</code>( <var class="Arg">d</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A monoid of boolean matrices.</p>

<p>If <var class="Arg">d</var> is a positive integer, then this operation returns the <var class="Arg">d</var> by <var class="Arg">d</var> gossip monoid. The <em>gossip monoid</em> is defined to be the monoid generated by the collection of all <var class="Arg">d</var> by <var class="Arg">d</var> boolean matrices that define an equivalence relation; see <code class="func">IsEquivalenceBooleanMat</code> (<a href="chap5.html#X82EA957982B79827"><span class="RefLink">5.3-16</span></a>).</p>

<p>For <span class="SimpleMath"><var class="Arg">d</var> ≥ 2</span>, <code class="code">GossipMonoid(<var class="Arg">d</var>)</code> returns a monoid with <span class="SimpleMath">d choose 2</span> generators. The generating set is the collection of boolean matrices that define an equivalence relation that has one equivalence class of size <code class="code">2</code>, and no other non-trivial equivalence classes. Note that this generating set is strictly contained within the collection of all equivalence relation boolean matrices.</p>

<p>The number of elements of <code class="code">GossipMonoid(<var class="Arg">d</var>)</code> is known for some small values of <var class="Arg">d</var> — see <a href="chapBib.html#biBBrouwer2015aa">[BDF15]</a> for more information about the gossip monoid, and its size for <span class="SimpleMath"><var class="Arg">d</var> ≤ 9</span>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := GossipMonoid(3);</span>
<monoid of 3x3 boolean matrices with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
11</pre></div>

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

<h5>7.6-6 TriangularBooleanMatMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TriangularBooleanMatMonoid</code>( <var class="Arg">d</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">‣ UnitriangularBooleanMatMonoid</code>( <var class="Arg">d</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A monoid of boolean matrices.</p>

<p>If <var class="Arg">d</var> is a positive integer, then <code class="code">TriangularBooleanMatMonoid</code> returns the monoid consisting of the upper-triangular <var class="Arg">d</var> by <var class="Arg">d</var> boolean matrices. A boolean matrix is <em>upper-triangular</em> if the entry in row <code class="code">i</code>, column <code class="code">j</code> is <code class="keyw">false</code> whenever <code class="code">i > j</code>.</p>

<p><code class="code">UnitriangularBooleanMatMonoid</code> returns the subsemigroup of the <code class="code">TriangularBooleanMatMonoid</code> that consists of reflexive upper-triangular boolean matrices; see <code class="func">ReflexiveBooleanMatMonoid</code> (<a href="chap7.html#X78DF50747A28098C"><span class="RefLink">7.6-3</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := TriangularBooleanMatMonoid(3);</span>
<monoid of 3x3 boolean matrices with 6 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
64
<span class="GAPprompt">gap></span> <span class="GAPinput">T := UnitriangularBooleanMatMonoid(4);</span>
<monoid of 4x4 boolean matrices with 6 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(T);</span>
64</pre></div>

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

<h4>7.7 <span class="Heading">
      Semigroups of matrices over a semiring
    </span></h4>

<p>In this section, we describe the operations in <strong class="pkg">Semigroups</strong> that can be used to create semigroups of matices over a semiring that belong to several standard classes of example. See Chapter <a href="chap5.html#X82D6B7FE7CAC0AFA"><span class="RefLink">5</span></a> for more information about matrices over a semiring.</p>

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

<h5>7.7-1 FullTropicalMaxPlusMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FullTropicalMaxPlusMonoid</code>( <var class="Arg">d</var>, <var class="Arg">t</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A monoid of tropical max plus matrices.</p>

<p>If <code class="code"><var class="Arg">d</var> = 2</code> and <var class="Arg">t</var> is a positive integer, then <code class="code">FullTropicalMaxPlusMonoid</code> returns the monoid consisting of all <var class="Arg">d</var> by <var class="Arg">d</var> matrices with entries from the tropical max-plus semiring with threshold <var class="Arg">t</var>. A small generating set for larger values of <var class="Arg">d</var> is not currently known.</p>

<p>This monoid contains <code class="code">(<var class="Arg">t</var> + 2) ^ (<var class="Arg">d</var> ^ 2)</code> elements.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FullTropicalMaxPlusMonoid(2, 5);</span>
<monoid of 2x2 tropical max-plus matrices with 24 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
2401
<span class="GAPprompt">gap></span> <span class="GAPinput">(5 + 2) ^ (2 ^ 2);</span>
2401</pre></div>

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

<h5>7.7-2 FullTropicalMinPlusMonoid</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FullTropicalMinPlusMonoid</code>( <var class="Arg">d</var>, <var class="Arg">t</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A monoid of tropical min plus matrices.</p>

<p>If <var class="Arg">d</var> is equal to <code class="code">2</code> or <code class="code">3</code>, and <var class="Arg">t</var> is a positive integer, then <code class="code">FullTropicalMinPlusMonoid</code> returns the monoid consisting of all <var class="Arg">d</var> by <var class="Arg">d</var> matrices with entries from the tropical min-plus semiring with threshold <var class="Arg">t</var>. small generating set for larger values of <var class="Arg">d</var> is not currently known.</p>

<p>This monoid contains <code class="code">(<var class="Arg">t</var> + 2) ^ (<var class="Arg">d</var> ^ 2)</code> elements.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FullTropicalMinPlusMonoid(2, 3);</span>
<monoid of 2x2 tropical min-plus matrices with 7 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
625
<span class="GAPprompt">gap></span> <span class="GAPinput">(3 + 2) ^ (2 ^ 2);</span>
625</pre></div>

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

<h4>7.8 <span class="Heading">
      Examples in various representations
    </span></h4>

<p>In this section, we describe the functions in <strong class="pkg">Semigroups</strong> that can be used to create standard semigroups in various representations. For all of these examples, the default representation is as a semigroup of transformations. In general, these functions do not return a representation of minimal degree.</p>

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

<h5>7.8-1 TrivialSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TrivialSemigroup</code>( [<var class="Arg">filt</var>][,] [<var class="Arg">deg</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: A trivial semigroup.</p>

<p>A <strong class="button">trivial</strong> semigroup is a semigroup with precisely one element. This function returns a trivial semigroup in the representation given by the filter <var class="Arg">filter</var>, and (if possible) with the degree of the representation given by the non-negative integer <var class="Arg">deg</var>.</p>

<p>The optional argument <var class="Arg">filt</var> may be one of the following:</p>


<ul>
<li><p><code class="code">IsTransformationSemigroup</code> (the default, if <var class="Arg">filt</var> is not specified),</p>

</li>
<li><p><code class="code">IsPartialPermSemigroup</code>,</p>

</li>
<li><p><code class="code">IsBipartitionSemigroup</code>,</p>

</li>
<li><p><code class="code">IsBlockBijectionSemigroup</code>,</p>

</li>
<li><p><code class="code">IsPBRSemigroup</code>,</p>

</li>
<li><p><code class="code">IsBooleanMatSemigroup</code>.</p>

</li>
</ul>
<p>If the optional argument <var class="Arg">deg</var> is not specified, then the smallest possible degree will be used.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := TrivialSemigroup();</span>
<trivial transformation group of degree 0 with 1 generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
1
<span class="GAPprompt">gap></span> <span class="GAPinput">S := TrivialSemigroup(3);</span>
<trivial transformation group of degree 3 with 1 generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := TrivialSemigroup(IsBipartitionSemigroup, 2);</span>
<trivial block bijection group of degree 2 with 1 generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">Elements(S);</span>
[ <block bijection: [ 1, 2, -1, -2 ]> ]</pre></div>

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

<h5>7.8-2 MonogenicSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MonogenicSemigroup</code>( [<var class="Arg">filt</var>, ]<var class="Arg">m</var>, <var class="Arg">r</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: A monogenic semigroup with index <var class="Arg">m</var> and period <var class="Arg">r</var>.</p>

<p>If <var class="Arg">m</var> and <var class="Arg">r</var> are positive integers, then this function returns a monogenic semigroup <code class="code">S</code> with index <var class="Arg">m</var> and period <var class="Arg">r</var> in the representation given by the filter <var class="Arg">filt</var>.</p>

<p>The optional argument <var class="Arg">filt</var> may be one of the following:</p>


<ul>
<li><p><code class="code">IsTransformationSemigroup</code> (the default, if <var class="Arg">filt</var> is not specified),</p>

</li>
<li><p><code class="code">IsPartialPermSemigroup</code>,</p>

</li>
<li><p><code class="code">IsBipartitionSemigroup</code>,</p>

</li>
<li><p><code class="code">IsBlockBijectionSemigroup</code>,</p>

</li>
<li><p><code class="code">IsPBRSemigroup</code>,</p>

</li>
<li><p><code class="code">IsBooleanMatSemigroup</code>.</p>

</li>
</ul>
<p>The semigroup <code class="code">S</code> is generated by a single element, <span class="SimpleMath">f</span>. <code class="code">S</code> consists of the elements <span class="SimpleMath">f, f ^ 2, ..., f ^ m, ..., f ^ m + r - 1</span>. The minimal ideal of <code class="code">S</code> consists of the elements <span class="SimpleMath">f ^ m, ..., f ^ m + r - 1</span> and is isomorphic to the cyclic group of order <span class="SimpleMath">r</span>.</p>

<p>See <code class="func">IsMonogenicSemigroup</code> (<a href="chap12.html#X79D46BAB7E327AD1"><span class="RefLink">12.1-11</span></a>) for more information about monogenic semigroups.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := MonogenicSemigroup(5, 3);</span>
<commutative non-regular transformation semigroup of size 7, degree 8
 with 1 generator>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsMonogenicSemigroup(S);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">I := MinimalIdeal(S);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsGroupAsSemigroup(I);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">StructureDescription(I);</span>
"C3"
<span class="GAPprompt">gap></span> <span class="GAPinput">S := MonogenicSemigroup(IsBlockBijectionSemigroup, 9, 1);</span>
<commutative non-regular block bijection semigroup of size 9,
 degree 10 with 1 generator></pre></div>

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

<h5>7.8-3 RectangularBand</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RectangularBand</code>( [<var class="Arg">filt</var>, ]<var class="Arg">m</var>, <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: An <var class="Arg">m</var> by <var class="Arg">n</var> rectangular band.</p>

<p>If <var class="Arg">m</var> and <var class="Arg">n</var> are positive integers, then this function returns a semigroup isomorphic to an <var class="Arg">m</var> by <var class="Arg">n</var> rectangular band, in the representation given by the filter <var class="Arg">filt</var>.</p>

<p>The optional argument <var class="Arg">filt</var> may be one of the following:</p>


<ul>
<li><p><code class="code">IsTransformationSemigroup</code> (the default, if <var class="Arg">filt</var> is not specified),</p>

</li>
<li><p><code class="code">IsBipartitionSemigroup</code>,</p>

</li>
<li><p><code class="code">IsPBRSemigroup</code>,</p>

</li>
<li><p><code class="code">IsBooleanMatSemigroup</code>,</p>

</li>
<li><p><code class="code">IsReesMatrixSemigroup</code>.</p>

</li>
</ul>
<p>See <code class="func">IsRectangularBand</code> (<a href="chap12.html#X7E9B674D781B072C"><span class="RefLink">12.1-15</span></a>) for more information about rectangular bands.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">T := RectangularBand(5, 6);</span>
<regular transformation semigroup of size 30, degree 10 with 6
 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsRectangularBand(T);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">S := RectangularBand(IsReesMatrixSemigroup, 4, 8);</span>
<Rees matrix semigroup 4x8 over Group(())>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsRectangularBand(S);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsCompletelySimpleSemigroup(S) and IsHTrivial(S);</span>
true</pre></div>

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

<h5>7.8-4 FreeSemilattice</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FreeSemilattice</code>( [<var class="Arg">filt</var>, ]<var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: A free semilattice with <var class="Arg">n</var> generators.</p>

<p>If <var class="Arg">n</var> is a positive integer, then this function returns a free semilattice with <var class="Arg">n</var> generators in the representation given by the filter <var class="Arg">filt</var>. The optional argument <var class="Arg">filt</var> may be one of the following:</p>


<ul>
<li><p><code class="code">IsTransformationSemigroup</code> (the default, if <var class="Arg">filt</var> is not specified),</p>

</li>
<li><p><code class="code">IsTransformationMonoid</code>,</p>

</li>
<li><p><code class="code">IsPartialPermSemigroup</code>,</p>

</li>
<li><p><code class="code">IsPartialPermMonoid</code>,</p>

</li>
<li><p><code class="code">IsFpSemigroup</code>,</p>

</li>
<li><p><code class="code">IsFpMonoid</code>,</p>

</li>
<li><p><code class="code">IsBipartitionSemigroup</code>,</p>

</li>
<li><p><code class="code">IsBipartitionMonoid</code>,</p>

</li>
<li><p><code class="code">IsPBRSemigroup</code>,</p>

</li>
<li><p><code class="code">IsPBRMonoid</code>,</p>

</li>
<li><p><code class="code">IsBooleanMatSemigroup</code>,</p>

</li>
<li><p><code class="code">IsBooleanMatMonoid</code>,</p>

</li>
<li><p><code class="code">IsNTPMatrixSemigroup</code>,</p>

</li>
<li><p><code class="code">IsNTPMatrixMonoid</code>,</p>

</li>
<li><p><code class="code">IsMaxPlusMatrixSemigroup</code>,</p>

</li>
<li><p><code class="code">IsMaxPlusMatrixMonoid</code>,</p>

</li>
<li><p><code class="code">IsMinPlusMatrixSemigroup</code>,</p>

</li>
<li><p><code class="code">IsMinPlusMatrixMonoid</code>,</p>

</li>
<li><p><code class="code">IsTropicalMaxPlusMatrixSemigroup</code>,</p>

</li>
<li><p><code class="code">IsTropicalMaxPlusMatrixMonoid</code>,</p>

</li>
<li><p><code class="code">IsTropicalMinPlusMatrixSemigroup</code>,</p>

</li>
<li><p><code class="code">IsTropicalMinPlusMatrixMonoid</code>,</p>

</li>
<li><p><code class="code">IsProjectiveMaxPlusMatrixSemigroup</code>,</p>

</li>
<li><p><code class="code">IsProjectiveMaxPlusMatrixMonoid</code>,</p>

</li>
<li><p><code class="code">IsIntegerMatrixSemigroup.</code></p>

</li>
<li><p><code class="code">IsIntegerMatrixMonoid.</code></p>

</li>
</ul>

<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FreeSemilattice(IsTransformationSemigroup, 5);</span>
<inverse transformation semigroup of size 31, degree 6 with 5 
 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">T := FreeSemilattice(IsPartialPermSemigroup, 3);</span>
<inverse partial perm semigroup of size 7, rank 3 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">U := FreeSemilattice(IsBooleanMatSemigroup, 4);</span>
<inverse semigroup of size 15, 5x5 boolean matrices with 4 generators>
</pre></div>

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

<h5>7.8-5 ZeroSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ZeroSemigroup</code>( [<var class="Arg">filt</var>, ]<var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: A zero semigroup of order <var class="Arg">n</var>.</p>

<p>If <var class="Arg">n</var> is a positive integer, then this function returns a zero semigroup of order <var class="Arg">n</var> in the representation given by the filter <var class="Arg">filt</var>.</p>

<p>The optional argument <var class="Arg">filt</var> may be one of the following:</p>


<ul>
<li><p><code class="code">IsTransformationSemigroup</code> (the default, if <var class="Arg">filt</var> is not specified),</p>

</li>
<li><p><code class="code">IsPartialPermSemigroup</code>,</p>

</li>
<li><p><code class="code">IsBipartitionSemigroup</code>,</p>

</li>
<li><p><code class="code">IsBlockBijectionSemigroup</code>,</p>

</li>
<li><p><code class="code">IsPBRSemigroup</code>,</p>

</li>
<li><p><code class="code">IsBooleanMatSemigroup</code>,</p>

</li>
<li><p><code class="code">IsReesZeroMatrixSemigroup</code> (provided that <code class="code"><var class="Arg">n</var> > 1</code>).</p>

</li>
</ul>
<p>See <code class="func">IsZeroSemigroup</code> (<a href="chap12.html#X81A1882181B75CC9"><span class="RefLink">12.1-27</span></a>) for more information about zero semigroups.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := ZeroSemigroup(5);</span>
<commutative non-regular transformation semigroup of size 5, degree 5
 with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsZeroSemigroup(S);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">S := ZeroSemigroup(IsPartialPermSemigroup, 15);</span>
<commutative non-regular partial perm semigroup of size 15, rank 14
 with 14 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
15
<span class="GAPprompt">gap></span> <span class="GAPinput">z := MultiplicativeZero(S);</span>
<empty partial perm>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsZeroSemigroup(S);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">ForAll(S, x -> ForAll(S, y -> x * y = z));</span>
true</pre></div>

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

<h5>7.8-6 LeftZeroSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LeftZeroSemigroup</code>( [<var class="Arg">filt</var>, ]<var class="Arg">n</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">‣ RightZeroSemigroup</code>( [<var class="Arg">filt</var>, ]<var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: A left zero (or right zero) semigroup of order <var class="Arg">n</var>.</p>

<p>If <var class="Arg">n</var> is a positive integer, then this function returns a left zero (or right zero, as appropriate) semigroup of order <var class="Arg">n</var> in the representation given by the filter <var class="Arg">filt</var>. If <var class="Arg">filt</var> is not specified then the default representation is <code class="code">IsTransformationSemigroup</code>.</p>

<p>The function <code class="code">LeftZeroSemigroup([<var class="Arg">filt</var>,] <var class="Arg">n</var>)</code> simply calls <code class="code">RectangularBand([<var class="Arg">filt</var>,] <var class="Arg">n</var>, 1)</code> and the function <code class="code">RightZeroSemigroup([<var class="Arg">filt</var>,] <var class="Arg">n</var>)</code> simply calls <code class="code">RectangularBand([<var class="Arg">filt</var>,] 1, <var class="Arg">n</var>)</code>.</p>

<p>For more information about <code class="code">RectangularBand</code>, including its permitted values of <var class="Arg">filt</var>, see <code class="func">RectangularBand</code> (<a href="chap7.html#X7E4DFDE27BF8B8F7"><span class="RefLink">7.8-3</span></a>). See <code class="func">IsLeftZeroSemigroup</code> (<a href="chap12.html#X7E9261367C8C52C0"><span class="RefLink">12.1-10</span></a>) and <code class="func">IsRightZeroSemigroup</code> (<a href="chap12.html#X7CB099958658F979"><span class="RefLink">12.1-18</span></a>) for more information about left zero and right zero semigroups.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := LeftZeroSemigroup(20);</span>
<transformation semigroup of degree 6 with 20 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsLeftZeroSemigroup(S);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">ForAll(Tuples(S, 2), p -> p[1] * p[2] = p[1]);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">S := RightZeroSemigroup(IsBipartitionSemigroup, 5);</span>
<regular bipartition semigroup of size 5, degree 3 with 5 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsRightZeroSemigroup(S);</span>
true</pre></div>

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

<h5>7.8-7 BrandtSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ BrandtSemigroup</code>( [[<var class="Arg">filt</var>, ]<var class="Arg">G</var>, ]<var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: An <var class="Arg">n</var> by <var class="Arg">n</var> Brandt semigroup over the group <var class="Arg">G</var>.</p>

<p>If <var class="Arg">n</var> is a positive integer, then this function returns an <var class="Arg">n</var> by <var class="Arg">n</var> Brandt semigroup over the group <var class="Arg">G</var> in the representation given by the filter <var class="Arg">filt</var>.</p>

<p>The optional argument <var class="Arg">filt</var> can be any of the following:</p>


<ul>
<li><p><code class="code">IsPartialPermSemigroup</code> (the default, if <var class="Arg">filt</var> is not specified),</p>

</li>
<li><p><code class="code">IsReesZeroMatrixSemigroup</code>,</p>

</li>
<li><p><code class="code">IsTransformationSemigroup</code>,</p>

</li>
<li><p><code class="code">IsBipartitionSemigroup</code>,</p>

</li>
<li><p><code class="code">IsPBRSemigroup</code>,</p>

</li>
<li><p><code class="code">IsBooleanMatSemigroup</code>,</p>

</li>
<li><p><code class="code">IsNTPMatrixSemigroup</code>,</p>

</li>
<li><p><code class="code">IsMaxPlusMatrixSemigroup</code>,</p>

</li>
<li><p><code class="code">IsMinPlusMatrixSemigroup</code>,</p>

</li>
<li><p><code class="code">IsTropicalMaxPlusMatrixSemigroup</code>,</p>

</li>
<li><p><code class="code">IsTropicalMinPlusMatrixSemigroup</code>,</p>

</li>
<li><p><code class="code">IsProjectiveMaxPlusMatrixSemigroup</code>,</p>

</li>
<li><p><code class="code">IsIntegerMatrixSemigroup.</code></p>

</li>
</ul>
<p>The optional argument <var class="Arg">G</var> defaults to a trivial permutation group. If present <var class="Arg">G</var> must be a permutation group, unless <var class="Arg">filt</var> is <code class="code">IsReesZeroMatrixSemigroup</code> when <var class="Arg">G</var> may be any type of finite group.</p>

<p>See <code class="func">IsBrandtSemigroup</code> (<a href="chap12.html#X7EFDBA687DCDA6FA"><span class="RefLink">12.2-2</span></a>) for more information about Brandt semigroups.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := BrandtSemigroup(5);</span>
<0-simple inverse partial perm semigroup of rank 5 with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsBrandtSemigroup(S);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">S := BrandtSemigroup(IsTransformationSemigroup, 15);</span>
<0-simple transformation semigroup of degree 16 with 28 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
226
<span class="GAPprompt">gap></span> <span class="GAPinput">MultiplicativeZero(S);</span>
Transformation( [ 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
  16, 16, 16 ] )
<span class="GAPprompt">gap></span> <span class="GAPinput">S := BrandtSemigroup(Group((1, 2)), 3);</span>
<0-simple inverse partial perm semigroup of rank 6 with 3 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := BrandtSemigroup(IsTransformationSemigroup, Group((1, 2)), 3);</span>
<0-simple transformation semigroup of degree 7 with 5 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := BrandtSemigroup(IsReesZeroMatrixSemigroup,</span>
<span class="GAPprompt">></span> <span class="GAPinput">                        DihedralGroup(4),</span>
<span class="GAPprompt">></span> <span class="GAPinput">                        2);</span>
<Rees 0-matrix semigroup 2x2 over <pc group of size 4 with
 2 generators>></pre></div>

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

<h4>7.9 <span class="Heading">
      Free bands
    </span></h4>

<p>This chapter describes the functions in <strong class="pkg">Semigroups</strong> for dealing with free bands. This part of the manual and the functions described herein were originally written by Julius Jonušas, with later additions by Reinis Cirpons, Tom Conti-Leslie, and Murray Whyte</p>

<p>A semigroup <span class="SimpleMath">B</span> is a <em>free band</em> on a non-empty set <span class="SimpleMath">X</span> if <span class="SimpleMath">B</span> is a band with a map <span class="SimpleMath">f</span> from <span class="SimpleMath">B</span> to <span class="SimpleMath">X</span> such that for every band <span class="SimpleMath">S</span> and every map <span class="SimpleMath">g</span> from <span class="SimpleMath">X</span> to <span class="SimpleMath">B</span> there exists a unique homomorphism <span class="SimpleMath">g'</span> from <span class="SimpleMath">B</span> to <span class="SimpleMath">S</span> such that <span class="SimpleMath">fg' = g</span>. The free band on a set <span class="SimpleMath">X</span> is unique up to isomorphism. Moreover, by the universal property, every band can be expressed as a quotient of a free band.</p>

<p>For an alternative description of a free band. Suppose that <span class="SimpleMath">X</span> is a non-empty set and <span class="SimpleMath">X ^ +</span> a free semigroup on <span class="SimpleMath">X</span>. Also suppose that <span class="SimpleMath">b</span> is the smallest congurance on <span class="SimpleMath">X ^ +</span> containing the set</p>

<p class="pcenter"> \{(w ^ 2, w) : w \in X ^ + \}. </p>

<p>Then the free band on <span class="SimpleMath">X</span> is isomorphic to the quotient of <span class="SimpleMath">X ^ +</span> by <span class="SimpleMath">b</span>. See Section 4.5 of <a href="chapBib.html#biBHowie1995aa">[How95]</a> for more information on free bands.</p>

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

<h5>7.9-1 FreeBand</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FreeBand</code>( <var class="Arg">rank</var>[, <var class="Arg">name</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">‣ FreeBand</code>( <var class="Arg">name1</var>, <var class="Arg">name2</var>, <var class="Arg">..</var>, <var class="Arg">.</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">‣ FreeBand</code>( <var class="Arg">names</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: A free band.</p>

<p>Returns a free band on <var class="Arg">rank</var> generators, for a positive integer <var class="Arg">rank</var>. If <var class="Arg">rank</var> is not specified, the number of <var class="Arg">names</var> is used. The resulting semigroup is always finite.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">FreeBand(6);</span>
<free band on the generators [ x1, x2, x3, x4, x5, x6 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">FreeBand(6, "b");</span>
<free band on the generators [ b1, b2, b3, b4, b5, b6 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">FreeBand("a""b""c");</span>
<free band on the generators [ a, b, c ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">FreeBand("a""b""c");</span>
<free band on the generators [ a, b, c ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FreeBand(["a""b""c"]);</span>
<free band on the generators [ a, b, c ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">Size(S);</span>
159
<span class="GAPprompt">gap></span> <span class="GAPinput">gens := Generators(S);</span>
[ a, b, c ]
<span class="GAPprompt">gap></span> <span class="GAPinput">S.1 * S.2;</span>
ab</pre></div>

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

<h5>7.9-2 IsFreeBandCategory</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFreeBandCategory</code></td><td class="tdright">( category )</td></tr></table></div>
<p><code class="code">IsFreeBandCategory</code> is the category of semigroups created using <code class="func">FreeBand</code> (<a href="chap7.html#X7B2A65F382DB36EC"><span class="RefLink">7.9-1</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFreeBandCategory(FreeBand(3));</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFreeBand(SymmetricGroup(6));</span>
false</pre></div>

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

<h5>7.9-3 IsFreeBand</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFreeBand</code>( <var class="Arg">S</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="keyw">true</code> or <code class="keyw">false</code>.</p>

<p><code class="code">IsFreeBand</code> returns <code class="keyw">true</code> if the given semigroup <var class="Arg">S</var> is a free band.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFreeBand(FreeBand(3));</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFreeBand(SymmetricGroup(6));</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFreeBand(FullTransformationMonoid(7));</span>
false
</pre></div>

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

<h5>7.9-4 IsFreeBandElement</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFreeBandElement</code></td><td class="tdright">( category )</td></tr></table></div>
<p><code class="code">IsFreeBandElement</code> is a <code class="code">Category</code> containing the elements of a free band.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFreeBandElement(Generators(FreeBand(4))[1]);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFreeBandElement(Transformation([1, 3, 4, 1]));</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFreeBandElement((1, 2, 3, 4));</span>
false
</pre></div>

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

<h5>7.9-5 IsFreeBandElementCollection</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFreeBandElementCollection</code></td><td class="tdright">( category )</td></tr></table></div>
<p>Every collection of elements of a free band belongs to the category <code class="code">IsFreeBandElementCollection</code>. For example, every free band belongs to <code class="code">IsFreeBandElementCollection</code>.</p>

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

<h5>7.9-6 IsFreeBandSubsemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFreeBandSubsemigroup</code></td><td class="tdright">( filter )</td></tr></table></div>
<p><code class="code">IsFreeBandSubsemigroup</code> is a synonym for <code class="code">IsSemigroup</code> and <code class="code">IsFreeBandElementCollection</code>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FreeBand(2);</span>
<free band on the generators [ x1, x2 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">x := S.1;</span>
x1
<span class="GAPprompt">gap></span> <span class="GAPinput">y := S.2;</span>
x2
<span class="GAPprompt">gap></span> <span class="GAPinput">new := Semigroup([x * y, x]);</span>
<semigroup with 2 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFreeBand(new);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">IsFreeBandSubsemigroup(new);</span>
true</pre></div>

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

<h5>7.9-7 ContentOfFreeBandElement</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ContentOfFreeBandElement</code>( <var class="Arg">x</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">‣ ContentOfFreeBandElementCollection</code>( <var class="Arg">coll</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: A list of integers</p>

<p>The content of a free band element <var class="Arg">x</var> is the set of generators appearing in the word representing the element <var class="Arg">x</var> of the free band.</p>

<p>The function <code class="code">ContentOfFreeBandElement</code> returns the content of free band element <var class="Arg">x</var> represented as a list of integers, where <code class="code">1</code> represents the first generator, <code class="code">2</code> the second generator, and so on.</p>

<p>The function <code class="code">ContentOfFreeBandElementCollection</code> returns the the least list <code class="code">C</code> for the collection of free band elements <var class="Arg">coll</var> such that the content of every element in <var class="Arg">coll</var> is contained in <code class="code">C</code>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FreeBand(2);</span>
<free band on the generators [ x1, x2 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">x := S.1;</span>
x1
<span class="GAPprompt">gap></span> <span class="GAPinput">y := S.2;</span>
x2
<span class="GAPprompt">gap></span> <span class="GAPinput">ContentOfFreeBandElement(x);</span>
[ 1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ContentOfFreeBandElement(x * y);</span>
[ 1, 2 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ContentOfFreeBandElement(x * y * x);</span>
[ 1, 2 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ContentOfFreeBandElementCollection([x, y]);</span>
[ 1, 2 ]</pre></div>

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

<h5>7.9-8 EqualInFreeBand</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ EqualInFreeBand</code>( <var class="Arg">u</var>, <var class="Arg">v</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>This operation takes a pair <var class="Arg">u</var> and <var class="Arg">v</var> of lists of positive integers or strings, representing words in a free semigroup.</p>

<p>Where <code class="code">F</code> is a free band over some alphabet containing the letters occurring in <var class="Arg">u</var> and <var class="Arg">v</var>, this operation returns <code class="keyw">true</code> if <var class="Arg">u</var> and <var class="Arg">v</var> are equal in <code class="code">F</code>, and <code class="keyw">false</code> otherwise.</p>

<p>Note that this operation is for lists and strings, as opposed to <code class="code">FreeBandElement</code> objects.</p>

<p>This is an implementation of an algorithm described by Jakub Radoszewski and Wojciech Rytter in <a href="chapBib.html#biBRadoszewski2010aa">[RR10]</a>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">EqualInFreeBand("aa""a");</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">EqualInFreeBand("abcacba""abcba");</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">EqualInFreeBand("aab""aac");</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">EqualInFreeBand([1, 3, 3], [2]);</span>
false
</pre></div>

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

<h5>7.9-9 GreensDClassOfElement</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GreensDClassOfElement</code>( <var class="Arg">S</var>, <var class="Arg">x</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A Green's <em>D</em>-class</p>

<p>Let <var class="Arg">S</var> be a free band. Two elements of <var class="Arg"> S </var> are <em>D</em>-related if and only if they have the same content i.e. the set of generators appearing in any factorization of the elements. Therefore, a <em>D</em>-class of a free band element <var class="Arg"> x </var> is the set of elements of <var class="Arg"> S </var> which have the same content as <var class="Arg"> x </var>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FreeBand(3, "b");</span>
<free band on the generators [ b1, b2, b3 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">x := S.1 * S.2;</span>
b1b2
<span class="GAPprompt">gap></span> <span class="GAPinput">D := GreensDClassOfElement(S, x);</span>
<Green's D-class: b1b2>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsGreensDClass(D);</span>
true</pre></div>

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

<h5>7.9-10 <span class="Heading">Operators</span></h5>

<p>The following operators are also included for free band elements:</p>


<dl>
<dt><strong class="Mark"><code class="code"><var class="Arg">u</var> * <var class="Arg">v</var></code></strong></dt>
<dd><p>returns the product of two free band elements <var class="Arg">u</var> and <var class="Arg">v</var>.</p>

</dd>
<dt><strong class="Mark"><code class="code"><var class="Arg">u</var> = <var class="Arg">v</var> </code></strong></dt>
<dd><p>checks if two free band elements are equal.</p>

</dd>
<dt><strong class="Mark"><code class="code"><var class="Arg">u</var> < <var class="Arg">v</var> </code></strong></dt>
<dd><p>compares the sizes of the internal representations of two free band elements.</p>

</dd>
</dl>
<p><a id="X850B10D783053100" name="X850B10D783053100"></a></p>

<h4>7.10 <span class="Heading">
      Graph inverse semigroups
    </span></h4>

<p>In this chapter we describe a class of semigroups arising from directed graphs.</p>

<p>The functionality in <strong class="pkg">Semigroups</strong> for graph inverse semigroups was written jointly by Zak Mesyan (UCCS) and J. D. Mitchell (St Andrews). The functionality for graph inverse semigroup congruences was written by Marina Anagnostopoulou-Merkouri (St Andrews).</p>

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

<h5>7.10-1 GraphInverseSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GraphInverseSemigroup</code>( <var class="Arg">E</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A graph inverse semigroup.</p>

<p>If <var class="Arg">E</var> is a digraph (i.e. it satisfies <code class="func">IsDigraph</code> (<a href="https://gap-packages.github.io/io/doc/chap3_mj.html#X7877ADC77F85E630"><span class="RefLink">Digraphs: IsDigraph</span></a>)), then <code class="code">GraphInverseSemigroup</code> returns the graph inverse semigroup <span class="SimpleMath">G(<var class="Arg">E</var>)</span> where, roughly speaking, elements correspond to paths in the graph <var class="Arg">E</var>.</p>

<p>Let us describe <var class="Arg">E</var> as a digraph <span class="SimpleMath"><var class="Arg">E</var> = (E ^ 0, E ^ 1, r, s)</span>, where <span class="SimpleMath">E^0</span> is the set of vertices, <span class="SimpleMath">E^1</span> is the set of edges, and <span class="SimpleMath">r</span> and <span class="SimpleMath">s</span> are functions <span class="SimpleMath">E^1 -> E^0</span> giving the <em>range</em> and <em>source</em> of an edge, respectively. The <em>graph inverse semigroup <span class="SimpleMath">G(<var class="Arg">E</var>)</span> of <span class="SimpleMath">E</span></em> is the semigroup-with-zero generated by the sets <span class="SimpleMath"><var class="Arg">E</var> ^ 0</span> and <span class="SimpleMath"><var class="Arg">E</var> ^ 1</span>, together with a set of variables <span class="SimpleMath">{e ^ -1 ∣ e ∈ <var class="Arg">E</var> ^ 1}</span>, satisfying the following relations for all <span class="SimpleMath">v, w ∈ <var class="Arg">E</var> ^ 0</span> and <span class="SimpleMath">e, f ∈ <var class="Arg">E</var> ^ 1</span>:</p>


<dl>
<dt><strong class="Mark">(V)</strong></dt>
<dd><p><span class="SimpleMath">vw = δ_v,w ⋅ v</span>,</p>

</dd>
<dt><strong class="Mark">(E1)</strong></dt>
<dd><p><span class="SimpleMath">s(e) ⋅ e=e ⋅ r(e)=e</span>,</p>

</dd>
<dt><strong class="Mark">(E2)</strong></dt>
<dd><p><span class="SimpleMath">r(e) ⋅ e^-1 = e^-1 ⋅ s(e) =e^-1</span>,</p>

</dd>
<dt><strong class="Mark">(CK1)</strong></dt>
<dd><p><span class="SimpleMath">e^-1 ⋅ f = δ_e,f ⋅ r(e)</span>.</p>

</dd>
</dl>
<p>(Here <span class="SimpleMath">δ</span> is the Kronecker delta.) We define <span class="SimpleMath">v^-1=v</span> for each <span class="SimpleMath">v ∈ E^0</span>, and for any path <span class="SimpleMath">y=e_1dots e_n</span> (<span class="SimpleMath">e_1dots e_n ∈ E^1</span>) we let <span class="SimpleMath">y^-1 = e_n^-1 dots e_1^-1</span>. With this notation, every nonzero element of <span class="SimpleMath">G(E)</span> can be written uniquely as <span class="SimpleMath">xy^-1</span> for some paths <span class="SimpleMath">x, y</span> in <span class="SimpleMath">E</span>, by the CK1 relation.</p>

<p>For a more complete description, see <a href="chapBib.html#biBMesyan2016">[MM16]</a>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph([[2, 5, 8, 10], [2, 3, 4, 5, 6, 8, 9, 10], [1],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                  [3, 5, 7, 8, 10], [2, 5, 7], [3, 6, 7, 9, 10],</span>
<span class="GAPprompt">></span> <span class="GAPinput">                  [1, 4], [1, 5, 9], [1, 2, 7, 8], [3, 5]]);</span>
<immutable digraph with 10 vertices, 37 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := GraphInverseSemigroup(gr);</span>
<infinite graph inverse semigroup with 10 vertices, 37 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">GeneratorsOfInverseSemigroup(S);</span>
[ e_1, e_2, e_3, e_4, e_5, e_6, e_7, e_8, e_9, e_10, e_11, e_12,
  e_13, e_14, e_15, e_16, e_17, e_18, e_19, e_20, e_21, e_22, e_23,
  e_24, e_25, e_26, e_27, e_28, e_29, e_30, e_31, e_32, e_33, e_34,
  e_35, e_36, e_37, v_1, v_2, v_3, v_4, v_5, v_6, v_7, v_8, v_9, v_10
 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">AssignGeneratorVariables(S);</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">e_1 * e_1 ^ -1;</span>
e_1e_1^-1
<span class="GAPprompt">gap></span> <span class="GAPinput">e_1 ^ -1 * e_1 ^ -1;</span>
0
<span class="GAPprompt">gap></span> <span class="GAPinput">e_1 ^ -1 * e_1;</span>
v_2</pre></div>

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

<h5>7.10-2 Range</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Range</code>( <var class="Arg">x</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">‣ Source</code>( <var class="Arg">x</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: A graph inverse semigroup element.</p>

<p>If <var class="Arg">x</var> is an element of a graph inverse semigroup (i.e. it satisfies <code class="func">IsGraphInverseSemigroupElement</code> (<a href="chap7.html#X7BFDF88B799B05A0"><span class="RefLink">7.10-4</span></a>)), then <code class="code">Range</code> and <code class="code">Source</code> give, respectively, the start and end vertices of <var class="Arg">x</var> when viewed as a path in the digraph over which the semigroup is defined.</p>

<p>For a fuller description, see <code class="func">GraphInverseSemigroup</code> (<a href="chap7.html#X7A9EEFD386D6F630"><span class="RefLink">7.10-1</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph([[], [1], [3]]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := GraphInverseSemigroup(gr);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">e := S.1;</span>
e_1
<span class="GAPprompt">gap></span> <span class="GAPinput">Source(e);</span>
v_2
<span class="GAPprompt">gap></span> <span class="GAPinput">Range(e);</span>
v_1
</pre></div>

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

<h5>7.10-3 IsVertex</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsVertex</code>( <var class="Arg">x</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: <code class="keyw">true</code> or <code class="keyw">false</code>.</p>

<p>If <var class="Arg">x</var> is an element of a graph inverse semigroup (i.e. it satisfies <code class="func">IsGraphInverseSemigroupElement</code> (<a href="chap7.html#X7BFDF88B799B05A0"><span class="RefLink">7.10-4</span></a>)), then this attribute returns <code class="keyw">true</code> if <var class="Arg">x</var> corresponds to a vertex in the digraph over which the semigroup is defined, and <code class="keyw">false</code> otherwise.</p>

<p>For a fuller description, see <code class="func">GraphInverseSemigroup</code> (<a href="chap7.html#X7A9EEFD386D6F630"><span class="RefLink">7.10-1</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph([[], [1], [3]]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := GraphInverseSemigroup(gr);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">e := S.1;</span>
e_1
<span class="GAPprompt">gap></span> <span class="GAPinput">IsVertex(e);</span>
false
<span class="GAPprompt">gap></span> <span class="GAPinput">v := S.3;</span>
v_1
<span class="GAPprompt">gap></span> <span class="GAPinput">IsVertex(v);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">z := v * e;</span>
0
<span class="GAPprompt">gap></span> <span class="GAPinput">IsVertex(z);</span>
false
</pre></div>

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

<h5>7.10-4 IsGraphInverseSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsGraphInverseSemigroup</code>( <var class="Arg">x</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">‣ IsGraphInverseSemigroupElement</code>( <var class="Arg">x</var> )</td><td class="tdright">( filter )</td></tr></table></div>
<p>Returns: <code class="keyw">true</code> or <code class="keyw">false</code>.</p>

<p>The category <code class="code">IsGraphInverseSemigroup</code> contains any semigroup defined over a digraph using the <code class="func">GraphInverseSemigroup</code> (<a href="chap7.html#X7A9EEFD386D6F630"><span class="RefLink">7.10-1</span></a>) operation. The category <code class="code">IsGraphInverseSemigroupElement</code> contains any element contained in such a semigroup.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph([[], [1], [3]]);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := GraphInverseSemigroup(gr);</span>
<infinite graph inverse semigroup with 3 vertices, 2 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsGraphInverseSemigroup(S);</span>
true
<span class="GAPprompt">gap></span> <span class="GAPinput">x := GeneratorsOfSemigroup(S)[1];</span>
e_1
<span class="GAPprompt">gap></span> <span class="GAPinput">IsGraphInverseSemigroupElement(x);</span>
true
</pre></div>

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

<h5>7.10-5 GraphOfGraphInverseSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GraphOfGraphInverseSemigroup</code>( <var class="Arg">S</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: A digraph.</p>

<p>If <var class="Arg">S</var> is a graph inverse semigroup (i.e. it satisfies <code class="func">IsGraphInverseSemigroup</code> (<a href="chap7.html#X7BFDF88B799B05A0"><span class="RefLink">7.10-4</span></a>)), then this attribute returns the original digraph over which <var class="Arg">S</var> was defined (most likely the argument given to <code class="func">GraphInverseSemigroup</code> (<a href="chap7.html#X7A9EEFD386D6F630"><span class="RefLink">7.10-1</span></a>) to create <var class="Arg">S</var>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph([[], [1], [3]]);</span>
<immutable digraph with 3 vertices, 2 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := GraphInverseSemigroup(gr);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">GraphOfGraphInverseSemigroup(S);</span>
<immutable digraph with 3 vertices, 2 edges>
</pre></div>

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

<h5>7.10-6 IsGraphInverseSemigroupElementCollection</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsGraphInverseSemigroupElementCollection</code></td><td class="tdright">( category )</td></tr></table></div>
<p>Every collection of elements of a graph inverse semigroup belongs to the category <code class="code">IsGraphInverseSemigroupElementCollection</code>. For example, every graph inverse semigroup belongs to <code class="code">IsGraphInverseSemigroupElementCollection</code>.</p>

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

<h5>7.10-7 IsGraphInverseSubsemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsGraphInverseSubsemigroup</code></td><td class="tdright">( filter )</td></tr></table></div>
<p><code class="code">IsGraphInverseSubsemigroup</code> is a synonym for <code class="code">IsSemigroup</code> and <code class="code">IsInverseSemigroup</code> and <code class="code">IsGraphInverseSemigroupElementCollection</code>.</p>

<p>See <code class="func">IsGraphInverseSemigroupElementCollection</code> (<a href="chap7.html#X870128E4845D6ABD"><span class="RefLink">7.10-6</span></a>) and <code class="func">IsInverseSemigroup</code> (<a href="../../../doc/ref/chap51_mj.html#X83F1529479D56665"><span class="RefLink">Reference: IsInverseSemigroup</span></a>).</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">gr := Digraph([[], [1], [2]]);</span>
<immutable digraph with 3 vertices, 2 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := GraphInverseSemigroup(gr);</span>
<finite graph inverse semigroup with 3 vertices, 2 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">Elements(S);</span>
[ e_2^-1, e_1^-1, e_1^-1e_2^-1, 0, e_1, e_1e_1^-1, e_1e_1^-1e_2^-1,
  e_2, e_2e_2^-1, e_2e_1, e_2e_1e_1^-1, e_2e_1e_1^-1e_2^-1, v_1, v_2,
  v_3 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">T := InverseSemigroup(Elements(S){[3, 5]});;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">IsGraphInverseSubsemigroup(T);</span>
true</pre></div>

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

<h5>7.10-8 VerticesOfGraphInverseSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ VerticesOfGraphInverseSemigroup</code>( <var class="Arg">S</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: A list.</p>

<p>If <var class="Arg">S</var> is a graph inverse semigroup (i.e. it satisfies <code class="func">IsGraphInverseSemigroup</code> (<a href="chap7.html#X7BFDF88B799B05A0"><span class="RefLink">7.10-4</span></a>)), then this attribute returns the list of vertices of <var class="Arg">S</var>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">D := Digraph([[3, 4], [3, 4], [4], []]);</span>
<immutable digraph with 4 vertices, 5 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := GraphInverseSemigroup(D);</span>
<finite graph inverse semigroup with 4 vertices, 5 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">VerticesOfGraphInverseSemigroup(S);</span>
[ v_1, v_2, v_3, v_4 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">D := ChainDigraph(12);</span>
<immutable chain digraph with 12 vertices>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := GraphInverseSemigroup(D);</span>
<finite graph inverse semigroup with 12 vertices, 11 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">VerticesOfGraphInverseSemigroup(S);</span>
[ v_1, v_2, v_3, v_4, v_5, v_6, v_7, v_8, v_9, v_10, v_11, v_12 ]
</pre></div>

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

<h5>7.10-9 IndexOfVertexOfGraphInverseSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IndexOfVertexOfGraphInverseSemigroup</code>( <var class="Arg">v</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: A positive integer.</p>

<p>If <var class="Arg">v</var> is a vertex of a graph inverse semigroup (i.e. it satisfies <code class="func">IsGraphInverseSemigroup</code> (<a href="chap7.html#X7BFDF88B799B05A0"><span class="RefLink">7.10-4</span></a>)), then this attribute returns the index of this vertex in <var class="Arg">S</var>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">D := Digraph([[3, 4], [3, 4], [4], []]);</span>
<immutable digraph with 4 vertices, 5 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := GraphInverseSemigroup(D);</span>
<finite graph inverse semigroup with 4 vertices, 5 edges>
<span class="GAPprompt">gap></span> <span class="GAPinput">IndexOfVertexOfGraphInverseSemigroup(v_1);</span>
1
<span class="GAPprompt">gap></span> <span class="GAPinput">IndexOfVertexOfGraphInverseSemigroup(v_3);</span>
3</pre></div>

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

<h4>7.11 <span class="Heading">
      Free inverse semigroups
    </span></h4>

<p>This chapter describes the functions in <strong class="pkg">Semigroups</strong> for dealing with free inverse semigroups. This part of the manual and the functions described herein were written by Julius Jonušas.</p>

<p>An inverse semigroup <span class="SimpleMath">F</span> is said to be <em>free</em> on a non-empty set <span class="SimpleMath">X</span> if there is a map <span class="SimpleMath">f</span> from <span class="SimpleMath">F</span> to <span class="SimpleMath">X</span> such that for every inverse semigroup <span class="SimpleMath">S</span> and a map <span class="SimpleMath">g</span> from <span class="SimpleMath">X</span> to <span class="SimpleMath">S</span> there exists a unique homomorphism <span class="SimpleMath">g'</span> from <span class="SimpleMath">F</span> to <span class="SimpleMath">S</span> such that <span class="SimpleMath">fg' = g</span>. Moreover, by this universal property, every inverse semigroup can be expressed as a quotient of a free inverse semigroup.</p>

<p>The internal representation of an element of a free inverse semigroup uses a Munn tree. A <em>Munn tree</em> is a directed tree with distinguished start and terminal vertices and where the edges are labeled by generators so that two edges labeled by the same generator are only incident to the same vertex if one of the edges is coming in and the other is leaving the vertex. For more information regarding free inverse semigroups and the Munn representations see Section 5.10 of <a href="chapBib.html#biBHowie1995aa">[How95]</a>.</p>

<p>See also <a href="../../../doc/ref/chap51_mj.html#X840847B6810BD0E1"><span class="RefLink">Reference: Inverse semigroups and monoids</span></a>, <a href="../../../doc/ref/chap54_mj.html#X7D6495F77B8A77BD"><span class="RefLink">Reference: Partial permutations</span></a> and <a href="../../../doc/ref/chap37_mj.html#X82E7EA7F7FD31EC3"><span class="RefLink">Reference: Free Groups, Monoids and Semigroups</span></a>.</p>

<p>An element of a free inverse semigroup in <strong class="pkg">Semigroups</strong> is displayed, by default, as a shortest word corresponding to the element. However, there might be more than one word of the minimum length. For example, if <span class="SimpleMath">x</span> and <span class="SimpleMath">y</span> are generators of a free inverse semigroups, then</p>

<p class="pcenter">xyy
      ^ {-1}xx ^ {-1}x ^ {-1} = xxx ^ {-1}yy ^ {-1}x ^ {-1}.</p>

<p>See <code class="func">MinimalWord</code> (<a href="chap7.html#X87BB5D047EB7C2BF"><span class="RefLink">7.11-7</span></a>). Therefore we provide a another method for printing elements of a free inverse semigroup: a unique canonical form. Suppose an element of a free inverse semigroup is given as a Munn tree. Let <span class="SimpleMath">L</span> be the set of words corresponding to the shortest paths from the start vertex to the leaves of the tree. Also let <span class="SimpleMath">w</span> be the word corresponding to the shortest path from the start vertex to the terminal vertex. The word <span class="SimpleMath">vv ^ -1</span> is an idempotent for every <span class="SimpleMath">v</span> in <span class="SimpleMath">L</span>. The canonical form is given by multiplying these idempotents, in shortlex order, and then postmultiplying by <span class="SimpleMath">w</span>. For example, consider the word <span class="SimpleMath">xyy ^ -1xx ^ -1x ^ -1</span> again. The words corresponding to the paths to the leaves are in this case <span class="SimpleMath">xx</span> and <span class="SimpleMath">xy</span>. And <span class="SimpleMath">w</span> is an empty word since start and terminal vertices are the same. Therefore, the canonical form is</p>

<p class="pcenter">xxx ^ {-1}x ^ {-1}xyy ^ {-1}x ^ {-1}.</p>

<p>See <code class="func">CanonicalForm</code> (<a href="chap7.html#X7DB7DCEC7E0FE9A3"><span class="RefLink">7.11-6</span></a>).</p>

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

<h5>7.11-1 FreeInverseSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FreeInverseSemigroup</code>( <var class="Arg">rank</var>[, <var class="Arg">name</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">‣ FreeInverseSemigroup</code>( <var class="Arg">name1</var>, <var class="Arg">name2</var>, <var class="Arg">...</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">‣ FreeInverseSemigroup</code>( <var class="Arg">names</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: A free inverse semigroup.</p>

<p>Returns a free inverse semigroup on <var class="Arg">rank</var> generators, where <var class="Arg">rank</var> is a positive integer. If <var class="Arg">rank</var> is not specified, the number of <var class="Arg">names</var> is used. If <code class="code">S</code> is a free inverse semigroup, then the generators can be accessed by <code class="code">S.1</code>, <code class="code">S.2</code> and so on.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FreeInverseSemigroup(7);</span>
<free inverse semigroup on the generators
[ x1, x2, x3, x4, x5, x6, x7 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FreeInverseSemigroup(7, "s");</span>
<free inverse semigroup on the generators
[ s1, s2, s3, s4, s5, s6, s7 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FreeInverseSemigroup("a""b""c");</span>
<free inverse semigroup on the generators [ a, b, c ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FreeInverseSemigroup(["a""b""c"]);</span>
<free inverse semigroup on the generators [ a, b, c ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">S.1;</span>
a
<span class="GAPprompt">gap></span> <span class="GAPinput">S.2;</span>
b</pre></div>

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

<h5>7.11-2 IsFreeInverseSemigroupCategory</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFreeInverseSemigroupCategory</code>( <var class="Arg">obj</var> )</td><td class="tdright">( category )</td></tr></table></div>
<p>Every free inverse semigroup in <strong class="pkg">GAP</strong> created by <code class="func">FreeInverseSemigroup</code> (<a href="chap7.html#X7F3F9DED8003CBD0"><span class="RefLink">7.11-1</span></a>) belongs to the category <code class="code">IsFreeInverseSemigroup</code>. Basic operations for a free inverse semigroup are: <code class="func">GeneratorsOfInverseSemigroup</code> (<a href="../../../doc/ref/chap51_mj.html#X87C373597F787250"><span class="RefLink">Reference: GeneratorsOfInverseSemigroup</span></a>) and <code class="func">GeneratorsOfSemigroup</code> (<a href="../../../doc/ref/chap51_mj.html#X78147A247963F23B"><span class="RefLink">Reference: GeneratorsOfSemigroup</span></a>). Elements of a free inverse semigroup belong to the category <code class="func">IsFreeInverseSemigroupElement</code> (<a href="chap7.html#X7999FE0286283CC2"><span class="RefLink">7.11-4</span></a>).</p>

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

<h5>7.11-3 IsFreeInverseSemigroup</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFreeInverseSemigroup</code>( <var class="Arg">S</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>Returns: <code class="keyw">true</code> or <code class="keyw">false</code></p>

<p>Attempts to determine whether the given semigroup <var class="Arg">S</var> is a free inverse semigroup.</p>

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

<h5>7.11-4 IsFreeInverseSemigroupElement</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFreeInverseSemigroupElement</code></td><td class="tdright">( category )</td></tr></table></div>
<p>Every element of a free inverse semigroup belongs to the category <code class="code">IsFreeInverseSemigroupElement</code>.</p>

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

<h5>7.11-5 IsFreeInverseSemigroupElementCollection</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFreeInverseSemigroupElementCollection</code></td><td class="tdright">( category )</td></tr></table></div>
<p>Every collection of elements of a free inverse semigroup belongs to the category <code class="code">IsFreeInverseSemigroupElementCollection</code>. For example, every free inverse semigroup belongs to <code class="code">IsFreeInverseSemigroupElementCollection</code>.</p>

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

<h5>7.11-6 CanonicalForm</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CanonicalForm</code>( <var class="Arg">w</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: A string.</p>

<p>Every element of a free inverse semigroup has a unique canonical form. If <var class="Arg">w</var> is such an element, then <code class="code">CanonicalForm</code> returns the canonical form of <var class="Arg">w</var> as a string.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FreeInverseSemigroup(3);</span>
<free inverse semigroup on the generators [ x1, x2, x3 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">x := S.1; y := S.2;</span>
x1
x2
<span class="GAPprompt">gap></span> <span class="GAPinput">CanonicalForm(x ^ 3 * y ^ 3);</span>
"x1x1x1x2x2x2x2^-1x2^-1x2^-1x1^-1x1^-1x1^-1x1x1x1x2x2x2"</pre></div>

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

<h5>7.11-7 MinimalWord</h5>

<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MinimalWord</code>( <var class="Arg">w</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: A string.</p>

<p>For an element <var class="Arg">w</var> of a free inverse semigroup <code class="code">S</code>, <code class="code">MinimalWord</code> returns a word of minimal length equal to <var class="Arg">w</var> in <code class="code">S</code> as a string.</p>

<p>Note that there maybe more than one word of minimal length which is equal to <var class="Arg">w</var> in <code class="code">S</code>.</p>


<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FreeInverseSemigroup(3);</span>
<free inverse semigroup on the generators [ x1, x2, x3 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">x := S.1;</span>
x1
<span class="GAPprompt">gap></span> <span class="GAPinput">y := S.2;</span>
x2
<span class="GAPprompt">gap></span> <span class="GAPinput">MinimalWord(x ^ 3 * y ^ 3);</span>
"x1*x1*x1*x2*x2*x2"</pre></div>

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

<h5>7.11-8 <span class="Heading">Displaying free inverse semigroup elements </span></h5>

<p>There is a way to change how <strong class="pkg">GAP</strong> displays free inverse semigroup elements using the user preference <code class="code">FreeInverseSemigroupElementDisplay</code>. See <code class="func">UserPreference</code> (<a href="../../../doc/ref/chap3_mj.html#X7B0AD104839B6C3C"><span class="RefLink">Reference: UserPreference</span></a>) for more information about user preferences.</p>

<p>There are two possible values for <code class="code">FreeInverseSemigroupElementDisplay</code>:</p>


<dl>
<dt><strong class="Mark">minimal </strong></dt>
<dd><p>With this option selected, <strong class="pkg">GAP</strong> will display a shortest word corresponding to the free inverse semigroup element. However, this shortest word is not unique. This is a default setting.</p>

</dd>
<dt><strong class="Mark">canonical</strong></dt>
<dd><p>With this option selected, <strong class="pkg">GAP</strong> will display a free inverse semigroup element in the canonical form.</p>

</dd>
</dl>

<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">SetUserPreference("semigroups",</span>
<span class="GAPprompt">></span> <span class="GAPinput">                     "FreeInverseSemigroupElementDisplay",</span>
<span class="GAPprompt">></span> <span class="GAPinput">                     "minimal");</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">S := FreeInverseSemigroup(2);</span>
<free inverse semigroup on the generators [ x1, x2 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">S.1 * S.2;</span>
x1*x2
<span class="GAPprompt">gap></span> <span class="GAPinput">SetUserPreference("semigroups",</span>
<span class="GAPprompt">></span> <span class="GAPinput">                     "FreeInverseSemigroupElementDisplay",</span>
<span class="GAPprompt">></span> <span class="GAPinput">                     "canonical");</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">S.1 * S.2;</span>
x1x2x2^-1x1^-1x1x2</pre></div>

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

<h5>7.11-9 <span class="Heading">Operators for free inverse semigroup elements
      </span></h5>


<dl>
<dt><strong class="Mark"><code class="code"><var class="Arg">w</var> ^ -1</code></strong></dt>
<dd><p>returns the semigroup inverse of the free inverse semigroup element <var class="Arg">w</var>.</p>

</dd>
<dt><strong class="Mark"><code class="code"><var class="Arg">u</var> * <var class="Arg">v</var></code></strong></dt>
<dd><p>returns the product of two free inverse semigroup elements <var class="Arg">u</var> and <var class="Arg">v</var>.</p>

</dd>
<dt><strong class="Mark"><code class="code"><var class="Arg">u</var> = <var class="Arg">v</var> </code></strong></dt>
<dd><p>checks if two free inverse semigroup elements are equal, by comparing their canonical forms.</p>

</dd>
</dl>

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


<div class="chlinkbot"><span class="chlink1">Goto Chapter: </span><a href="chap0.html">Top</a>  <a href="chap1.html">1</a>  <a href="chap2.html">2</a>  <a href="chap3.html">3</a>  <a href="chap4.html">4</a>  <a href="chap5.html">5</a>  <a href="chap6.html">6</a>  <a href="chap7.html">7</a>  <a href="chap8.html">8</a>  <a href="chap9.html">9</a>  <a href="chap10.html">10</a>  <a href="chap11.html">11</a>  <a href="chap12.html">12</a>  <a href="chap13.html">13</a>  <a href="chap14.html">14</a>  <a href="chap15.html">15</a>  <a href="chap16.html">16</a>  <a href="chap17.html">17</a>  <a href="chap18.html">18</a>  <a href="chapBib.html">Bib</a>  <a href="chapInd.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>

Messung V0.5 in Prozent
C=100 H=100 G=100

¤ Dauer der Verarbeitung: 0.66 Sekunden  (vorverarbeitet am  2026-05-06) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge