<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TensorSum</code>( <var class="Arg">objects</var>, <var class="Arg">...</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>This function is similar in syntax to <code class="func">DirectProduct</code> (<a href="../../../doc/ref/chap49_mj.html#X861BA02C7902A4F4"><span class="RefLink">Reference: DirectProduct</span></a>), and delegates to <code class="code">TensorSumOp</code>; its meaning depends on context, see e.g. <code class="func">TensorSumOp</code> (<a href="chap3_mj.html#X7C0677148107F7FE"><span class="RefLink">3.5-4</span></a>).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ TensorProduct</code>( <var class="Arg">objects</var>, <var class="Arg">...</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>This function is similar in syntax to <code class="func">DirectProduct</code> (<a href="../../../doc/ref/chap49_mj.html#X861BA02C7902A4F4"><span class="RefLink">Reference: DirectProduct</span></a>), and delegates to <code class="code">TensorProductOp</code>; its meaning depends on context, see e.g. <code class="func">TensorProductOp</code> (<a href="chap3_mj.html#X8077C8A47E22FCB5"><span class="RefLink">3.5-5</span></a>).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DirectSum</code>( <var class="Arg">objects</var>, <var class="Arg">...</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>This function is similar in syntax to <code class="func">DirectProduct</code> (<a href="../../../doc/ref/chap49_mj.html#X861BA02C7902A4F4"><span class="RefLink">Reference: DirectProduct</span></a>), and delegates to <code class="code">DirectSumOp</code>; its meaning depends on context, see e.g. <code class="func">DirectSumOp</code> (<a href="chap3_mj.html#X7D248C737D29A7CC"><span class="RefLink">3.5-6</span></a>).</p>
<p>The first command creates a periodic list, specified by its preperiod and period, which must both be lists. If the period is absent, this is actually a finite list.</p>
<p>The second command creates a periodic list by decreeing that the entries after the end of the list start again at position <var class="Arg">i</var>.</p>
<p>The third command creates a list by applying function <var class="Arg">f</var> to all elements of <var class="Arg">l</var>.</p>
<p>The fourth and fifth command compress the newly created periodic list, see <code class="func">CompressPeriodicList</code> (<a href="chap11_mj.html#X7AFE88F37FC58083"><span class="RefLink">11.2-3</span></a>).</p>
<p>The sixth and seventh commands return respectively the preperiod and period of a periodic list.</p>
<p>Most of the methods applied for lists have an obvious equivalent for periodic lists: <code class="func">List</code> (<a href="../../../doc/ref/chap21_mj.html#X7C3DC8BE78DEECDE"><span class="RefLink">Reference: list and non-list difference</span></a>), <code class="func">Filtered</code> (<a href="../../../doc/ref/chap21_mj.html#X7C86D7F7795125F0"><span class="RefLink">Reference: Filtered</span></a>), <code class="func">First</code> (<a href="../../../doc/ref/chap21_mj.html#X82801DFA84E11272"><span class="RefLink">Reference: First</span></a>), <code class="func">ForAll</code> (<a href="../../../doc/ref/chap21_mj.html#X7F06961278166671"><span class="RefLink">Reference: ForAll</span></a>), <code class="func">ForAny</code> (<a href="../../../doc/ref/chap21_mj.html#X7AF82E747A8BDA75"><span class="RefLink">Reference: ForAny</span></a>), <code class="func">Number</code> (<a href="../../../doc/ref/chap21_mj.html#X8179B13D80E935FC"><span class="RefLink">Reference: Number</span></a>).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CompressPeriodicList</code>( <var class="Arg">l</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>This function compresses a periodic list, in replacing the period by a minimal period, and shortening the preperiod. No value is returned, but the list <var class="Arg">l</var> is modified. It remains equal (under <code class="code">=</code>) to the original list.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsConfinal</code>( <var class="Arg">l</var>, <var class="Arg">m</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: <code class="keyw">true</code> if <var class="Arg">l</var> and <var class="Arg">m</var> are eventually equal.</p>
<p>This function tests whether two lists are <em>confinal</em>, i.e. whether, after removal of the same suitable number of elements from both lists, they become equal.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ConfinalityClass</code>( <var class="Arg">l</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The strictly periodic list with same tail as <var class="Arg">l</var>.</p>
<p>There exists a unique periodic list, with no preperiod, which is confinal (see <code class="func">IsConfinal</code> (<a href="chap11_mj.html#X7CA5FA3F7AF9BA3D"><span class="RefLink">11.2-4</span></a>)) to <var class="Arg">l</var>. This strictly periodic list is returned by this command.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ LargestCommonPrefix</code>( <var class="Arg">c</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The longest list that is a prefix of all elements of <var class="Arg">c</var>.</p>
<p>This command computes the longest (finite or periodic) list which is a prefix of all elements of <var class="Arg">c</var>. The argument <var class="Arg">c</var> is a collection of finite and periodic lists.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ WordGrowth</code>( <var class="Arg">g</var>, <var class="Arg">rec(options...)</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">‣ WordGrowth</code>( <var class="Arg">g:</var> <var class="Arg">options...</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">‣ OrbitGrowth</code>( <var class="Arg">g</var>, <var class="Arg">point</var>[, <var class="Arg">limit</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">‣ Ball</code>( <var class="Arg">g</var>, <var class="Arg">radius</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">‣ Sphere</code>( <var class="Arg">g</var>, <var class="Arg">radius</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: The word growth of the semigroup <var class="Arg">g</var>.</p>
<p>This function computes the first terms of growth series associated with the semigroup <var class="Arg">g</var>. The argument <var class="Arg">g</var> can actually be a group/monoid/semigroup, or a list representing that semigroup's generating set.
<p>The behaviour of <code class="code">WordGrowth</code> is controlled via options passed in the second argument, which is a record. They can be combined when reasonable, and are:</p>
<dl>
<dt><strong class="Mark"><code class="code">limit:=n</code></strong></dt>
<dd><p>to specify a limit radius;</p>
</dd>
<dt><strong class="Mark"><code class="code">sphere:=radius</code></strong></dt>
<dd><p>to return the sphere of the specified radius, unless a radius was specified in <code class="code">limit</code>, in which case the value is ignored;</p>
</dd>
<dt><strong class="Mark"><code class="code">spheres:=maxradius</code></strong></dt>
<dd><p>to return the list of spheres of radius between 0 and the specified limit;</p>
</dd>
<dt><strong class="Mark"><code class="code">spheresizes:=maxradius</code></strong></dt>
<dd><p>to return the list sizes of spheres of radius between 0 and the specified limit;</p>
</dd>
<dt><strong class="Mark"><code class="code">ball:=radius</code></strong></dt>
<dd><p>to return the ball of the specified radius;</p>
</dd>
<dt><strong class="Mark"><code class="code">balls:=maxradius</code></strong></dt>
<dd><p>to return the list of balls of radius between 0 and the specified limit;</p>
</dd>
<dt><strong class="Mark"><code class="code">ballsizes:=maxradius</code></strong></dt>
<dd><p>to return the list sizes of balls of radius between 0 and the specified limit;</p>
</dd>
<dt><strong class="Mark"><code class="code">indet:=z</code></strong></dt>
<dd><p>to return the <code class="code">spheresizes</code>, as a polynomial in <code class="code">z</code> (or the first indeterminate if <code class="code">z</code> is not a polynomial;</p>
</dd>
<dt><strong class="Mark"><code class="code">draw:=filename</code></strong></dt>
<dd><p>to create a rendering of the Cayley graph of <var class="Arg">g</var>. Edges are given colours according to the cyclic ordering "red", "blue", "green", "gray", "yellow", "cyan", "orange", "purple". If <code class="code">filename</code> is a string, the graph is appended, in <code class="keyw">dot</code> format, to that file. Otherwise, the output is converted to Postscript using the program <code class="keyw">neato</code> from the <strong class="pkg">graphviz</strong> package, and displayed in a separate X window using the program <strong class="pkg">display</strong> or <strong class="pkg">rsvg-view</strong>. This works on UNIX systems.</p>
<p>It is assumed, but not checked, that <strong class="pkg">graphviz</strong> and <strong class="pkg">display</strong>/<strong class="pkg">rsvg-view</strong> are properly installed on the system. The option <code class="keyw">usesvg</code> requests the use of <strong class="pkg">rsvg-view</strong>; by default, <strong class="pkg">display</strong> is used.</p>
</dd>
<dt><strong class="Mark"><code class="code">point:=p</code></strong></dt>
<dd><p>to compute the growth of the orbit of <code class="code">p</code> under <var class="Arg">g</var>, rather than the growth of <var class="Arg">g</var>.</p>
</dd>
<dt><strong class="Mark"><code class="code">act:=function(point,g) ... end</code></strong></dt>
<dd><p>to compute the action with a specific function, rather than the default <code class="code">OnPoints</code>.</p>
</dd>
<dt><strong class="Mark"><code class="code">track:=true</code></strong></dt>
<dd><p>to keep track of a word in the generators that gives the element. This affects the "ball", "balls", "sphere" and "spheres" commands, where the result returned is a 3-element list: the first entry is the original results; the second entry is a homomorphism from a free group/monoid/semigroup; and the third entry contains the words corresponding to the first entry via the homomorphism.</p>
</dd>
</dl>
<p>If the first argument is an integer <code class="code">n</code> and not a record, the command is interpreted as <code class="code">WordGrowth(...,rec(spheresizes:=n))</code>.</p>
<p><code class="code">WordGrowth(...,rec(draw:=true))</code> may be abbreviated as <code class="code">Draw(...)</code>; <code class="code">WordGrowth(...,rec(ball:=n))</code> may be abbreviated as <code class="code">Ball(...,n)</code>; <code class="code">WordGrowth(...,rec(sphere:=n))</code> may be abbreviated as <code class="code">Sphere(...,n)</code>;</p>
<p>Note that the orbit growth of <code class="code">[/2]</code> is constant 1, while that of <code class="code">[/1]</code> is constant 2. The following code would find the point with maximal orbit growth of a semigroup acting on the integers (for example, constructed with <code class="func">PermGroup</code> (<a href="chap7_mj.html#X7C6D7BA0818A3A3D"><span class="RefLink">7.2-1</span></a>)):</p>
<p>For example, the command <code class="code">Draw(BasilicaGroup,rec(point:=PeriodicList([],[2,1]),limit:=3));</code> produces (in a new window) the following picture: <img alt="Nucleus" src="basilica-ball.jpg"></p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ShortGroupRelations</code>( <var class="Arg">g</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">‣ ShortMonoidRelations</code>( <var class="Arg">g</var>, <var class="Arg">n</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A list of relations between words over <var class="Arg">g</var>, of length at most <var class="Arg">n</var>.</p>
<p>This function assumes that <var class="Arg">g</var> is a list of monoid elements. it searches for products of at most <var class="Arg">n</var> elements over <var class="Arg">g</var> that are equal.</p>
<p>In its first form, it returns a list of words in a free group <code class="code">f</code> of rank the length of <var class="Arg">g</var>, that are trivial in <var class="Arg">g</var>. The first argument may be a group, in which case its symmetric generating set is considered.</p>
<p>In its second form, it returns a list of pairs <code class="code">[l,r]</code>, where <code class="code">l</code> and <code class="code">r</code> are words in a free monoid <code class="code">f</code> of rank the length of <var class="Arg">g</var>, that are equal in <var class="Arg">g</var>. The first argument may be a monoid, in which case its monoid generating set is considered.</p>
<p>This command does not construct all such pairs; rather, it returns a small set, in the hope that it may serve as a presentation for the monoid generated by <var class="Arg">g</var>.</p>
<p>The first element of the list returned is actually not a relation: it is a homomorphism from <code class="code">f</code> to [the group/monoid generated by] <var class="Arg">g</var>.</p>
<p>This command produces words in the free group/monoid/semigroup generated by <var class="Arg">g</var>'s generators that express elements of the set s. Elements of length at most AbsoluteValue(n) are searched; if n is non-negative then at most one element is returned. The value n=infinity is allowed.
<p>The second argument may be either a list, a predicate (i.e. a function returning <code class="keyw">true</code> or <code class="keyw">false</code>) or an element.</p>
<p>The function returns a list of words in the free group/monoid/semigroup; the first entry of the list is a homomorphism from the free group/monoid/semigroup to <var class="Arg">g</var>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">l := ShortMonoidWordInSet(Group((1,2),(2,3),(3,4)),</span>
[(1,2,3,4),(4,3,2,1)],-3);
[ MappingByFunction( <free monoid on the generators [ m1, m2, m3 ]>, Group(
[ (1,2), (2,3), (3,4) ]), function( w ) ... end ), m3*m2*m1, m1*m2*m3 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">f := Remove(l,1);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">List(l,x->x^f);</span>
[ (1,2,3,4), (1,4,3,2) ]
<span class="GAPprompt">gap></span> <span class="GAPinput">ShortMonoidWordInSet(GrigorchukGroup,</span>
[Comm(GrigorchukGroup.1,GrigorchukGroup.2)],4);
[ MappingByFunction( <free monoid on the generators [ m1, m2, m3, m4
]>, <self-similar monoid over [ 1 .. 2 ] with
4 generators>, function( w ) ... end ), m1*m2*m1*m2 ]
</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SurfaceBraidFpGroup</code>( <var class="Arg">n</var>, <var class="Arg">g</var>, <var class="Arg">p</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">‣ PureSurfaceBraidFpGroup</code>( <var class="Arg">n</var>, <var class="Arg">g</var>, <var class="Arg">p</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: The [pure] surface braid group on <var class="Arg">n</var> strands.</p>
<p>This function creates a finitely presented group, isomorphic to the [pure] braid group on <varclass="Arg">n</var> strands of the surface of genus <var class="Arg">g</var>, with <var class="Arg">p</var> punctures. In particular, <code class="code">SurfaceBraidFpGroup(n,0,1)</code> is the usual braid group (on the disc).</p>
<p>The presentation comes from <a href="chapBib_mj.html#biBMR2043362">[Bel04]</a>. The first <span class="SimpleMath">\(2g\)</span> generators are the standard <span class="SimpleMath">\(a_i,b_i\)</span> surface generators; the next <span class="SimpleMath">\(n-1\)</span> are the standard <span class="SimpleMath">\(s_i\)</span> braid generators; and the last are the extra <span class="SimpleMath">\(z\)</span> generators.</p>
<p>The pure surface braid group is the kernel of the natural map from the surface braid group to the symmetric group on <var class="Arg">n</var> points, defined by sending <span class="SimpleMath">\(a_i,b_i,z\)</span> to the identity and <span class="SimpleMath">\(s_i\)</span> to the transposition <code class="code">(i,i+1)</code>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CharneyBraidFpGroup</code>( <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: The braid group on <var class="Arg">n</var> strands.</p>
<p>This function creates a finitely presented group, isomorphic to the braid group on <var class="Arg">n</var> strands (on the disc). It is isomorphic to <code class="code">SurfaceBraidFpGroup(n,0,1)</code>, but has a different presentation, due to Charney (<a href="chapBib_mj.html#biBMR1314589">[Cha95]</a>), with one generator per non-trivial permutation of <var class="Arg">n</var> points.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ArtinRepresentation</code>( <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: The braid group's representation on FreeGroup(n).
<p>This function creates a Artin's representatin, a homomorphism from the braid group on n strands (on the disc) into the automorphism group of a free group of rank n.
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DirichletSeries</code>( )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DirichletSeries</code>( <var class="Arg">maxdeg</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">‣ DirichletSeries</code>( <var class="Arg">indices</var>, <var class="Arg">coeffs</var>[, <var class="Arg">maxdeg</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">‣ DirichletSeries</code>( <var class="Arg">series</var>, <var class="Arg">maxdeg</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Creates a new Dirichlet series, namely, a formal power series of the form <span class="SimpleMath">\(f(s)=\sum_{n\ge1} a(n) n^{-s}\)</span>. Such series have a maximal degree, which may be <code class="keyw">infinity</code>, and may be added or multiplied as polynomials.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ShrunkDirichletSeries</code>( <var class="Arg">f</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Returns: The series <var class="Arg">f</var>, with maximal precision set to its maximal degree.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsProjectiveRepresentation</code>( <var class="Arg">rep</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">‣ IsLinearRepresentation</code>( <var class="Arg">rep</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>A projective representation is a mapping to matrices, that is multiplicative up to scalars. This property is set by the following functions that create projective representations.</p>
<p>The second property describes those projective representations that are in fact homomorphisms.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DegreeOfProjectiveRepresentation</code>( <var class="Arg">rep</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: The dimension of the matrices in the image of <var class="Arg">rep</var>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ StringByInt</code>( <var class="Arg">n</var>[, <var class="Arg">b</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: A string representing <var class="Arg">n</var> in base <var class="Arg">b</var>.</p>
<p>This function converts a positive integer to string. It accepts an optional second argument, which is a base in which to print <var class="Arg">n</var>. By default, <var class="Arg">b</var> is 2.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ PositionInTower</code>( <var class="Arg">t</var>, <var class="Arg">x</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: The largest index such that <code class="code">t[i]</code> contains <var class="Arg">x</var>.</p>
<p>This function assumes <var class="Arg">t</var> is a descending tower of domains, such as that constructed by <code class="code">LowerCentralSeries</code>. It returns the largest integer <code class="code">i</code> such that <code class="code">t[i]</code> contains <var class="Arg">x</var>; in case the tower ends precisely with <var class="Arg">x</var>, the value <code class="keyw">infinity</code> is returned.</p>
<p><var class="Arg">x</var> can be an element or a subdomain of <code class="code">t[1]</code>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RenameSubobjects</code>( <var class="Arg">obj</var>, <var class="Arg">refobj</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>This function traverses <var class="Arg">obj</var> if it is a list or a record, and, when it finds an element which has no name, but is equal (in the sense of <code class="code">=</code>) to an element of <var class="Arg">refobj</var>, assigns it the name of that element.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ CoefficientsInAbelianExtension</code>( <var class="Arg">x</var>, <var class="Arg">b</var>, <var class="Arg">G</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: The coefficients in <var class="Arg">b</var> of the element <var class="Arg">x</var>, modulo <var class="Arg">G</var>.</p>
<p>If <var class="Arg">b</var> is a list of group elements <span class="SimpleMath">\(b_1,\ldots,b_k\)</span>, and <span class="SimpleMath">\(H=\langle G,b_1,\ldots,b_k\rangle\)</span> contains <var class="Arg">G</var> as a normal subgroup, and <span class="SimpleMath">\(H/G\)</span> is abelian and <span class="SimpleMath">\(x\in H\)</span>, then this function computes exponents <span class="SimpleMath">\(e_1,\ldots,e_k\)</span> such that <span class="SimpleMath">\(\prod b_i^{e_i}G=xG\)</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MagmaEndomorphismByImagesNC</code>( <var class="Arg">f</var>, <var class="Arg">im</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: An endomorphism of <var class="Arg">f</var>.</p>
<p>This function constructs an endomorphism of the group,monoid or semigroup <var class="Arg">f</var> specified by sending generator number <span class="SimpleMath">\(i\)</span> to the <span class="SimpleMath">\(i\)</span>th entry in <var class="Arg">im</var>. It is a shortcut for a call to <code class="code">GroupHomomorphismByImagesNC</code> or <code class="code">MagmaHomomorphismByFunctionNC(...,MappedWord(...))</code>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MagmaHomomorphismByImagesNC</code>( <var class="Arg">f</var>, <var class="Arg">g</var>, <var class="Arg">im</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: An homomorphism from <var class="Arg">f</var> to <var class="Arg">g</var>.</p>
<p>This function constructs a homomorphism of the group,monoid or semigroup <var class="Arg">f</var> specified by sending generator number <span class="SimpleMath">\(i\)</span> to the <span class="SimpleMath">\(i\)</span>th entry in <var class="Arg">im</var>. It is a shortcut for a call to <codeclass="code">GroupHomomorphismByImagesNC</code> or <code class="code">MagmaHomomorphismByFunctionNC(...,MappedWord(...))</code>.</p>
<p>The first command creates a FIFO, with an optional list initializing it.</p>
<p>The second and third commands add an element, or append a list, to the FIFO.</p>
<p>Elements are removed via <code class="code">NextIterator(f)</code>, and the FIFO is tested for emptyness via <code class="code">IsDoneIterator(f)</code>. Thus, a typical use is the following code, which tests in breadth-first manner that all numbers in <code class="code">[1..1000]</code> have a successor which is prime:</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">f := NewFIFO([1..10000]);</span>
<iterator>
<span class="GAPprompt">gap></span> <span class="GAPinput">for i in f do if not IsPrime(i) then Add(f,i+1); fi; od;</span>
</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ProductIdeal</code>( <var class="Arg">a</var>, <var class="Arg">b</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">‣ ProductBOIIdeal</code>( <var class="Arg">a</var>, <var class="Arg">b</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: the product of the ideals <var class="Arg">a</var> and <var class="Arg">b</var>.</p>
<p>The first command computes the product of the left ideal <var class="Arg">a</var> and the right ideal <var class="Arg">b</var>. If they are not appropriately-sided ideals, the command first attempts to convert them.</p>
<p>The second command assumes that the ring of these ideals has a basis made of invertible elements. It is then much easier to compute the product.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ DimensionSeries</code>( <var class="Arg">a</var>[, <var class="Arg">n</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>Returns: A nested list of ideals in the algebra-with-one <var class="Arg">a</var>.</p>
<p>This command computes the powers of the augmentation ideal of <var class="Arg">a</var>, and returns their list. The list stops when the list becomes stationary.</p>
<p>The optional second argument gives a limit to the number of terms to put in the series.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">a := ThinnedAlgebraWithOne(GF(2),GrigorchukGroup);</span>
<self-similar algebra-with-one on alphabet GF(2)^2 with 4 generators>
<span class="GAPprompt">gap></span> <span class="GAPinput">q := MatrixQuotient(a,3);</span>
<algebra-with-one of dimension 22 over GF(2)>
<span class="GAPprompt">gap></span> <span class="GAPinput">l := DimensionSeries(q);</span>
[ <two-sided ideal in <algebra-with-one of dimension 22 over GF(2)>, (5 generators)>,
<two-sided ideal in <algebra-with-one of dimension 22 over GF(2)>, (dimension 21)>,
<two-sided ideal in <algebra-with-one of dimension 22 over GF(2)>, (dimension 18)>,
<two-sided ideal in <algebra-with-one of dimension 22 over GF(2)>, (dimension 14)>,
<two-sided ideal in <algebra-with-one of dimension 22 over GF(2)>, (dimension 10)>,
<two-sided ideal in <algebra-with-one of dimension 22 over GF(2)>, (dimension 6)>,
<two-sided ideal in <algebra-with-one of dimension 22 over GF(2)>, (dimension 3)>,
<two-sided ideal in <algebra-with-one of dimension 22 over GF(2)>, (dimension 1)>,
<algebra of dimension 0 over GF(2)> ]
</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AlgebraHomomorphismByFunction</code>( <var class="Arg">A</var>, <var class="Arg">B</var>, <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AlgebraWithOneHomomorphismByFunction</code>( <var class="Arg">A</var>, <var class="Arg">B</var>, <var class="Arg">f</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Returns: A homomorphism from the algebra <var class="Arg">A</var> to the algebra <var class="Arg">B</var>.</p>
<p>These functions construct an algebra homomorphism from a one-argument function. They do not check that the function actually defines a homomorphism.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsFpLieAlgebra</code></td><td class="tdright">( filter )</td></tr></table></div>
<p>The category of Lie algebras coming from a finitely presented group. They appear as the <code class="func">JenningsLieAlgebra</code> (<a href="../../../doc/ref/chap64_mj.html#X8692ADD581359CA1"><span class="RefLink">Reference: JenningsLieAlgebra</span></a>) of a finitely presented group.</p>
<p>If <code class="code">G</code> is an infinite, finitely presented group, then the original implementation of <code class="func">JenningsLieAlgebra</code> (<a href="../../../doc/ref/chap64_mj.html#X8692ADD581359CA1"><span class="RefLink">Reference: JenningsLieAlgebra</span></a>) does not return. On the other hand, the implementation in <strong class="pkg">FR</strong> constructs a graded object, for which the graded components are computed on-demand; see <code class="func">JenningsLieAlgebra</code> (<a href="chap11_mj.html#X8692ADD581359CA1"><span class="RefLink">11.8-14</span></a>).</p>
<p>This method does not compute the Jennings Lie algebra <em>per se</em>; it merely constructs a placeholder to contain the result.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">f := FreeGroup(4);</span>
<free group on the generators [ f1, f2, f3, f4 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">surfacegp := f/[Comm(f.1,f.2)*Comm(f.3,f.4)];</span>
<fp group of size infinity on the generators [ f1, f2, f3, f4 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">j := JenningsLieAlgebra(Rationals,surfgp);</span>
<FP Lie algebra over Rationals>
<span class="GAPprompt">gap></span> <span class="GAPinput">List([1..4],Grading(j).hom_components);</span>
[ <vector space over Rationals, with 4 generators>,
<vector space over Rationals, with 5 generators>,
<vector space over Rationals, with 16 generators>,
<vector space over Rationals, with 45 generators> ]
<span class="GAPprompt">gap></span> <span class="GAPinput">B := Basis(Grading(j).hom_components(1));</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">B[1]*B[2]+B[3]*B[4];</span>
<zero Lie element>
</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SolutionMatModN</code>( <var class="Arg">mat</var>, <var class="Arg">vec</var>, <var class="Arg">N</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Solve the linear system <code class="code">sol*mat=vec</code> modulo <var class="Arg">N</var>. The arguments are assumed to be an integer matrix and vector. Either returns an integer solution, or <code class="keyw">fail</code> if no such solution exists.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ SolutionMatMod1</code>( <var class="Arg">mat</var>, <var class="Arg">vec</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>Solve the linear system <code class="code">sol*mat=vec</code> in <span class="SimpleMath">\(Q/Z\)</span>. The arguments are assumed to be rational matrices. Assuming there are finitely many solutions, returns them all.</p>
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.