Group Actions
group actions
A group action is a triple (G, \Omega, \mu), where G is a group, \Omega a set and \mu \colon \Omega \times G \rightarrow \Omega a function that is compatible with the group arithmetic. We call \Omega the domain of the action.

In &GAP;, \Omega can be a duplicate-free collection (an object that permits access to its elements via the \Omega[n] operation, for example a list), it does not need to be sorted (see ).

The acting function \mu is a binary &GAP; function that returns the image \mu( x, g ) for a point x \in \Omega and a group element g \in G.

In &GAP;, groups always act from the right, that is \mu( \mu( x, g ), h ) = \mu( x, gh ).

&GAP; does not test whether the acting function \mu satisfies the conditions for a group operation but silently assumes that is does. (If it does not, results are unpredictable.)

The first section of this chapter, , describes the various ways how operations for group actions can be called.

Functions for several commonly used action are already built into &GAP;. These are listed in section .

The sections and describe homomorphisms and mappings associated to group actions as well as the permutation group image of an action.

The other sections then describe operations to compute orbits, stabilizers, as well as properties of actions.

Finally section describes the concept of external sets which represent the concept of a G-set and underly the actions mechanism.

About Group Actions
group actions
The syntax which is used by the operations for group actions is quite flexible. For example we can call the operation for the orbits of the group G on the domain Omega in the following ways:

OrbitsDomain
( G, \Omega[, \mu] )
The acting function \mu is optional. If it is not given, the built-in action (which defines an action via the caret operator ^) is used as a default.
OrbitsDomain
( G, \Omega, gens, acts[, \mu] )
This second version of permits one to implement an action induced by a homomorphism: If the group H acts on \Omega via \mu and \varphi \colon G \rightarrow H is a homomorphism, G acts on \Omega via the induced action \mu'( x, g ) = \mu( x, g^{\varphi} ).

Here gens must be a set of generators of G and acts the images of gens under \varphi. \mu is the acting function for H. Again, the function \mu is optional and is used as a default.

The advantage of this notation is that &GAP; does not need to construct this homomorphism \varphi and the range group H as &GAP; objects. (If a small group G acts via complicated objects acts this otherwise could lead to performance problems.)

&GAP; does not test whether the mapping gens \mapsto acts actually induces a homomorphism and the results are unpredictable if this is not the case.
OrbitsDomain
( extset )
A third variant is to call the operation with an external set, which then provides G, \Omega and \mu. You will find more about external sets in Section .

For operations like of course the domain must be replaced by an element of the domain of the action.

Basic Actions
group actions
actions
group operations
&GAP; already provides acting functions for the more common actions of a group. For built-in operations such as special methods are available for many of these actions.

If one needs an action for which no acting function is provided by the library it can be implemented via a &GAP; function that conforms to the syntax

actfun( omega, g )

where omega is an element of the action domain, g is an element of the acting group, and the return value is the image of omega under g.

For example one could define the following function that acts on pairs of polynomials via : OnIndeterminatesPairs:= function( polypair, g ) return [ OnIndeterminates( polypair[1], g ), OnIndeterminates( polypair[2], g ) ]; end;

Note that this function must implement a group action from the right. This is not verified by &GAP; and results are unpredictable otherwise.

<#Include Label="OnPoints"> <#Include Label="OnRight"> <#Include Label="OnLeftInverse"> <#Include Label="OnSets"> <#Include Label="OnTuples"> <#Include Label="OnPairs"> <#Include Label="OnSetsSets"> <#Include Label="OnSetsDisjointSets"> <#Include Label="OnSetsTuples"> <#Include Label="OnTuplesSets"> <#Include Label="OnTuplesTuples"> <#Include Label="OnLines"> <#Include Label="OnIndeterminates">

The following example demonstrates being used to implement a permutation action on a domain:

gap> g:=Group((1,2,3),(1,2));; gap> dom:=[ "a", "b", "c" ];; gap> Orbit(g,dom,Permuted); [ [ "a", "b", "c" ], [ "c", "a", "b" ], [ "b", "a", "c" ], [ "b", "c", "a" ], [ "a", "c", "b" ], [ "c", "b", "a" ] ]
<#Include Label="OnSubspacesByCanonicalBasis">

Action on canonical representatives

A variety of action functions assumes that the objects on which it acts are given in a particular form, for example canonical representatives. Affected actions are for example , , , , and .

If orbit seeds or domain elements are not given in the required form &GAP; will issue an error message: gap> Orbit(SymmetricGroup(5),[[2,4],[1,3]],OnSetsSets); Error, Action not well-defined. See the manual section ``Action on canonical representatives''. In this case the affected domain elements have to be brought in canonical form, as documented for the respective action function. For interactive use this is most easily done by acting with the identity element of the group.

(A similar error could arise if a user-defined action function is used which actually does not implement an action from the right.)

Orbits

If a group G acts on a set \Omega, the set of all images of x \in \Omega under elements of G is called the orbit of x. The set of orbits of G is a partition of \Omega.

<#Include Label="Orbit"> <#Include Label="Orbits"> <#Include Label="OrbitsDomain"> <#Include Label="OrbitLength"> <#Include Label="OrbitLengths"> <#Include Label="OrbitLengthsDomain">

Stabilizers
point stabilizer
set stabilizer
tuple stabilizer
The stabilizer of a point x under the action of a group G is the set of all those elements in G which fix x.

<#Include Label="OrbitStabilizer"> <#Include Label="Stabilizer"> <#Include Label="OrbitStabilizerAlgorithm">

Elements with Prescribed Images
transporter
<#Include Label="RepresentativeAction">

The Permutation Image of an Action

When a group G acts on a domain \Omega, an enumeration of Omega yields a homomorphism from G into the symmetric group on \{ 1, \ldots, |\Omega| \}. In &GAP;, the enumeration of \Omega is provided by the value of \Omega which of course is \Omega itself if it is a list.

For an action homomorphism, the operation will return the external set on \Omega which affords the action.

<#Include Label="ActionHomomorphism"> <#Include Label="Action"> <#Include Label="SparseActionHomomorphism">

Action of a group on itself

Of particular importance is the action of a group on its elements or cosets of a subgroup. These actions can be obtained by using for a suitable domain (for example a list of subgroups). For the following (frequently used) types of actions however special (often particularly efficient) functions are provided. A special case is the regular action on all elements.

<#Include Label="FactorCosetAction"> <#Include Label="RegularActionHomomorphism"> <#Include Label="AbelianSubfactorAction">

Permutations Induced by Elements and Cycles

If only the permutation image of a single element is needed, it might not be worth to create the action homomorphism, the following operations yield the permutation image and cycles of a single element.

<#Include Label="Permutation"> <#Include Label="PermutationCycle"> <#Include Label="Cycle"> <#Include Label="CycleLength"> <#Include Label="Cycles"> <#Include Label="CycleLengths"> <#Include Label="CycleIndex">

Tests for Actions
<#Include Label="IsTransitive:oprt"> <#Include Label="Transitivity:oprt"> <#Include Label="RankAction"> <#Include Label="IsSemiRegular"> <#Include Label="IsRegular"> <#Include Label="Earns"> <#Include Label="IsPrimitive">

Block Systems

A block system (system of imprimitivity) for the action of a group G on an action domain \Omega is a partition of \Omega which –as a partition– remains invariant under the action of G.

<#Include Label="Blocks"> <#Include Label="MaximalBlocks"> <#Include Label="RepresentativesMinimalBlocks"> <#Include Label="AllBlocks">

External Sets
G
-sets
When considering group actions, sometimes the concept of a G-set is used. This is a set \Omega endowed with an action of G. The elements of the G-set are the same as those of \Omega, however concepts like equality and equivalence of G-sets do not only consider the underlying domain \Omega but the group action as well.

This concept is implemented in &GAP; via external sets.

The constituents of an external set are stored in the attributes , and .

Most operations for actions are applicable as an attribute for an external set.

The most prominent external subsets are orbits, see .

Many subsets of a group, such as conjugacy classes or cosets (see and ) are implemented as external orbits.

External sets also are implicitly underlying action homomorphisms, see and .

<#Include Label="IsExternalSet"> <#Include Label="ExternalSet"> <#Include Label="ActingDomain"> <#Include Label="FunctionAction"> <#Include Label="HomeEnumerator"> <#Include Label="IsExternalSubset"> <#Include Label="ExternalSubset"> <#Include Label="IsExternalOrbit"> <#Include Label="ExternalOrbit"> <#Include Label="StabilizerOfExternalSet"> <#Include Label="ExternalOrbits"> <#Include Label="ExternalOrbitsStabilizers"> <#Include Label="CanonicalRepresentativeOfExternalSet"> <#Include Label="CanonicalRepresentativeDeterminatorOfExternalSet"> <#Include Label="ActorOfExternalSet"> <#Include Label="UnderlyingExternalSet"> <#Include Label="SurjectiveActionHomomorphismAttr">