<h3>7 <span class="Heading">Graphs of Groups and Groupoids</span></h3>
<p>This package was originally designed to implement <em>graphs of groups</em>, a notion introduced by Serre in <a href="chapBib_mj.html#biBSerre">[Ser80]</a>. It was only when this was extended to <em>graphs of groupoids</em> that the functions for groupoids, described in the previous chapters, were required. The methods described here are based on Philip Higgins' paper [Hig76]. For further details see Chapter 2 of [Moo01]. Since a graph of groups involves a directed graph, with a group associated to each vertex and arc, we first define digraphs with edges weighted by the generators of a free group.
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FpWeightedDigraph</code>( <var class="Arg">verts</var>, <var class="Arg">arcs</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">‣ IsFpWeightedDigraph</code>( <var class="Arg">dig</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">‣ InvolutoryArcs</code>( <var class="Arg">dig</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>A <em>weighted digraph</em> is a record with two components: <em>vertices</em>, which are usually taken to be positive integers (to distinguish them from the objects in a groupoid); and <em>arcs</em>, which take the form of 3-element lists <code class="code">[weight,tail,head]</code>. The <em>tail</em> and <em>head</em> are the two vertices of the arc. The <em>weight</em> is taken to be an element of a finitely presented group, so as to produce digraphs of type <code class="code">IsFpWeightedDigraph</code>.</p>
<p>The example illustrates the fact that we require arcs to be defined in involutory pairs, as though they were inverse elements in a groupoid. We may in future decide just to give <code class="code">[y,5,6]</code> as the data and get the function to construct the reverse edge. The attribute <code class="code">InvolutoryArcs</code> returns a list of the positions of each inverse arc in the list of arcs. In the second example the graph is a complete digraph on three vertices.</p>
<ul>
<li><p>a digraph with involutory pairs of arcs;</p>
</li>
<li><p>a <em>vertex group</em> associated to each vertex;</p>
</li>
<li><p>a group associated to each pair of arcs;</p>
</li>
<li><p>an injective homomorphism from each arc group to the group at the head of the arc.</p>
</li>
</ul>
<p>We have found it more convenient to associate to each arc:</p>
<ul>
<li><p>a subgroup of the vertex group at the tail;</p>
</li>
<li><p>a subgroup of the vertex group at the head;</p>
</li>
<li><p>an isomorphism between these subgroups, such that each involutory pair of arcs determines inverse isomorphisms.</p>
</li>
</ul>
<p>These two viewpoints are clearly equivalent.</p>
<p>In this implementation we require that all subgroups are of finite index in the vertex groups.</p>
<p>The three attributes provide a means of calling the three items of data in the construction of a graph of groups.</p>
<p>We shall be representing free products with amalgamation of groups and HNN extensions of groups in Section <a href="chap7_mj.html#X7D99A7B37B36BAA8"><span class="RefLink">7.4</span></a>. So we take as our first example the trefoil group with generators <span class="SimpleMath">\(a,b\)</span> and relation <span class="SimpleMath">\(a^3=b^2\)</span>. For this we take digraph <code class="code">D1</code> above with an infinite cyclic group at each vertex, generated by <span class="SimpleMath">\(a\)</span> and <span class="SimpleMath">\(b\)</span> respectively. The two subgroups will be generated by <span class="SimpleMath">\(a^3\)</span> and <span class="SimpleMath">\(b^2\)</span> with the obvious isomorphisms.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ IsGraphOfFpGroups</code>( <var class="Arg">gg</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">‣ IsGraphOfPcGroups</code>( <var class="Arg">gg</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">‣ IsGraphOfPermGroups</code>( <var class="Arg">gg</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>This is a list of properties to be expected of a graph of groups. In principle any type of group known to <strong class="pkg">GAP</strong> may be used as vertex groups, though these types are not normally mixed in a single structure.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ RightTransversalsOfGraphOfGroups</code>( <var class="Arg">gg</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">‣ LeftTransversalsOfGraphOfGroups</code>( <var class="Arg">gg</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>Computation with graph of groups words will require, for each arc subgroup <code class="code">ha</code>, a set of representatives for the left cosets of <code class="code">ha</code> in the tail vertex group. As already pointed out, we require subgroups of finite index. Since <strong class="pkg">GAP</strong> prefers to provide right cosets, we obtain the right representatives first, and then invert them.</p>
<p>When the vertex groups are of type <code class="code">FpGroup</code> we shall require normal forms for these groups, so we assume that such vertex groups are provided with Knuth Bendix rewriting systems using functions from the main <strong class="pkg">GAP</strong> library, (e.g. <code class="code">IsomorphismFpSemigroup</code>).</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GraphOfGroupsWord</code>( <var class="Arg">gg</var>, <var class="Arg">tv</var>, <var class="Arg">list</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">‣ IsGraphOfGroupsWord</code>( <var class="Arg">w</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">‣ GraphOfGroupsOfWord</code>( <var class="Arg">w</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">‣ WordOfGraphOfGroupsWord</code>( <var class="Arg">w</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">‣ TailOfGraphOfGroupsWord</code>( <var class="Arg">w</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">‣ HeadOfGraphOfGroupsWord</code>( <var class="Arg">w</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>If <code class="code">G</code> is a graph of groups with underlying digraph <code class="code">D</code>, the following groupoids may be considered. First there is the free groupoid or path groupoid on <code class="code">D</code>. Since we want each involutory pair of arcs to represent inverse elements in the groupoid, we quotient out by the relations <code class="code">y^-1 = ybar</code> to obtain <code class="code">PG(D)</code>. Secondly, there is the discrete groupoid <code class="code">VG(D)</code>, namely the union of all the vertex groups. Since these two groupoids have the same object set (the vertices of <code class="code">D</code>) we can form <code class="code">A(G)</code>, the free product of <code class="code">PG(D)</code> and <code class="code">VG(D)</code> amalgamated over the vertices. For further details of this universal groupoid construction see <a href="chapBib_mj.html#biBemma-thesis">[Moo01]</a>. (Note that these groupoids are not implemented in this package.)</p>
<p>An element of <code class="code">A(G)</code> is a graph of groups word which may be represented by a list of the form <span class="SimpleMath">\(w = [g_1,y_1,g_2,y_2,...,g_n,y_n,g_{n+1}]\)</span>. Here each <span class="SimpleMath">\(y_i\)</span> is an arc of <code class="code">D</code>; the head of <span class="SimpleMath">\(y_{i-1}\)</span> is a vertex <span class="SimpleMath">\(v_i\)</span> which is also the tail of <span class="SimpleMath">\(y_i\)</span>; and <span class="SimpleMath">\(g_i\)</span> is an element of the vertex group at <span class="SimpleMath">\(v_i\)</span>.</p>
<p>So a graph of groups word requires as data the graph of groups; the tail vertex for the word; and a list of arcs and group elements. We may specify each arc by its position in the list of arcs.</p>
<p>In the following example, where <code class="code">gw1</code> is a word in the trefoil graph of groups, the <span class="SimpleMath">\(y_i\)</span> are specified by their positions in <code class="code">A1</code>. Both arcs are traversed twice, so the resulting word is a loop at vertex <span class="SimpleMath">\(5\)</span>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ReducedGraphOfGroupsWord</code>( <var class="Arg">w</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">‣ IsReducedGraphOfGroupsWord</code>( <var class="Arg">w</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>A graph of groups word may be reduced in two ways, to give a normal form. Firstly, if part of the word has the form <code class="code">[yi, identity, yibar]</code> then this subword may be omitted. This is known as a length reduction. Secondly there are coset reductions. Working from the left-hand end of the word, subwords of the form <span class="SimpleMath">\([g_i,y_i,g_{i+1}]\)</span> are replaced by <span class="SimpleMath">\([t_i,y_i,m_i(h_i)*g_{i+1}]\)</span> where <span class="SimpleMath">\(g_i = t_i*h_i\)</span> is the unique factorisation of <span class="SimpleMath">\(g_i\)</span> as a left coset representative times an element of the arc subgroup, and <span class="SimpleMath">\(m_i\)</span> is the isomorphism associated to <span class="SimpleMath">\(y_i\)</span>. Thus we may consider a coset reduction as passing a subgroup element along an arc. The resulting normal form (if no length reductions have taken place) is then <span class="SimpleMath">\([t_1,y_1,t_2,y_2,...,t_n,y_n,k]\)</span> for some <span class="SimpleMath">\(k\)</span> in the head group of <span class="SimpleMath">\(y_n\)</span>. For further details see Section 2.2 of <a href="chapBib_mj.html#biBemma-thesis">[Moo01]</a>.</p>
<p>The reduction of the word <code class="code">gw1</code> in our example includes one length reduction. The four stages of the reduction are as follows:</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ FreeProductWithAmalgamation</code>( <var class="Arg">gp1</var>, <var class="Arg">gp2</var>, <var class="Arg">iso</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">‣ FreeProductWithAmalgamationInfo</code>( <var class="Arg">fpa</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">‣ IsFreeProductWithAmalgamation</code>( <var class="Arg">fpa</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">‣ GraphOfGroupsRewritingSystem</code>( <var class="Arg">fpa</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">‣ NormalFormGGRWS</code>( <var class="Arg">fpa</var>, <var class="Arg">word</var> )</td><td class="tdright">( attribute )</td></tr></table></div>
<p>As we have seen with the trefoil group example in Section <a href="chap7_mj.html#X7BAFCA3680E478AE"><span class="RefLink">7.2</span></a>, graphs of groups can be used to obtain a normal form for free products with amalgamation <span class="SimpleMath">\(G_1 *_H G_2\)</span> when <span class="SimpleMath">\(G_1, G_2\)</span> both have rewrite systems, and <span class="SimpleMath">\(H\)</span> is of finite index in both <span class="SimpleMath">\(G_1\)</span> and <span class="SimpleMath">\(G_2\)</span>.</p>
<p>When <code class="code">gp1</code> and <code class="code">gp2</code> are fp-groups, the operation <code class="code">FreeProductWithAmalgamation</code> constructs the required fp-group. When the two groups are permutation groups, the <code class="code">IsomorphismFpGroup</code> operation is called on both <code class="code">gp1</code> and <code class="code">gp2</code>, and the resulting isomorphism is transported to one between the two new subgroups.</p>
<p>The attribute <code class="code">GraphOfGroupsRewritingSystem</code> of <code class="code">fpa</code> is the graph of groups which has underlying digraph <code class="code">D1</code>, with two vertices and two arcs; the two groups as vertex groups; and the specified isomorphisms on the arcs. Despite the name, graphs of groups constructed in this way <em>do not</em> belong to the category <code class="code">IsRewritingSystem</code>. This anomaly may be dealt with when time permits.</p>
<p>The example below shows a computation in the the free product of the symmetric <code class="code">s3</code> and the alternating <code class="code">a4</code>, amalgamated over a cyclic subgroup <code class="code">c3</code>.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ ReducedImageElm</code>( <var class="Arg">hom</var>, <var class="Arg">eml</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">‣ IsMappingToGroupWithGGRWS</code>( <var class="Arg">map</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">‣ Embedding</code>( <var class="Arg">fpa</var>, <var class="Arg">num</var> )</td><td class="tdright">( method )</td></tr></table></div>
<p>All fpa-groups are provided with a record attribute, <code class="code">FreeProductWithAmalgamationInfo(fpa)</code> which is a record storing the groups, subgroups and isomorphism involved in their construction. This information record also contains the embeddings of the two groups into the product. The operation <code class="code">ReducedImageElm</code>, applied to a homomorphism <span class="SimpleMath">\(h\)</span> of type <code class="code">IsMappingToGroupWithGGRWS</code> and an element <span class="SimpleMath">\(x\)</span> of the source, finds the usual <code class="code">ImageElm(h,x)</code> and then reduces this to its normal form using the graph of groups rewriting system.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ HnnExtension</code>( <var class="Arg">gp</var>, <var class="Arg">iso</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">‣ HnnExtensionInfo</code>( <var class="Arg">gp</var>, <var class="Arg">iso</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">‣ IsHnnExtension</code>( <var class="Arg">hnn</var> )</td><td class="tdright">( property )</td></tr></table></div>
<p>For <em>HNN extensions</em>, the appropriate graph of groups has underlying digraph with just one vertex and one pair of loops, weighted with <code class="code">FpGroup</code> generators <span class="SimpleMath">\(z,z^{-1}\)</span>. There is one vertex group <code class="code">G</code>, two isomorphic subgroups <code class="code">H1,H2</code> of <code class="code">G</code>, with the isomorphism and its inverse on the loops. The presentation of the extension has one more generator than that of <code class="code">G</code> and corresponds to the generator <span class="SimpleMath">\(z\)</span>.</p>
<p>The functions <code class="code">GraphOfGroupsRewritingSystem</code> and <code class="code">NormalFormGGRWS</code> may be applied to hnn-groups as well as to fpa-groups.</p>
<p>In the example we take <code class="code">G=a4</code> and the two subgroups are cyclic groups of order 3.</p>
<p>As with fpa-groups, hnn-groups are provided with a record attribute, <code class="code">HnnExtensionInfo(hnn)</code>, storing the group, subgroups and isomorphism involved in their construction.</p>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ GraphOfGroupoids</code>( <var class="Arg">dig</var>, <var class="Arg">gpds</var>, <var class="Arg">subgpds</var>, <var class="Arg">isos</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">‣ IsGraphOfPermGroupoids</code>( <var class="Arg">gg</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">‣ IsGraphOfFpGroupoids</code>( <var class="Arg">gg</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">‣ GroupoidsOfGraphOfGroupoids</code>( <var class="Arg">gg</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">‣ DigraphOfGraphOfGroupoids</code>( <var class="Arg">gg</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">‣ SubgroupoidsOfGraphOfGroupoids</code>( <var class="Arg">gg</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">‣ IsomorphismsOfGraphOfGroupoids</code>( <var class="Arg">gg</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">‣ RightTransversalsOfGraphOfGroupoids</code>( <var class="Arg">gg</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">‣ LeftTransversalsOfGraphOfGroupoids</code>( <var class="Arg">gg</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">‣ IsGraphOfGroupoids</code>( <var class="Arg">dig</var> )</td><td class="tdright">( category )</td></tr></table></div>
<p>Graphs of groups generalise naturally to graphs of groupoids, forming the class <code class="code">IsGraphOfGroupoids</code>. There is now a groupoid at each vertex and the isomorphism on an arc identifies wide subgroupoids at the tail and at the head. Since all subgroupoids are wide, every groupoid in a connected constituent of the graph has the same number of objects, but there is no requirement that the object sets are all the same.</p>
<p>The example below generalises the trefoil group example in subsection 4.4.1, taking at each vertex of <code class="code">D1</code> a two-object groupoid with a free group on one generator, and full subgroupoids with groups <span class="SimpleMath">\(\langle a^3 \rangle\)</span> and <spanclass="SimpleMath">\(\langle b^2 \rangle\)</span>.</p>
</li>
</ul>
<p>So the resulting word is <span class="SimpleMath">\(~(a^{-1} : -1, -1)(b^{-1} : -3, -3)(a^{10} : -1, -2)\)</span>. Notice that all the arrows except the final one are loops.</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.0.52Bemerkung:
¤
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.