IsSemiRegular( G, D )
IsSemiRegular( G, D, operation )
IsSemiRegular returns true if the group G
operates semiregularly on the domain D, which must be a list of
points of arbitrary type, and false otherwise.
A group G operates semiregularly on a domain D if no element of G other than the idenity leaves a point of D fixed. An equal characterisation is that the stabilizer of any point of D is trivial. Yet another characterisation is that the operation of G on D is equivalent to multiple copies of the operation of G on its elements by multiplication from the right.
It is not allowed that D is a proper subset of a domain, i.e., D must be invariant under the operation of G.
IsSemiRegular accepts a function operation of two
arguments d and g as optional third argument, which
specifies how the elements of G operate (see Other Operations).
gap> g := Group( (1,2)(3,4)(5,7)(6,8), (1,3)(2,4)(5,6)(7,8) );;
gap> IsSemiRegular( g, [1..8] );
true
gap> g := Group( (1,2)(3,4)(5,7)(6,8), (1,3)(2,4)(5,6,7,8) );;
gap> IsSemiRegular( g, [1..8] );
false
gap> IsSemiRegular( g, Orbit( g, [1,5], OnSets ), OnSets );
true
IsSemiRegular calls
G.operations.IsSemiRegular(
G, D, operation )
and returns
the value. Note that the third argument is not optional for functions called
this way.
The default function called this way is GroupOps.IsSemiRegular,
which computes a permutation group P that operates on [1..Length(D)]
in the same way that G operates on D (see
Operation) and then checks if this permutation group operations semiregularly.
This of course only works because this default function is overlaid for
permutation groups (see Operations of Permutation Groups).