En GAP (que también está etiquetado) hay dos posibilidades. Se podría actuar sobre los cosets de ambos subgrupos, o se podrían combinar las dos acciones a un producto subdirecto.
Como ejemplo, tomemos las acciones de $S_4$ en los cosets de $S_3$ y de $V_4$ :
gap> G:=SymmetricGroup(4);;
gap> H1:=SymmetricGroup(3);;H2:=Socle(G);;StructureDescription(H2);
"C2 x C2"
En el primer ejemplo simplemente concatenamos las listas de costes como dominio, y actuamos sobre ellas mediante la multiplicación por la derecha (GAP siempre actúa por la derecha y utiliza cosets derechos):
gap> cos:=Concatenation(RightCosets(G,H1),RightCosets(G,H2));
[ RightCoset(Sym( [ 1 .. 3 ] ),()), RightCoset(Sym( [ 1 .. 3 ] ),(1,4)),
RightCoset(Sym( [ 1 .. 3 ] ),(1,4,2)), RightCoset(Sym( [ 1 .. 3 ] ),(1,4,
3)), RightCoset(Group([ (1,4)(2,3), (1,2)(3,4) ]),()), RightCoset(Group(
[ (1,4)(2,3), (1,2)(3,4) ]),(3,4)), RightCoset(Group(
[ (1,4)(2,3), (1,2)(3,4) ]),(2,3)), RightCoset(Group(
[ (1,4)(2,3), (1,2)(3,4) ]),(2,3,4)), RightCoset(Group(
[ (1,4)(2,3), (1,2)(3,4) ]),(2,4,3)), RightCoset(Group(
[ (1,4)(2,3), (1,2)(3,4) ]),(2,4)) ]
gap> act:=ActionHomomorphism(G,cos,OnRight,"surjective");
<action epimorphism>
gap> p:=Image(act);
Group([ (1,2,3,4)(5,10)(6,9)(7,8), (2,3)(5,6)(7,9)(8,10) ])
gap> Orbits(p,MovedPoints(p));
[ [ 1, 2, 3, 4 ], [ 5, 10, 6, 8, 9, 7 ] ]
En la versión de la sección, construimos las dos acciones de permutación por separado:
gap> p1:=Image(FactorCosetAction(G,H1));
Group([ (1,2,3,4), (2,3) ])
gap> p2:=Image(FactorCosetAction(G,H2));
Group([ (1,6)(2,5)(3,4), (1,2)(3,5)(4,6) ])
Ahora, podemos combinar las listas de generadores en dominios disjuntos:
gap> diag:=SubdirectDiagonalPerms(GeneratorsOfGroup(p1),GeneratorsOfGroup(p2));
[ (1,2,3,4)(5,10)(6,9)(7,8), (2,3)(5,6)(7,9)(8,10) ]
gap> p:=Group(diag);
Group([ (1,2,3,4)(5,10)(6,9)(7,8), (2,3)(5,6)(7,9)(8,10) ])
Si se quiere mantener mejor la conexión, se podrían utilizar las incrustaciones formales en un producto directo:
gap> d:=DirectProduct(p1,p2);
Group([ (1,2,3,4), (2,3), (5,10)(6,9)(7,8), (5,6)(7,9)(8,10) ])
gap> emb1:=Embedding(d,1);;emb2:=Embedding(d,2);;
gap> gens1:=GeneratorsOfGroup(p1);;gap> diag:=List([1..Length(gens1)],x->Image(emb1,gens1[x])
> *Image(emb2,gens2[x]));
[ (1,2,3,4)(5,10)(6,9)(7,8), (2,3)(5,6)(7,9)(8,10) ]
gap> gens2:=GeneratorsOfGroup(p2);;
gap> diag:=List([1..Length(gens1)],x->Image(emb1,gens1[x])
> *Image(emb2,gens2[x]));
[ (1,2,3,4)(5,10)(6,9)(7,8), (2,3)(5,6)(7,9)(8,10) ]