> < ^ From:

< ^ Subject:

Daniel Ruberman writes:

Dear Gap-Forum: I have the following sort of computation which I would like

to do using GAP: I am given a finitely presented group P, a surjective

homomorphism f from P to a finite group G (given, as, say a subgroup of

a permutation group), and a subgroup H of G. I would like to compute the

abelianization of the inverse image of H under f. I realize that this

could be done using the command `AbelianInvariantsSubgroupFpGroup', once

generators have been chosen for the subgroup f^-1(H). Finding

generators is easy `by hand' starting from a transversal of f^-1(H) in P;

the question is how to find such transversal using GAP. The key point

seems to be pulling back a transversal of H in G to P. Does anyone have

any pointers on how this can be done in GAP?

Here is an example which demonstrates how you can compute the abelian

invariants of the commutator factor group of the inverse image of H

under f:

gap> # Let P be a product of a free group on 1 generator and a cyclic group gap> # of order 2. gap> P := FreeGroup( 2 ); Group( f.1, f.2 ) gap> P.relators := [ P.2^2 ];; gap> gap> # Let G be the symmetric group of degree 3. gap> G := SymmetricGroup( 3 ); Group( (1,3), (2,3) ) gap> # Ensure that G has 2 generators. gap> Length( G.generators ); 2 gap> gap> # Get in G a subgroup H of order 2. gap> H := Subgroup( G, [ (1,2) ] ); Subgroup( Group( (1,3), (2,3) ), [ (1,2) ] ) gap> gap> # Compute the permutation group PG induced by G acting on the right gap> # costets of H. gap> PG := Operation( G, Cosets( G, H ), OnRight ); Group( (1,3), (1,2) ) gap> gap> # Construct a coset table of H in G from the generators of PG which gap> # respects square relators of P. gap> T := [ ];; gap> D := [ 1 .. Maximum( List( PG.generators, LargestMovedPointPerm ) ) ]; [ 1 .. 3 ] gap> for i in [ 1 .. Length( P.generators ) ] do > g := PG.generators[i]; > T[2*i-1] := OnTuples( D, g ); > p := P.generators[i]; > if p^2 in P.relators or p^-2 in P.relators then > T[2*i] := T[2*i-1]; > else > T[2*i] := OnTuples( D, g^-1 ); > fi; > od; gap> StandardizeTable( T ); gap> Print( T, "\n" ); [ [ 2, 1, 3 ], [ 2, 1, 3 ], [ 3, 2, 1 ], [ 3, 2, 1 ] ] gap> gap> # Get a subgroup S of P, enter the coset table into its group record. gap> # and compute the abelian invariants of S/S'. gap> S := ShallowCopy( Subgroup( P, [ ] ) );; gap> S.cosetTable := T;; gap> A := AbelianInvariantsSubgroupFpGroupRrs( P, S ); [ 2, 0, 0 ]

Note that what we are doing here is not quite legal: In general, the

subgroup S which is defined by its generators is not consistent with

the coset table T associated to it (in fact, in our example S is the

trivial subgroup of P, that's why we are cautious and use the

ShallowCopy command). In deed, we make use of the fact that the

'AbelianInvariantsSubgroupFpGroup' command ignores the rest of S if a

record component S.cosetTable is given. You should use this only as a

kind of intermediate solution for your problem. In the next patch of

GAP I will change the command such that it allows the second argument

to be a coset table instead of a subgroup. Unfortunately, it is to

late to insert this change into the current release of GAP 3.4.

I would like to add another hint: Werner Nickel at Aachen is just

finishing a file 'ctpg.g' containing some functions which are useful in

the situation described above. He will put it into the directory

~ftp/pub/incoming on samson.math.rwth-aachen.de

within the next couple of days. For further details you should look

into the comments of that file.

Volkmar Felsch, Aachen

> < [top]