<h3>2 <span class="Heading">Functionality of the FGA package</span></h3>
<p>This chapter describes methods available from the <strong class="pkg">FGA</strong> package.</p>
<p>In the following, let <var class="Arg">f</var> be a free group created by <code class="code">FreeGroup(<var class="Arg">n</var>)</code>, and let <var class="Arg">u</var>, <var class="Arg">u1</var> and <var class="Arg">u2</var> be finitely generated subgroups of <var class="Arg">f</var> created by <codeclass="code">Group</code> or <code class="code">Subgroup</code>, or computed from some other subgroup of <var class="Arg">f</var>. Let <var class="Arg">elm</var> be an element of <var class="Arg">f</var>.</p>
<p>For example:</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">f := FreeGroup( 2 ); </span>
<free group on the generators [ f1, f2 ]>
<span class="GAPprompt">gap></span> <span class="GAPinput">u := Group( f.1^2, f.2^2, f.1*f.2 );</span>
Group([ f1^2, f2^2, f1*f2 ])
<span class="GAPprompt">gap></span> <span class="GAPinput">u1 := Subgroup( u, [f.1^2, f.1^4*f.2^6] );</span>
Group([ f1^2, f1^4*f2^6 ])
<span class="GAPprompt">gap></span> <span class="GAPinput">elm := f.1;</span>
f1
<span class="GAPprompt">gap></span> <span class="GAPinput">u2 := Normalizer( u, elm );</span>
Group([ f1^2 ])
</pre></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FreeGeneratorsOfGroup</code>( <var class="Arg">u</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>returns a list of free generators of the finitely generated subgroup <var class="Arg">u</var> of a free group.</p>
<p>The elements in this list form an N-reduced set. In addition to being a free (and thus minimal) generating set for <var class="Arg">u</var>, this means that whenever <var class="Arg">v1</var>, <var class="Arg">v2</var> and <var class="Arg">v3</var> are elements or inverses of elements of this list, then</p>
<p>This section lists operations that are already known to <strong class="pkg">GAP</strong>. <strong class="pkg">FGA</strong> installs new methods for them so that they can also be used with free groups. In cases where <strong class="pkg">FGA</strong> installs methods that are usually only used internally, user functions are shown instead.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Normalizer</code>( <var class="Arg">u1</var>, <var class="Arg">u2</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">‣ Normalizer</code>( <var class="Arg">u</var>, <var class="Arg">elm</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>The first variant returns the normalizer of the finitely generated subgroup <var class="Arg">u2</var> in <var class="Arg">u1</var>.</p>
<p>The second variant returns the normalizer of <span class="SimpleMath">⟨ <var class="Arg">elm</var> ⟩</span> in the finitely generated subgroup <var class="Arg">u</var> (see <code class="func">Normalizer</code> (<a href="../../../doc/ref/chap39_mj.html#X87B5370C7DFD401D"><span class="RefLink">Reference: Normalizer</span></a>) in the Reference Manual).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RepresentativeAction</code>( <var class="Arg">u</var>, <var class="Arg">d</var>, <var class="Arg">e</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">‣ IsConjugate</code>( <var class="Arg">u</var>, <var class="Arg">d</var>, <var class="Arg">e</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p><code class="code">RepresentativeAction</code> returns an element <span class="SimpleMath"><var class="Arg">r</var> ∈ <var class="Arg">u</var></span>, where <var class="Arg">u</var> is a finitely generated subgroup of a free group, such that <span class="SimpleMath"><var class="Arg">d</var>^<varclass="Arg">r</var>=<var class="Arg">e</var></span>, or fail, if no such <var class="Arg">r</var> exists. <var class="Arg">d</var> and <var class="Arg">e</var> may be elements or subgroups of <var class="Arg">u</var>.</p>
<p><code class="code">IsConjugate</code> returns a boolean indicating whether such an element <var class="Arg">r</var> exists.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Index</code>( <var class="Arg">u1</var>, <var class="Arg">u2</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">‣ IndexNC</code>( <var class="Arg">u1</var>, <var class="Arg">u2</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>return the index of <var class="Arg">u2</var> in <var class="Arg">u1</var>, where <var class="Arg">u1</var> and <var class="Arg">u2</var> are finitely generated subgroups of a free group. The first variant returns fail if <var class="Arg">u2</var> is not a subgroup of <var class="Arg">u1</var>, the second may return anything in this case.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Intersection</code>( <var class="Arg">u1</var>, <var class="Arg">u2</var>, <var class="Arg">\dots</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the intersection of <var class="Arg">u1</var> and <var class="Arg">u2</var>, where <var class="Arg">u1</var> and <var class="Arg">u2</var> are finitely generated subgroups of a free group.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsSubgroup</code>( <var class="Arg">u1</var>, <var class="Arg">u2</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>tests whether <var class="Arg">u2</var> is a subgroup of <var class="Arg">u1</var>, where <var class="Arg">u1</var> and <var class="Arg">u2</var> are finitely generated subgroups of a free group.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ \=</code>( <var class="Arg">u1</var>, <var class="Arg">u2</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>test whether the two finitely generated subgroups <var class="Arg">u1</var> and <var class="Arg">u2</var> of a free group are equal.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ MinimalGeneratingSet</code>( <var class="Arg">u</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">‣ SmallGeneratingSet</code>( <var class="Arg">u</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">‣ GeneratorsOfGroup</code>( <var class="Arg">u</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>return generating sets for the finitely generated subgroup <var class="Arg">u</var> of a free group. <code class="code">MinimalGeneratingSet</code> and <code class="code">SmallGeneratingSet</code> return the same free generators as <code class="code">FreeGeneratorsOfGroup</code>, which are in fact a minimal generating set. <code class="code">GeneratorsOfGroup</code> also returns these generators, if no other generators were stored at creation time.</p>
<p>It is not only possible to test whether an element is in a finitely generated subgroup of free group, this can also be done constructively. The idiomatic way to do so is by using a homomorphism.</p>
<p>Here is an example that computes how to write <code class="code">f.1^2</code> in the generators <code class="code">a=f1^2*f2^2</code> and <code class="code">b=f.1^2*f.2</code>, checks the result, and then tries to write <code class="code">f.1</code> in the same generators:</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AsWordLetterRepInGenerators</code>( <var class="Arg">elm</var>, <var class="Arg">u</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">‣ AsWordLetterRepInFreeGenerators</code>( <var class="Arg">elm</var>, <var class="Arg">u</var> )</td><td class="tdright">( operation )</td></tr></table></div>
<p>return a letter representation (see Section <a href="../../../doc/ref/chap37_mj.html#X80A9F39582ED296E"><span class="RefLink">Reference: Representations for Associative Words</span></a> in the <strong class="pkg">GAP</strong> Reference Manual) of the given <var class="Arg">elm</var> relative to the generators the group was created with or the free generators as returned by <code class="code">FreeGeneratorsOfGroup</code>.</p>
<p>This means: to get <code class="code">f.1^2</code>, multiply the second of the given generators with the inverse of the first and again with the second; or just take the second free generator.</p>
<h4>2.4 <span class="Heading">Automorphism groups of free groups</span></h4>
<p>The <strong class="pkg">FGA</strong> package knows presentations of the automorphism groups of free groups. It also allows to express an automorphism as word in the generators of these presentations. This sections repeats the <strong class="pkg">GAP</strong> standard methods to do so and shows functions to obtain the generating automorphisms.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ AutomorphismGroup</code>( <var class="Arg">u</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>returns the automorphism group of the finitely generated subgroup <var class="Arg">u</var> of a free group.</p>
<p>Only a few methods will work with this group. But there is a way to obtain an isomorphic finitely presented group:</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsomorphismFpGroup</code>( <var class="Arg">group</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>returns an isomorphism of <var class="Arg">group</var> to a finitely presented group. For automorphism groups of free groups, the <strong class="pkg">FGA</strong> package implements the presentations of <a href="chapBib.html#biBNeumann33">[Neu33]</a>. The finitely presented group itself can then be obtained with the command <code class="code">Range</code>.</p>
<p>Here is an example:</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">f := FreeGroup( 2 );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">a := AutomorphismGroup( f );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">iso := IsomorphismFpGroup( a );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">Range( iso );</span>
<fp group on the generators [ O, P, U ]>
</pre></div>
<p>To express an automorphism as word in the generators of the presentation, just apply the isomorphism obtained from <code class="code">IsomorphismFpGroup</code>.</p>
<p>It is also possible to use <code class="code">aut^iso</code> or <code class="code">Image( iso, aut )</code>. Using <code class="code">Image</code> will perform additional checks on the arguments.</p>
<p>The <strong class="pkg">FGA</strong> package provides a simpler way to create endomorphisms:</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FreeGroupEndomorphismByImages</code>( <var class="Arg">g</var>, <var class="Arg">imgs</var> )</td><tdclass="tdright">( function )</td></tr></table></div>
<p>returns the endomorphism that maps the free generators of the finitely generated subgroup <var class="Arg">g</var> of a free group to the elements listed in <var class="Arg">imgs</var>. You may then apply <code class="code">IsBijective</code> to check whether it is an automorphism.</p>
<p>The following functions return automorphisms that correspond to the generators in the presentation:</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.