`ActionWithZero( `

`M`, `D` )

`ActionWithZero( `

`M`, `D`, `action` )

`ActionWithZero`

returns a transformation monoid with the same number of
generators as `M`, such that each generator of the transformation monoid
acts on the set `[1..Length(`

in the same way as the corresponding
generator of the monoid `D`)+1]`M` acts on the domain *<D> cup {0}*, which
may be a list of arbitrary type.

Here it is not required that `D` be invariant under `M`. Whenever the
image of a point `d` under the monoid element `m` does not lie in `D` it
is set to *0*. The image of *0* under every monoid element is set to
*0*. Note that this way the resulting monoid is a homomorphic image of
`M` if and only if `D` is a union of strong orbits. The point *0* is
represented by `Length(`

in the domain of the transformation
monoid returned by `D`) + 1`ActionWithZero`

.

`ActionWithZero`

accepts a function `action` of two arguments `d` and `m`
as optional third argument, which specifies how the elements of `M` act
on `D` (see Other Actions).

`ActionWithZero`

calls

`M`.operations.ActionWithZero( `M`, `D`, `action` )

and returns the value. Note that the third argument is not optional for
functions called this way.

The default function called this way is `MonoidOps.ActionWithZero`

, which
simply applies each generator of `M` to all the points of `D`, finds the
position of the image in `D`, and finally constructs the transformation
(see Transformation) defined by the list of those positions and
`Length(`

for every image not in `D`)+1`D`.

gap> M:= Monoid( [ Transformation( [ 5, 4, 4, 2, 2 ] ), Transformation( [ 2, 5, 5, 4, 1 ] ) ] );; gap> M.name:= "M";; gap> class:= LClass( M, Transformation( [ 1, 4, 4, 5, 5 ] ) ); LClass( M, Transformation( [ 1, 4, 4, 5, 5 ] ) ) gap> orb:= ShortOrbit(M, class, OnLClasses, Rank); [ LClass( M, Transformation( [ 1, 4, 4, 5, 5 ] ) ), LClass( M, Transformation( [ 2, 4, 4, 1, 1 ] ) ), LClass( M, Transformation( [ 4, 2, 2, 5, 5 ] ) ) ] gap> ActionWithZero(M, orb, OnLClasses); Monoid( [ Transformation( [ 4, 3, 4, 4 ] ), Transformation( [ 2, 3, 1, 4 ] ) ] )Version 2.4 (May 1998)