Skip to content

Commit

Permalink
Add DirectProductOfPermGroupsWithMovedPoints helper
Browse files Browse the repository at this point in the history
This is basically what DirectProduct does for a set of permutation groups,
except that one can override the moved points for each factor. This is useful
if one needs to compute "sums of G-sets": If e.g. we have a trivial group
acting on 3 points, and a Sym(4), then DirectProduct just gives back the
Sym(4). But if we need the result to act on 3+4=7 points, with the Sym(4)
acting on points acting on [4..7], then this new helper allows us to do that.
  • Loading branch information
fingolfin committed Mar 21, 2021
1 parent 273886a commit 14ea91f
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 13 deletions.
38 changes: 25 additions & 13 deletions lib/gprdperm.gi
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,13 @@

#############################################################################
##
#M DirectProductOp( <grps>, <G> ) . . . . . . direct product of perm groups
#F DirectProductOfPermGroupsWithMovedPoints( <grps>, <pnts> )
##
InstallMethod( DirectProductOp,
"for a list of permutation groups, and a permutation group",
IsCollsElms,
[ IsList and IsPermCollColl, IsPermGroup ], 0,
function( grps, G )
BindGlobal("DirectProductOfPermGroupsWithMovedPoints",
function( grps, pnts )
local oldgrps, olds, news, perms, gens,
deg, grp, old, new, perm, gen, D, info;

# Check the arguments.
if not ForAll( grps, IsGroup ) then
TryNextMethod();
fi;

oldgrps := [ ];
olds := [ ];
news := [ ];
Expand All @@ -35,10 +27,11 @@ InstallMethod( DirectProductOp,
deg := 0;

# loop over the groups
for grp in grps do
for i in Length(grps) do

# find old domain, new domain, and conjugating permutation
old := MovedPoints( grp );
grp := grps[i];
old := pnts[i]l
new := [deg+1..deg+Length(old)];
perm := MappingPermListList( old, new );
deg := deg + Length(old);
Expand Down Expand Up @@ -66,6 +59,25 @@ InstallMethod( DirectProductOp,
end );


#############################################################################
##
#M DirectProductOp( <grps>, <G> ) . . . . . . direct product of perm groups
##
InstallMethod( DirectProductOp,
"for a list of permutation groups, and a permutation group",
IsCollsElms,
[ IsList and IsPermCollColl, IsPermGroup ], 0,
function( grps, G )

# Check the arguments.
if not ForAll( grps, IsGroup ) then
TryNextMethod();
fi;

return DirectProductOfPermGroupsWithMovedPoints(grps, List(grps, MovedPoints));
end );


#############################################################################
##
#M Size( <D> ) . . . . . . . . . . . . . . . . . . . . . . of direct product
Expand Down
7 changes: 7 additions & 0 deletions tst/testinstall/gprd.tst
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,12 @@ gap> d4 := DirectProduct(g1, g2, g3);;
gap> HasIsFinite(d4) and not IsFinite(d4);
true

#
gap> d1 := DirectProductOfPermGroupsWithMovedPoints([g1, g1, g1], [[1..4], [1..4], [1..4]]);;
gap> MovedPoints(d1);
[ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]
gap> HasIsFinite(g1) and IsFinite(g1);
true

#
gap> STOP_TEST("gprd.tst");

0 comments on commit 14ea91f

Please sign in to comment.