<html><head><title>[SONATA] 8 N-groups</title></head> <body text="#000000" bgcolor="#ffffff"> [<a href = "chapters.htm">Up</a>] [<a href ="CHAP007.htm">Previous</a>] [<a href ="CHAP009.htm">Next</a>] [<a href = "theindex.htm">Index</a>] <h1>8 N-groups</h1><p> <P> <H3>Sections</H3> <oL> <li> <A HREF="CHAP008.htm#SECT001">Construction of N-groups</a> <li> <A HREF="CHAP008.htm#SECT002">Operation tables of N-groups</a> <li> <A HREF="CHAP008.htm#SECT003">Functions for N-groups</a> <li> <A HREF="CHAP008.htm#SECT004">N-subgroups</a> <li> <A HREF="CHAP008.htm#SECT005">N0-subgroups</a> <li> <A HREF="CHAP008.htm#SECT006">Ideals of N-groups</a> <li> <A HREF="CHAP008.htm#SECT007">Special properties of N-groups</a> <li> <A HREF="CHAP008.htm#SECT008">Noetherian quotients</a> <li> <A HREF="CHAP008.htm#SECT009">Nearring radicals</a> </ol><p> <p> In SONATA every N-group is a group, the only difference is, that there is a nearring that acts on the group. And since in SONATA all nearrings are left distributive, they act on the elements of an N-group from the right. <strong>Note</strong>, that the elements of an N-group are added via <code>*</code>, not <code>+</code>. <p> The functions described in this section can be found in the source files <code>ngroups.g?</code>. <p> <p> <h2><a name="SECT001">8.1 Construction of N-groups</a></h2> <p><p> There is a natural way to construct an N-group. It is to take a group, a nearring and define an action of the nearring on the group. The function <code>NGroup</code> allows one to do this. The special case, where (the group reduct of) a nearring is viewed as an N-group over the nearring itself, can be constructed easily via <code>NGroupByNearRingMultiplication</code>. <p> <a name = "SECT001"></a> <li><code>NGroup( </code><var>G</var><code>, </code><var>nr</var><code>, </code><var>action</var><code> )</code> <p> The function <code>NGroup</code> has three arguments. <var>G</var> must be a group, <var>nr</var> the nearring that acts on the group and <var>action</var> a binary operation from the direct product of <var>G</var> and <var>nr</var> into <var>G</var>. It returns the N-group. <p> <pre> gap> G := GTW4_2; 4/2 gap> n := MapNearRing( G ); TransformationNearRing(4/2) gap> action := function ( g, f ) > return Image( f, g ); > end; function ( g, f ) ... end gap> gamma := NGroup( G, n, action ); < N-group of TransformationNearRing(4/2) > gap> IsNGroup( gamma ); true gap> NearRingActingOnNGroup( gamma ); TransformationNearRing(4/2) gap> ActionOfNearRingOnNGroup( gamma ); function ( g, f ) ... end gap> Print( ActionOfNearRingOnNGroup( gamma ) ); function ( g, f ) return Image( f, g ); </pre> <p> <a name = "SECT001"></a> <li><code>NGroupByNearRingMultiplication( </code><var>nr</var><code> )</code> <p> For every (left) nearring <var>(N,+,.)</var> the group <var>(N,+)</var> is an N-group over <var>N</var> with respect to nearring multiplication from the right as the action. The function <code>NGroupByNearRingMultiplication</code> returns this N-group of the nearring <var>nr</var>. <p> <pre> gap> n := LibraryNearRing( GTW8_2, 3 ); LibraryNearRing(8/2, 3) gap> NGroupByNearRingMultiplication( n ) = GTW8_2; true </pre> <p> <a name = "SECT001"></a> <li><code>NGroupByApplication( </code><var>tfmnr</var><code> )</code> <p> For a nearring <var>T</var> of transformations on a group <var>G</var>, <var>G</var> is an N-group of <var>T</var> with the application of functions as the action. The function <code>NGroupByApplication</code> returns this <code>N-group</code> of the nearring <var>tfmnr</var>. <p> Another way to construct an N-Group is to take a nearring <var>N</var>, a right ideal <var>R</var> and let <var>N</var> act on the factor <var>N/R</var> in the canonical way. This is accomplished by <p> <a name = "SECT001"></a> <li><code>NGroupByRightIdealFactor( </code><var>nr</var><code>, </code><var>R</var><code> )</code> <p> The function <code>NGroupByRightIdealFactor</code> has two arguments, a nearring <var>nr</var> and a right ideal <var>R</var>. It returns the N-group <var>nr</var>/<var>R</var>. <p> <pre> gap> N := LibraryNearRing( GTW4_2, 11 ); LibraryNearRing(4/2, 11) gap> R := NearRingRightIdeals( N )[ 3 ]; < nearring right ideal > gap> ng := NGroupByRightIdealFactor( N, R ); < N-group of LibraryNearRing(4/2, 11) > gap> PrintTable( ng ); Let: (0,0) := (()) (1,0) := ((3,4)) (0,1) := ((1,2)) (1,1) := ((1,2)(3,4)) -------------------------------------------------------------------- g0 := <identity> of ... g1 := f1 N = LibraryNearRing(4/2, 11) acts on G = Group( [ f1 ] ) from the right by the following action: | g0 g1 --------------- (0,0) | g0 g0 (1,0) | g0 g0 (0,1) | g0 g1 (1,1) | g0 g1 </pre> <p> <p> <h2><a name="SECT002">8.2 Operation tables of N-groups</a></h2> <p><p> <a name = "SECT002"></a> <li><code>PrintTable( </code><var>G</var><code> )</code> <p> The function <code>PrintTable</code> prints out the operation table of the action of a nearring on its N-group <var>G</var> <p> <pre> gap> n := LibraryNearRing( TWGroup( 8, 2 ), 3 ); LibraryNearRing(8/2, 3) gap> gamma := NGroupByNearRingMultiplication( n ); < N-group of LibraryNearRing(8/2, 3) > gap> PrintTable( gamma ); Let: n0 := (()) n1 := ((3,4,5,6)) n2 := ((3,5)(4,6)) n3 := ((3,6,5,4)) n4 := ((1,2)) n5 := ((1,2)(3,4,5,6)) n6 := ((1,2)(3,5)(4,6)) n7 := ((1,2)(3,6,5,4)) -------------------------------------------------------------------- g0 := () g1 := (3,4,5,6) g2 := (3,5)(4,6) g3 := (3,6,5,4) g4 := (1,2) g5 := (1,2)(3,4,5,6) g6 := (1,2)(3,5)(4,6) g7 := (1,2)(3,6,5,4) N = LibraryNearRing(8/2, 3) acts on G = Group( [ (1,2), (3,4,5,6) ] ) from the right by the following action: | g0 g1 g2 g3 g4 g5 g6 g7 ------------------------------------ n0 | g0 g0 g0 g0 g0 g0 g0 g0 n1 | g0 g0 g0 g0 g0 g0 g0 g2 n2 | g0 g0 g0 g0 g0 g0 g0 g0 n3 | g0 g0 g0 g0 g0 g0 g0 g2 n4 | g0 g0 g0 g0 g0 g0 g0 g0 n5 | g0 g0 g0 g0 g0 g0 g0 g2 n6 | g0 g0 g0 g0 g0 g0 g0 g0 n7 | g0 g0 g0 g0 g0 g0 g0 g2 </pre> <p> <p> <h2><a name="SECT003">8.3 Functions for N-groups</a></h2> <p><p> <a name = "SECT003"></a> <li><code>IsNGroup( </code><var>G</var><code> )</code> <p> For any group <var>G</var> the function <code>IsNGroup</code> tests whether there is a nearring defined that acts on <var>G</var>. <p> <a name = "SECT003"></a> <li><code>NearRingActingOnNGroup( </code><var>G</var><code> )</code> <p> The function <code>NearRingActingOnNGroup</code> returns the nearring that acts on the N-group <var>G</var>. <p> <pre> gap> n := LibraryNearRing( TWGroup( 8, 2 ), 3 ); LibraryNearRing(8/2, 3) gap> gamma := NGroupByNearRingMultiplication( n ); < N-group of LibraryNearRing(8/2, 3) > gap> NearRingActingOnNGroup( gamma ); LibraryNearRing(8/2, 3) </pre> <p> <a name = "SECT003"></a> <li><code>ActionOfNearRingOnNGroup( </code><var>G</var><code> )</code> <p> The function <code>ActionOfNearRingOnNGroup</code> returns the action of the nearring that acts on the N-group <var>G</var> as a 2-ary <font face="Gill Sans,Helvetica,Arial">GAP</font>-function. <p> <pre> gap> n := LibraryNearRing( TWGroup( 8, 2 ), 3 ); LibraryNearRing(8/2, 3) gap> gamma := NGroupByNearRingMultiplication( n ); < N-group of LibraryNearRing(8/2, 3) > gap> ActionOfNearRingOnNGroup( gamma ); function ( g, n ) ... end </pre> <p> <p> <h2><a name="SECT004">8.4 N-subgroups</a></h2> <p><p> <a name = "SECT004"></a> <li><code>NSubgroup( </code><var>G</var><code>, </code><var>gens</var><code> )</code> <p> The function <code>NSubgroup</code> returns the N-subgroup of the N-group <var>G</var> generated by <var>gens</var>. <p> <a name = "SECT004"></a> <li><code>NSubgroups( </code><var>G</var><code> )</code> <p> The function <code>NSubgroups</code> returns a list of all N-subgroups of the N-group <var>G</var>. <p> <a name = "SECT004"></a> <li><code>IsNSubgroup( </code><var>G</var><code>, </code><var>S</var><code> )</code> <p> The function <code>IsNSubgroup</code> returns <code>true</code> iff <var>S</var> is an N-subgroup of <var>G</var>. <p> <p> <h2><a name="SECT005">8.5 N0-subgroups</a></h2> <p><p> <a name = "SECT005"></a> <li><code>N0Subgroups( </code><var>G</var><code> )</code> <p> The function <code>N0Subgroups</code> returns a list of all <var>N<sub>0</sub></var>-subgroups of the N-group <var>G</var>. <p> <pre> gap> n := LibraryNearRing(GTW12_3,20465); LibraryNearRing(12/3, 20465) gap> ng := NGroupByNearRingMultiplication( n ); < N-group of LibraryNearRing(12/3, 20465) > gap> Length( N0Subgroups( ng ) ); 9 </pre> <p> <p> <h2><a name="SECT006">8.6 Ideals of N-groups</a></h2> <p><p> <a name = "SECT006"></a> <li><code>NIdeal( </code><var>G</var><code>, </code><var>gens</var><code> )</code> <p> The function <code>NIdeal</code> returns the N-ideal of the N-group <var>G</var> generated by <var>gens</var>. <p> <a name = "SECT006"></a> <li><code>NIdeals( </code><var>G</var><code> )</code> <p> The function <code>NGroupIdeals</code> returns a list of all ideals of the N-group <var>G</var>. <p> <pre> gap> n:=LibraryNearRing(GTW12_3,20465); LibraryNearRing(12/3, 20465) gap> ng := NGroupByNearRingMultiplication( n ); < N-group of LibraryNearRing(12/3, 20465) > gap> NIdeals( ng ); [ < N-group of LibraryNearRing(12/3, 20465) >, < N-group of LibraryNearRing(12/3, 20465) >, < N-group of LibraryNearRing(12/3, 20465) > ] </pre> <p> <a name = "SECT006"></a> <li><code>IsNIdeal( </code><var>G</var><code>, </code><var>I</var><code> )</code> <p> The function <code>IsNIdeal</code> returns <code>true</code> iff <var>I</var> is an N-ideal of the N-group <var>G</var>. <p> <a name = "SECT006"></a> <li><code>IsSimpleNGroup( </code><var>G</var><code> )</code> <p> The function <code>IsSimpleNGroup</code> returns <code>true</code> if <var>G</var> is a simple N-group and <code>false</code> otherwise. <p> <a name = "SECT006"></a> <li><code>IsN0SimpleNGroup( </code><var>G</var><code> )</code> <p> The function <code>IsN0SimpleNGroup</code> returns <code>true</code> if the N-group <var>G</var> is <var>N<sub>0</sub></var>-simple and <code>false</code> otherwise. <p> <p> <h2><a name="SECT007">8.7 Special properties of N-groups</a></h2> <p><p> <a name = "SECT007"></a> <li><code>IsCompatible( </code><var>G</var><code> )</code> <p> The function <code>IsCompatible</code> returns <code>true</code> if the N-group <var>G</var> is compatible and <code>false</code> otherwise. <p> <a name = "SECT007"></a> <li><code>IsTameNGroup( </code><var>G</var><code> )</code> <p> The function <code>IsTameNGroup</code> returns <code>true</code> if <var>G</var> is a tame N-group and <code>false</code> otherwise. <p> <a name = "SECT007"></a> <li><code>Is2TameNGroup( </code><var>G</var><code> )</code> <p> The function <code>Is2TameNGroup</code> returns <code>true</code> if the N-group <var>G</var> is 2-tame and <code>false</code> otherwise. <p> <a name = "SECT007"></a> <li><code>Is3TameNGroup( </code><var>G</var><code> )</code> <p> The function <code>Is3TameNGroup</code> returns <code>true</code> if the N-group <var>G</var> is 3-tame and <code>false</code> otherwise. <p> <a name = "SECT007"></a> <li><code>IsMonogenic( </code><var>G</var><code> )</code> <p> The function <code>IsMonogenic</code> returns <code>true</code> if the N-group <var>G</var> is monogenic and <code>false</code> otherwise. <p> <a name = "SECT007"></a> <li><code>IsStronglyMonogenic( </code><var>G</var><code> )</code> <p> The function <code>IsStronglyMonogenic</code> returns <code>true</code> if the N-group <var>G</var> is strongly monogenic and <code>false</code> otherwise. <p> <a name = "SECT007"></a> <li><code>TypeOfNGroup( </code><var>G</var><code> )</code> <p> The function <code>TypeOfNGroup</code> returns the type of a monogenic N-group <var>G</var>. If <var>N</var> is not monogenic or not of type 0, 1 or 2 it returns <code>fail</code>. <p> <pre> gap> n:=LibraryNearRing(GTW12_3,20465); LibraryNearRing(12/3, 20465) gap> ng := NGroupByNearRingMultiplication( n ); < N-group of LibraryNearRing(12/3, 20465) > gap> TypeOfNGroup( ng ); fail </pre> <p> <p> <h2><a name="SECT008">8.8 Noetherian quotients</a></h2> <p><p> <a name = "SECT008"></a> <li><code>NoetherianQuotient( </code><var>nr</var><code>, </code><var>ngrp</var><code>, </code><var>target</var><code>, </code><var>source</var><code> )</code> <p> It is assumed that <var>source</var> and <var>target</var> are subsets of the <var>nr</var>-group <var>ngrp</var>. The function <code>NoetherianQuotient</code> computes the set of all elements <var>f</var> of <var>nr</var> such that <var>source</var><var>*</var><var>f</var> is a subset of <var>target</var>. If <var>target</var> is an <var>nr</var>-ideal of <var>ngrp</var>, the Noetherian quotient is returned as a near ring ideal, if <var>target</var> is an <var>nr</var>-subgroup of <var>ngrp</var>, a left ideal of <var>nr</var> is returned. Otherwise the result is a subset of <var>nr</var>. <p> In the following example we let a nearring act on its group reduct and compute the noetherian quotient <var>(I,I)<sub>N</sub></var> for an ideal <var>I</var> of <var>N</var>. <p> <pre> gap> N := LibraryNearRing( GTW12_3, 100 ); LibraryNearRing(12/3, 100) gap> I := NearRingIdeals( N ); [ < nearring ideal >, < nearring ideal >, < nearring ideal > ] gap> List(I,Size); [ 1, 6, 12 ] gap> NN := NGroupByNearRingMultiplication( N ); < N-group of LibraryNearRing(12/3, 100) > gap> NoetherianQuotient( N, NN, GroupReduct(I[2]), GroupReduct(I[2]) ); < nearring ideal > gap> Size(last); 12 </pre> <p> <p> <h2><a name="SECT009">8.9 Nearring radicals</a></h2> <p><p> <a name = "SECT009"></a> <li><code>NuRadical( </code><var>nr</var><code>, </code><var>nu</var><code> )</code> <p> The function <code>NuRadical</code> has two arguments, a nearring <var>nr</var> and a number <var>nu</var> which must be one of <code>0</code>, <code>1/2</code>, <code>1</code> and <code>2</code>. It returns the <var>nu</var>-radical for <var>nu= 0, 1/2, 1, 2</var> respectively. <p> <a name = "SECT009"></a> <li><code>NuRadicals( </code><var>nr</var><code> )</code> <p> the function <code>NuRadicals</code> returns a record with the components <code>J_0</code>, <code>J1_2</code>, <code>J1</code> and <code>J2</code> with the corresponding radicals. <p> <pre> gap> f := LibraryNearRing( GTW8_4, 3 ); LibraryNearRing(8/4, 3) gap> NuRadicals( f ); rec( J2 := < nearring ideal >, J1 := < nearring ideal >, J1_2 := < nearring right ideal >, J0 := < nearring ideal > ) gap> NuRadical( f, 1/2 ); < nearring right ideal > gap> Size( NuRadical( f, 0 ) ); 8 gap> AsList( NuRadical( f, 1 ) ); [ (()), ((2,4)), ((1,2)(3,4)), ((1,2,3,4)), ((1,3)), ((1,3)(2,4)), ((1,4,3,2)), ((1,4)(2,3)) ] gap> NuRadical( f, 1/2 ) = NuRadical( f, 2 ); true </pre> <p> <p> [<a href = "chapters.htm">Up</a>] [<a href ="CHAP007.htm">Previous</a>] [<a href ="CHAP009.htm">Next</a>] [<a href = "theindex.htm">Index</a>] <P> <address>SONATA manual<br>November 2008 </address></body></html>