Getting a right transversal (or set of right cosets) together with the action on it effectively
For various applications one wants a right transversal / the right cosets of a group G on a subgroup U, and the action on it.
Right now we have RightTransversal -> but that doesn't give the action.
One can use RightCosets and then construct the permutation action from that using PositionCanonical
Or one can call FactorCosetAction, but there seems to be no way to recover the right transversal and/or set of right cosets from that. Well, in some cases one can call UnderlyingExternalSet on it to get the right transversal (wrapped in an xset). But this doesn't work if the inputs are fp groups and hence Todd-Coxeter was used to compute the action.
Indeed:
gap> G:=SymmetricGroup(5); H:=SymmetricGroup(3);
Sym( [ 1 .. 5 ] )
Sym( [ 1 .. 3 ] )
gap> act:=FactorCosetAction(G,H);
<action epimorphism>
gap> UnderlyingExternalSet(act);
<xset:[(),(3,5),(2,3,5),(1,2,3,5),(1,4),(1,4)(3,5),(1,4)(2,3,5),(1,2,3,5,4),(1,4,2),(1,4,2)(3,5),(1,4,2,3,5),(2,3,
5,4),(1,4,3),(1,4,3,5),(1,4,3,5,2), ...]>
gap> AsList(RightTransversal(G,H));
[ (), (3,5), (2,3,5), (1,2,3,5), (1,4), (1,4)(3,5), (1,4)(2,3,5), (1,2,3,5,4), (1,4,2), (1,4,2)(3,5),
(1,4,2,3,5), (2,3,5,4), (1,4,3), (1,4,3,5), (1,4,3,5,2), (1,2)(3,5,4), (1,4,5), (1,4,5,3), (1,4,5,2,3),
(1,2,3)(4,5) ]
but
gap> f:=FreeGroup(2); g := f / [ f.1^2, f.2^3, (f.1*f.2)^5 ]; u := Subgroup( g, [ g.1, g.1^g.2 ] );
<free group on the generators [ f1, f2 ]>
<fp group on the generators [ f1, f2 ]>
Group([ f1, f2^-1*f1*f2 ])
gap> act2:=FactorCosetAction(g,u);
[ f1, f2 ] -> [ (2,4)(5,6), (1,2,3)(4,5,6) ]
gap> AsList(RightTransversal(g,u));
[ <identity ...>, f2, f2^-1, f2*f1, f2*f1*f2, f2*f1*f2^-1 ]
gap> UnderlyingExternalSet(act2);
Error, no method found! For debugging hints type ?Recovery from NoMethodFound
So, is there an effective way to get this? Or should I roll my own?
Perhaps @hulpke has some insights?
PS: I notice that the documentation for FactorCosetAction does not even guarantee that the image group is a permutation group (it seems obvious that it should do that, but it would be nice if we could make this explicit).
The purpose of FactorCosetAction was to unify the case of transversal action and TC -- for fp groups transversal action is potentially quite slow. If you want transversal elements you could either
- Use
FactorCosetActionand then take pre-images of representatives for the points 1 to n - Use the explicit transversal action (which is anyhow what
FactorCosetActiondoes in the non-fp cases:
t:=RightTransversal(t,u);
hom:=ActionHomomorphism(g,t,OnRight,"surjective");