‣ Comm ( L ) | ( operation ) |
This method has been transferred from package ResClasses.
It provides a method for Comm
when the argument is a list (enclosed in square brackets), and calls the function LeftNormedComm
.
gap> Comm( [ (1,2), (2,3) ] ); (1,2,3) gap> Comm( [(1,2),(2,3),(3,4),(4,5),(5,6)] ); (1,5,6) gap> Comm(Comm(Comm(Comm((1,2),(2,3)),(3,4)),(4,5)),(5,6)); ## the same (1,5,6)
‣ IsCommuting ( a, b ) | ( operation ) |
This function has been transferred from package ResClasses.
It tests whether two elements in a group commute.
gap> D12 := DihedralGroup( 12 ); <pc group of size 12 with 3 generators> gap> SetName( D12, "D12" ); gap> a := D12.1;; b := D12.2;; gap> IsCommuting( a, b ); false
‣ ListOfPowers ( g, exp ) | ( operation ) |
This function has been transferred from package RCWA.
The operation ListOfPowers(g,exp)
returns the list \([g,g^2,...,g^{exp}]\) of powers of the element \(g\).
gap> ListOfPowers( 2, 20 ); [ 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576 ] gap> ListOfPowers( (1,2,3)(4,5), 12 ); [ (1,2,3)(4,5), (1,3,2), (4,5), (1,2,3), (1,3,2)(4,5), (), (1,2,3)(4,5), (1,3,2), (4,5), (1,2,3), (1,3,2)(4,5), () ] gap> ListOfPowers( D12.2, 6 ); [ f2, f3, f2*f3, f3^2, f2*f3^2, <identity> of ... ]
‣ GeneratorsAndInverses ( G ) | ( operation ) |
This function has been transferred from package RCWA.
This operation returns a list containing the generators of \(G\) followed by the inverses of these generators.
gap> GeneratorsAndInverses( D12 ); [ f1, f2, f3, f1, f2*f3^2, f3^2 ] gap> GeneratorsAndInverses( SymmetricGroup(5) ); [ (1,2,3,4,5), (1,2), (1,5,4,3,2), (1,2) ]
‣ UpperFittingSeries ( G ) | ( attribute ) |
‣ LowerFittingSeries ( G ) | ( attribute ) |
‣ FittingLength ( G ) | ( attribute ) |
These three functions have been transferred from package ResClasses.
The upper and lower Fitting series and the Fitting length of a solvable group are described here: https://en.wikipedia.org/wiki/Fitting_length.
gap> UpperFittingSeries( D12 ); LowerFittingSeries( D12 ); [ Group([ ]), Group([ f3, f2*f3 ]), Group([ f3, f2*f3, f1 ]) ] [ D12, Group([ f3 ]), Group([ ]) ] gap> FittingLength( D12 ); 2 gap> S4 := SymmetricGroup( 4 );; gap> UpperFittingSeries( S4 ); [ Group(()), Group([ (1,2)(3,4), (1,4)(2,3) ]), Group([ (1,2)(3,4), (1,4) (2,3), (2,4,3) ]), Group([ (3,4), (2,3,4), (1,2)(3,4) ]) ] gap> List( last, StructureDescription ); [ "1", "C2 x C2", "A4", "S4" ] gap> LowerFittingSeries( S4 ); [ Sym( [ 1 .. 4 ] ), Alt( [ 1 .. 4 ] ), Group([ (1,4)(2,3), (1,3) (2,4) ]), Group(()) ] gap> List( last, StructureDescription ); [ "S4", "A4", "C2 x C2", "1" ] gap> FittingLength( S4); 3
‣ EpimorphismByGenerators ( G, H ) | ( operation ) |
This function has been transferred from package RCWA.
It constructs a group homomorphism which maps the generators of \(G\) to those of \(H\). Its intended use is when \(G\) is a free group, and a warning is printed when this is not the case. Note that anything may happen if the resulting map is not a homomorphism!
gap> G := Group( (1,2,3), (3,4,5), (5,6,7), (7,8,9) );; gap> phi := EpimorphismByGenerators( FreeGroup("a","b","c","d"), G ); [ a, b, c, d ] -> [ (1,2,3), (3,4,5), (5,6,7), (7,8,9) ] gap> PreImagesRepresentative( phi, (1,2,3,4,5,6,7,8,9) ); d*c*b*a gap> a := G.1;; b := G.2;; c := G.3;; d := G.4;; gap> d*c*b*a; (1,2,3,4,5,6,7,8,9) gap> ## note that it is easy to produce nonsense: gap> epi := EpimorphismByGenerators( Group((1,2,3)), Group((8,9)) ); Warning: calling GroupHomomorphismByImagesNC without checks [ (1,2,3) ] -> [ (8,9) ] gap> IsGroupHomomorphism( epi ); true gap> Image( epi, (1,2,3) ); () gap> Image( epi, (1,3,2) ); (8,9)
‣ Pullback ( hom1, hom2 ) | ( operation ) |
‣ PullbackInfo ( G ) | ( attribute ) |
If \(\phi_1 : G_1 \to H\) and \(\phi_2 : G_2 \to H\) are two group homomorphisms with the same range, then their pullback is the subgroup of \(G_1 \times G_2\) consisting of those elements \((g_1,g_2)\) such that \(\phi_1 g_1 = \phi_2 g_2\).
The attribute PullbackInfo
of a pullback group P
is similar to DirectProductInfo
for a direct product of groups. It is a record with fields P!.directProduct
, the direct product \(G_1 \times G_2\); and P!.projections
, a list with the two projections onto \(G_1\) and \(G_2\). There are no embeddings in this record, but it is possible to use the embeddings into the direct product.
gap> s4 := Group( (1,2),(2,3),(3,4) );; gap> s3 := Group( (5,6),(6,7) );; gap> c3 := Subgroup( s3, [ (5,6,7) ] );; gap> f := GroupHomomorphismByImages( s4, s3, > [(1,2),(2,3),(3,4)], [(5,6),(6,7),(5,6)] );; gap> i := GroupHomomorphismByImages( c3, s3, [(5,6,7)], [(5,6,7)] );; gap> Pfi := Pullback( f, i ); Group([ (2,3,4)(5,7,6), (1,2)(3,4) ]) gap> StructureDescription( Pfi ); "A4" gap> info := PullbackInfo( Pfi ); rec( directProduct := Group([ (1,2), (2,3), (3,4), (5,6,7) ]), projections := [ [ (2,3,4)(5,7,6), (1,2)(3,4) ] -> [ (2,3,4), (1,2)(3,4) ], [ (2,3,4)(5,7,6), (1,2)(3,4) ] -> [ (5,7,6), () ] ] ) gap> g := (1,2,3)(5,6,7);; gap> ImageElm( info!.projections[1], g ); (1,2,3) gap> ImageElm( info!.projections[2], g ); (5,6,7) gap> dp := info!.directProduct;; gap> a := ImageElm( Embedding( dp, 1 ), (1,4,3) );; gap> b := ImageElm( Embedding( dp, 2 ), (5,7,6) );; gap> a*b in Pfi; true
‣ AllIsomorphismsIterator ( G, H ) | ( operation ) |
‣ AllIsomorphismsNumber ( G, H ) | ( operation ) |
‣ AllIsomorphisms ( G, H ) | ( operation ) |
The main GAP library contains functions producing complete lists of group homomorphisms such as AllHomomorphisms
; AllEndomorphisms
and AllAutomorphisms
. Here we add the missing AllIsomorphisms(G,H)
for a list of isomorphisms from \(G\) to \(H\). The method is simple -- find one isomorphism \(G \to H\) and compose this with all the automorphisms of \(G\). In all these cases it may not be desirable to construct a list of homomorphisms, but just implement an iterator, and that is what is done here. The operation AllIsomorphismsNumber
returns the number of isomorphisms iterated over (this is, of course, just the order of the automorphisms group). The operation AllIsomorphisms
produces the list or isomorphisms.
The motivation for adding these operations is partly to give a simple example of an iterator for a list that does not yet exist, and need not be created.
gap> G := SmallGroup( 6,1);; gap> iter := AllIsomorphismsIterator( G, s3 );; gap> NextIterator( iter ); [ f1, f2 ] -> [ (6,7), (5,6,7) ] gap> n := AllIsomorphismsNumber( G, s3 ); 6 gap> AllIsomorphisms( G, s3 ); [ [ f1, f2 ] -> [ (6,7), (5,6,7) ], [ f1, f2 ] -> [ (5,7), (5,6,7) ], [ f1, f2 ] -> [ (5,6), (5,7,6) ], [ f1, f2 ] -> [ (6,7), (5,7,6) ], [ f1, f2 ] -> [ (5,7), (5,7,6) ], [ f1, f2 ] -> [ (5,6), (5,6,7) ] ] gap> iter := AllIsomorphismsIterator( G, s3 );; gap> for h in iter do Print( ImageElm( h, G.1 ) = (6,7), ", " ); od; true, false, false, true, false, false, gap> n := AllIsomorphismsNumber( s3, s4 ); 0 gap> AllIsomorphisms( s3, s4 ); [ ]
‣ IdempotentEndomorphismsData ( G ) | ( attribute ) |
‣ IdempotentEndomorphismsWithImage ( genG, R ) | ( operation ) |
‣ IdempotentEndomorphisms ( G ) | ( operation ) |
An idempotent \(f : G \to G\) is idempotent if \(f^2=f\). It has an image \(R \leqslant G\); is the identity map when restricted to \(R\); has a kernel \(N\) which has trivial intersection with \(R\) and size \(|G|/|R|\).
The operation IdempotentEndomorphismsWithImage(genG,R)
returns a list of the images of the generating set genG
of a group \(G\) under the idempotent endomorphisms with image \(R\).
The attribute IdempotentEndomorphismsData(G)
returns a record data
with fields data.gens
, a fixed generating set for \(G\), and data.images
a list of the non-empty outputs of IdempotentEndomorphismsWithImage(genG,R)
obtained by iterating over all subgroups of \(G\).
The operation IdempotentEndomorphisms(G)
returns the list of these mappings obtained using IdempotentEndomorphismsData(G)
. The first of these is the zero map, the second is the identity.
gap> gens := [ (1,2,3,4), (1,2)(3,4) ];; gap> d8 := Group( gens );; gap> SetName( d8, "d8" ); gap> c2 := Subgroup( d8, [ (2,4) ] );; gap> IdempotentEndomorphismsWithImage( gens, c2 ); [ [ (), (2,4) ], [ (2,4), () ] ] gap> IdempotentEndomorphismsData( d8 ); rec( gens := [ (1,2,3,4), (1,2)(3,4) ], images := [ [ [ (), () ] ], [ [ (), (2,4) ], [ (2,4), () ] ], [ [ (), (1,3) ], [ (1,3), () ] ], [ [ (), (1,2)(3,4) ], [ (1,2)(3,4), (1,2)(3,4) ] ], [ [ (), (1,4)(2,3) ], [ (1,4)(2,3), (1,4)(2,3) ] ], [ [ (1,2,3,4), (1,2)(3,4) ] ] ] ) gap> List( last.images, L -> Length(L) ); [ 1, 2, 2, 2, 2, 1 ] gap> IdempotentEndomorphisms( d8 ); [ [ (1,2,3,4), (1,2)(3,4) ] -> [ (), () ], [ (1,2,3,4), (1,2)(3,4) ] -> [ (), (2,4) ], [ (1,2,3,4), (1,2)(3,4) ] -> [ (2,4), () ], [ (1,2,3,4), (1,2)(3,4) ] -> [ (), (1,3) ], [ (1,2,3,4), (1,2)(3,4) ] -> [ (1,3), () ], [ (1,2,3,4), (1,2)(3,4) ] -> [ (), (1,2)(3,4) ], [ (1,2,3,4), (1,2)(3,4) ] -> [ (1,2)(3,4), (1,2)(3,4) ], [ (1,2,3,4), (1,2)(3,4) ] -> [ (), (1,4)(2,3) ], [ (1,2,3,4), (1,2)(3,4) ] -> [ (1,4)(2,3), (1,4)(2,3) ], [ (1,2,3,4), (1,2)(3,4) ] -> [ (1,2,3,4), (1,2)(3,4) ] ]
generated by GAPDoc2HTML