Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 5e1854624d3bc613bdd0dd13d1ef9ac7 > files > 3184

gap-system-4.4.12-5mdv2010.0.i586.rpm

<html><head><title>[SONATA] 1 Supportive functions for groups</title></head>
<body text="#000000" bgcolor="#ffffff">
[<a href = "chapters.htm">Up</a>] [<a href ="CHAP002.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
<h1>1 Supportive functions for groups</h1><p>
<P>
<H3>Sections</H3>
<oL>
<li> <A HREF="CHAP001.htm#SECT001">Predefined groups</a>
<li> <A HREF="CHAP001.htm#SECT002">Operation tables for groups</a>
<li> <A HREF="CHAP001.htm#SECT003">Group endomorphisms</a>
<li> <A HREF="CHAP001.htm#SECT004">Group automorphisms</a>
<li> <A HREF="CHAP001.htm#SECT005">Inner automorphisms of a group</a>
<li> <A HREF="CHAP001.htm#SECT006">Isomorphic groups</a>
<li> <A HREF="CHAP001.htm#SECT007">Subgroups of a group</a>
<li> <A HREF="CHAP001.htm#SECT008">Normal subgroups generated by a single element</a>
<li> <A HREF="CHAP001.htm#SECT009">Invariant subgroups</a>
<li> <A HREF="CHAP001.htm#SECT010">Coset representatives</a>
<li> <A HREF="CHAP001.htm#SECT011">Nilpotency class</a>
<li> <A HREF="CHAP001.htm#SECT012">Scott length</a>
<li> <A HREF="CHAP001.htm#SECT013">Other useful functions for groups</a>
</ol><p>
<p>
In order to support nearring calculations, a few functions for groups had to 
be added to the standard <font face="Gill Sans,Helvetica,Arial">GAP</font> group library functions. 
<p>
The functions described here can be found in the source files
<code>grpend.g?</code> and <code>grpsupp.g?</code>
<p>
<p>
<h2><a name="SECT001">1.1 Predefined groups</a></h2>
<p><p>
All groups of order <var>2</var> to <var>32</var> are predefined. They can be accessed
by variables of the kind <code>GTW</code><var>o</var><code>_</code><var>n</var><code></code> where <var>o</var> defines the order
of the group and <var>n</var> the number of the group of order <var>o</var> as they
appear in citethomaswood80:GT . For example, <code>GTW16_6</code> defines the
group of Thomas -- Wood type <var>16/6</var>, which is actually <var>D<sub>4</sub> times
C<sub>2</sub></var>.
<p>
Alternatively, these groups can be accessed via the function
<p>
<a name = "SECT001"></a>
<li><code>TWGroup( </code><var>o</var><code>, </code><var>n</var><code> )</code>
<p>
with <var>o</var> and <var>n</var> as above. In addition, all these groups are stored in the
list ttGroupList.
<p>
Conversely, for any group <var>G</var> of order at most 32,
<p>
<a name = "SECT001"></a>
<li><code>IdTWGroup( </code><var>G</var><code> )</code>
<p>
returns a pair <code>[</code><var>o</var><code>,</code><var>n</var><code>]</code>, meaning that <var>G</var> is isomorphic to the group
<var>o/n</var>.
<p>
<pre>
    gap&gt; G := GTW6_2;               
    6/2
    gap&gt; H := TWGroup( 4, 2 );
    4/2
    gap&gt; D := DirectProduct( G, H );
    Group([ (1,2), (1,2,3), (4,5), (6,7) ])
    gap&gt; IdTWGroup( D );
    [ 24, 4 ]
    gap&gt; GroupList;
    [ 2/1, 3/1, 4/1, 4/2, 5/1, 6/1, 6/2, 7/1, 8/1, 8/2, 8/3, 8/4, 8/5, 
      9/1, 9/2, 10/1, 10/2, 11/1, 12/1, 12/2, 12/3, 12/4, 12/5, 13/1, 
      14/1, 14/2, 15/1, 16/1, 16/2, 16/3, 16/4, 16/5, 16/6, 16/7, 16/8, 
      16/9, 16/10, 16/11, 16/12, 16/13, 16/14, 17/1, 18/1, 18/2, 18/3, 
      18/4, 18/5, 19/1, 20/1, 20/2, 20/3, 20/4, 20/5, 21/1, 21/2, 22/1, 
      22/2, 23/1, 24/1, 24/2, 24/3, 24/4, 24/5, 24/6, 24/7, 24/8, 24/9, 
      24/10, 24/11, 24/12, 24/13, 24/14, 24/15, 25/1, 25/2, 26/1, 26/2, 
      27/1, 27/2, 27/3, 27/4, 27/5, 28/1, 28/2, 28/3, 28/4, 29/1, 30/1, 
      30/2, 30/3, 30/4, 31/1, 32/1, 32/2, 32/3, 32/4, 32/5, 32/6, 32/7, 
      32/8, 32/9, 32/10, 32/11, 32/12, 32/13, 32/14, 32/15, 32/16, 32/17, 
      32/18, 32/19, 32/20, 32/21, 32/22, 32/23, 32/24, 32/25, 32/26, 
      32/27, 32/28, 32/29, 32/30, 32/31, 32/32, 32/33, 32/34, 32/35, 
      32/36, 32/37, 32/38, 32/39, 32/40, 32/41, 32/42, 32/43, 32/44, 
      32/45, 32/46, 32/47, 32/48, 32/49, 32/50, 32/51 ]
</pre>
<p>
<p>
<h2><a name="SECT002">1.2 Operation tables for groups</a></h2>
<p><p>
<a name = "SECT002"></a>
<li><code>PrintTable( </code><var>G</var><code> )</code>
<p>
<code>PrintTable</code> prints the Cayley table of the group <var>G</var>.
<p>
<pre>
    gap&gt; G := GTW4_2;
    4/2
    gap&gt; PrintTable( G );
    Let:
    g0 := ()
    g1 := (3,4)
    g2 := (1,2)
    g3 := (1,2)(3,4)

      *  | g0 g1 g2 g3 
     ------------------
      g0 | g0 g1 g2 g3 
      g1 | g1 g0 g3 g2 
      g2 | g2 g3 g0 g1 
      g3 | g3 g2 g1 g0 

</pre>
<p>
Sometimes different symbols for the elements in the would make the table
look nicer. For the group <var>4/2</var> (<var><font face="helvetica,arial">Z</font><sub>2</sub> times<font face="helvetica,arial">Z</font><sub>2</sub></var>) one could choose
the canonical form as pairs of zeros and ones.
<p>
<pre>
    gap&gt; G := GTW4_2;
    4/2
    gap&gt; SetSymbols( G, ["(0,0)","(1,0)","(0,1)","(1,1)"] );
    gap&gt; PrintTable( G );
    Let:
    (0,0) := ()
    (1,0) := (3,4)
    (0,1) := (1,2)
    (1,1) := (1,2)(3,4)

          *  | (0,0)  (1,0)  (0,1)  (1,1)  
      -----------------------------------
      (0,0)  | (0,0)  (1,0)  (0,1)  (1,1)  
      (1,0)  | (1,0)  (0,0)  (1,1)  (0,1)  
      (0,1)  | (0,1)  (1,1)  (0,0)  (1,0)  
      (1,1)  | (1,1)  (0,1)  (1,0)  (0,0)  
</pre>
<p>
<p>
<h2><a name="SECT003">1.3 Group endomorphisms</a></h2>
<p><p>
<a name = "SECT003"></a>
<li><code>Endomorphisms( </code><var>G</var><code> )</code>
<p>
<code>Endomorphisms</code> computes all the endomorphisms of the group <var>G</var>. 
This function is most essential for computing the nearrings on a group.
The endomorphisms are returned as a list of group homomorphisms. So all
functions for mappings and homomorphisms are applicable.
<p>
<pre>
    gap&gt; G := TWGroup( 4, 2 );
    4/2
    gap&gt; Endomorphisms( G );
    [ [ (1,2), (3,4) ] -&gt; [ (), () ], [ (1,2), (3,4) ] -&gt; [ (), (1,2) ],
      [ (1,2), (3,4) ] -&gt; [ (), (3,4) ], [ (1,2), (3,4) ] -&gt; [ (), (1,2)(3,4) ],
      [ (1,2), (3,4) ] -&gt; [ (1,2), () ], [ (1,2), (3,4) ] -&gt; [ (3,4), () ],
      [ (1,2), (3,4) ] -&gt; [ (1,2)(3,4), () ], [ (1,2), (3,4) ] -&gt; [ (1,2), (1,2) ]
        , [ (1,2), (3,4) ] -&gt; [ (3,4), (3,4) ],
      [ (1,2), (3,4) ] -&gt; [ (1,2)(3,4), (1,2)(3,4) ],
      [ (1,2), (3,4) ] -&gt; [ (1,2), (3,4) ],
      [ (1,2), (3,4) ] -&gt; [ (1,2)(3,4), (3,4) ],
      [ (1,2), (3,4) ] -&gt; [ (3,4), (1,2) ],
      [ (1,2), (3,4) ] -&gt; [ (1,2)(3,4), (1,2) ],
      [ (1,2), (3,4) ] -&gt; [ (3,4), (1,2)(3,4) ],
      [ (1,2), (3,4) ] -&gt; [ (1,2), (1,2)(3,4) ] ]
</pre>
<p>
<p>
<h2><a name="SECT004">1.4 Group automorphisms</a></h2>
<p><p>
<a name = "SECT004"></a>
<li><code>Automorphisms( </code><var>G</var><code> )</code>
<p>
<code>Automorphisms</code> computes all the automorphisms of the group <var>G</var>. 
The automorphisms are returned as a list of group homomorphisms. So all
functions for mappings and homomorphisms are applicable.
<p>
<pre>
    gap&gt; Automorphisms( GTW4_2 );
    [ IdentityMapping( 4/2 ), [ (1,2), (3,4) ] -&gt; [ (1,2)(3,4), (3,4) ],
      [ (1,2), (3,4) ] -&gt; [ (3,4), (1,2) ], 
      [ (3,4), (1,2) ] -&gt; [ (1,2), (1,2)(3,4) ], 
      [ (3,4), (1,2) ] -&gt; [ (1,2)(3,4), (3,4) ], 
      [ (3,4), (1,2) ] -&gt; [ (1,2)(3,4), (1,2) ] ]
</pre>
<p>
<p>
<h2><a name="SECT005">1.5 Inner automorphisms of a group</a></h2>
<p><p>
<a name = "SECT005"></a>
<li><code>InnerAutomorphisms( </code><var>G</var><code> )</code>
<p>
<code>InnerAutomorphisms</code> computes all the inner automorphisms of the group 
<var>G</var>. 
The inner automorphisms are returned as a list of group homomorphisms. So all
functions for mappings and homomorphisms are applicable.
<p>
<pre>
    gap&gt; InnerAutomorphisms( AlternatingGroup( 4 ) );
    [ ^(), ^(2,3,4), ^(2,4,3), ^(1,2)(3,4), ^(1,2,3), ^(1,2,4), 
      ^(1,3,2), ^(1,3,4), ^(1,3)(2,4), ^(1,4,2), ^(1,4,3), ^(1,4)(2,3) ]
</pre>
<p>
<p>
<h2><a name="SECT006">1.6 Isomorphic groups</a></h2>
<p><p>
<a name = "SECT006"></a>
<li><code>IsIsomorphicGroup( </code><var>G</var><code>, </code><var>H</var><code> )</code>
<p>
<code>IsIsomorphicGroup</code> determines if the groups <var>G</var> and <var>H</var> are 
isomorphic. If they are isomorphic, an isomorphism between these two groups
can be found with <code>IsomorphismGroups</code>.
<p>
<pre>
    gap&gt; IsIsomorphicGroup( SymmetricGroup( 4 ), GTW24_12 );
    true
</pre>
<p>
<p>
<h2><a name="SECT007">1.7 Subgroups of a group</a></h2>
<p><p>
<a name = "SECT007"></a>
<li><code>Subgroups( </code><var>G</var><code> )</code>
<p>
<code>Subgroups</code> returns a list of all subgroups of the group <var>G</var>, if there
are only finitely many subgroups.
<p>
<pre>
    gap&gt; Subgroups( TWGroup( 8, 4 ) );
    [ Group(()), Group([ (1,3)(2,4) ]), Group([ (2,4) ]), Group([ (1,3) ]),
      Group([ (1,2)(3,4) ]), Group([ (1,4)(2,3) ]), Group([ (1,3)(2,4), (2,4) ]),
      Group([ (1,3)(2,4), (1,2,3,4) ]), Group([ (1,3)(2,4), (1,2)(3,4) ]),
      Group([ (1,3)(2,4), (2,4), (1,2,3,4) ]) ]
</pre>
<p>
<p>
<h2><a name="SECT008">1.8 Normal subgroups generated by a single element</a></h2>
<p><p>
<a name = "SECT008"></a>
<li><code>OneGeneratedNormalSubgroups( </code><var>G</var><code> )</code>
<p>
<code>OneGeneratedSubgroups</code> returns a list of all proper, non-trivial normal
subgroups of the group <var>G</var> which are generated by one element.
<code>OneGeneratedSubgroups</code> is a synonym for <code>GeneratorsOfCongruenceLattice</code>.
<p>
<pre>
    gap&gt; OneGeneratedNormalSubgroups( AlternatingGroup(4) );
    [ Group([ (1,2)(3,4), (1,3)(2,4), (1,4)(2,3) ]) ]
</pre>
<p>
<p>
<h2><a name="SECT009">1.9 Invariant subgroups</a></h2>
<p><p>
<a name = "SECT009"></a>
<li><code>IsInvariantUnderMaps( </code><var>G</var><code>, </code><var>U</var><code>, </code><var>maps</var><code> )</code>
<p>
For a list of mappings, <var>maps</var> on the group <var>G</var> and
a subgroup <var>U</var> of <var>G</var>, <code>IsInvariantUnderMaps</code> returns the truth 
value of ``<var>U</var> is invariant under all mappings in <var>maps</var>''. In the following
example this function is used to compute all fully invariant subgroups of
the dihedral group of order 12.
<p>
<pre>
    gap&gt; D12 := DihedralGroup( 12 );                                        
    &lt;pc group of size 12 with 3 generators&gt;
    gap&gt; s := Subgroups( D12 );
    [ Group([  ]), Group([ f1 ]), Group([ f1*f3^2 ]), Group([ f1*f3 ]), 
      Group([ f2*f3 ]), Group([ f1*f2 ]), Group([ f1*f2*f3^2 ]), 
      Group([ f1*f2*f3 ]), Group([ f3 ]), Group([ f1, f2*f3 ]), 
      Group([ f1*f3^2, f2*f3 ]), Group([ f1*f3, f2*f3 ]), 
      Group([ f3, f1 ]), Group([ f3, f2 ]), Group([ f3, f1*f2 ]), 
      Group([ f3, f1, f2 ]) ]
    gap&gt; e := Endomorphisms( D12 );;                                        
    gap&gt; f := Filtered( s, sg -&gt; IsInvariantUnderMaps( D12, sg, e ) );
    [ Group([  ]), Group([ f3 ]), Group([ f3, f1, f2 ]) ]
</pre>
<p>
<a name = "SECT009"></a>
<li><code>IsCharacteristicSubgroup( </code><var>G</var><code>, </code><var>U</var><code> )</code>
<p>
A subgroup <var>U</var> of the group <var>G</var> is <strong>characteristic</strong> if it is invariant under
all automorphisms on <var>G</var>. For a subgroup <var>U</var> of the group <var>G</var>,
<code>IsCharacteristicSubgroup</code> returns the truth value of ``<var>U</var> is a characteristic
subgroup of <var>G</var>''. If the group <var>U</var> is defined as the subgroup of a group
<var>G</var> then the function call
<p>
<a name = "SECT009"></a>
<li><code>IsCharacteristicInParent( </code><var>U</var><code> )</code>
<p>
has the same result.
<p>
<pre>
    gap&gt; IsCharacteristicInParent( Centre( GTW16_11 ) );
    true
</pre>
<p>
<a name = "SECT009"></a>
<li><code>IsFullinvariant( </code><var>G</var><code>, </code><var>U</var><code> )</code>
<p>
A subgroup <var>U</var> of the group <var>G</var> is <strong>fully invariant</strong> if it is invariant under
all endomorphisms on <var>G</var>. 
For a subgroup <var>U</var> of the group <var>G</var>, <code>IsFullinvariant</code> returns the
truth value of ``<var>U</var> is a fully invariant subgroup of <var>G</var>''.
<p>
<pre>
    gap&gt; G := GTW6_2;
    6/2
    gap&gt; S := Subgroup( G, [(1,2)] );                                
    Group([ (1,2) ])
    gap&gt; IsFullinvariant( G, S );
    false
</pre>
<p>
If the group <var>U</var> is defined as the subgroup of a group <var>G</var> then the function
call
<p>
<a name = "SECT009"></a>
<li><code>IsFullinvariantInParent( </code><var>U</var><code> )</code>
<p>
has the same result.
<p>
<pre>
    gap&gt; IsFullinvariantInParent( Centre( GTW16_11 ) );
    true
</pre>
<p>
<p>
<h2><a name="SECT010">1.10 Coset representatives</a></h2>
<p><p>
<a name = "SECT010"></a>
<li><code>RepresentativesModNormalSubgroup( </code><var>G</var><code>, </code><var>N</var><code> )</code>
<p>
If <var>G</var> is a group and <var>N</var> is a normal subgroup of <var>G</var> then the function
<code>RepresentativesModNormalSubgroup</code> returns a set of representatives for
the congruence classes modulo the normal subgroup <var>N</var>, i.e. a set of elements
of <var>G</var> with exactly one element from each cogruence class modulo <var>N</var>.
<p>
<pre>
    gap&gt; G := DihedralGroup( 16 );
    &lt;pc group of size 16 with 4 generators&gt;
    gap&gt; C := Centre( G );
    Group([ f4 ])
    gap&gt; RepresentativesModNormalSubgroup( G, C );
    [ &lt;identity&gt; of ..., f1, f2, f3, f2*f3, f1*f2*f4, f1*f3*f4, 
      f1*f2*f3*f4 ]
</pre>
<p>
<a name = "SECT010"></a>
<li><code>NontrivialRepresentativesModNormalSubgroup( </code><var>G</var><code>, </code><var>N</var><code> )</code>
<p>
This function behaves as <code>RepresentativesModNormalSubgroup</code> but it excludes
the representative for the congruence class which contains the neutral element
of the group.
<p>
<pre>
    gap&gt; G := DihedralGroup( 16 );
    &lt;pc group of size 16 with 4 generators&gt;
    gap&gt; C := Centre( G );
    Group([ f4 ])
    gap&gt; NontrivialRepresentativesModNormalSubgroup( G, C );
    [ f1, f2, f3, f2*f3, f1*f2*f4, f1*f3*f4, f1*f2*f3*f4 ]
</pre>
<p>
<p>
<h2><a name="SECT011">1.11 Nilpotency class</a></h2>
<p><p>
<a name = "SECT011"></a>
<li><code>NilpotencyClass( </code><var>G</var><code> )</code>
<p>
If <var>G</var> is a nilpotent group then the function <code>NilpotencyClass</code> returns the 
nilpotency class of <var>G</var> and <code>fail</code> otherwise.
<p>
<pre>
    gap&gt; NilpotencyClass( SymmetricGroup( 7 ) );
    fail
    gap&gt; NilpotencyClass( GTW32_47 );
    3
</pre>
<p>
<p>
<h2><a name="SECT012">1.12 Scott length</a></h2>
<p><p>
<a name = "SECT012"></a>
<li><code>ScottLength( </code><var>G</var><code> )</code>
<p>
The function <code>ScottLength</code> retuns the Scott-length of the group <var>G</var>.
For a definition of the Scott-length of a group and an idea for an
algorithm for the general case see citescott69:TAOPMOAGATSOCPPGI.
In the case of a class 2 nilpotent finite group <var>G</var> a faster algorithm
described in citeecker98:OTNOPFONGOC2 is used.
<p>
<pre>
    gap&gt; ScottLength( GTW6_2 );    
    2
    gap&gt; ScottLength( GTW16_11 );
    4
</pre>
<p>
<p>
<h2><a name="SECT013">1.13 Other useful functions for groups</a></h2>
<p><p>
<a name = "SECT013"></a>
<li><code>AsPermGroup( </code><var>G</var><code> )</code>
<p>
For a group <var>G</var>, <code>AsPermGroup</code> returns a permutation group that is isomorphic
to <var>G</var>. In the case of a permutation group this is the group itself.
<p>
<pre>
    gap&gt; D24 := DihedralGroup( 24 );
    &lt;pc group of size 24 with 4 generators&gt;
    gap&gt; D24p := AsPermGroup( D24 );
    &lt;permutation group of size 24 with 4 generators&gt;
    gap&gt; IsomorphismGroups( D24, D24p );
    [ f1, f2, f3, f4 ] -&gt;
    [ (1,17)(2,16)(3,18)(4,14)(5,13)(6,15)(7,20)(8,19)(9,21)(10,22)(11,24)(12,23),
      (1,11,4,9,2,12,5,7,3,10,6,8)(13,23,16,21,14,24,17,19,15,22,18,20),
      (1,4,2,5,3,6)(7,10,8,11,9,12)(13,16,14,17,15,18)(19,22,20,23,21,24),
      (1,2,3)(4,5,6)(7,8,9)(10,11,12)(13,14,15)(16,17,18)(19,20,21)(22,23,24) ]
    gap&gt; C12 := CyclicGroup( 12 );  
    &lt;pc group of size 12 with 3 generators&gt;
    gap&gt; AsPermGroup( C12 );
    Group([ ( 1, 7, 4,10, 2, 8, 5,11, 3, 9, 6,12), 
      ( 1, 4, 2, 5, 3, 6)( 7,10, 8,11, 9,12), 
      ( 1, 2, 3)( 4, 5, 6)( 7, 8, 9)(10,11,12) ])
</pre>
<p>
<p>
[<a href = "chapters.htm">Up</a>] [<a href ="CHAP002.htm">Next</a>] [<a href = "theindex.htm">Index</a>]
<P>
<address>SONATA manual<br>November 2008
</address></body></html>