Let G and H be groups and let H act on G via automorphisms, i.e. there is a group homomorphism
\alpha \colon H \to \operatorname{Aut}(G)
such that g^h = \alpha(h)(g) for all g \in G and h \in H. A group derivation \delta \colon H \to G is a map such that
\delta(h_1h_2) = \delta(h_1)^{h_2}\delta(h_2).
Note that we do not require G to be abelian.
Algorithms designed for computing with twisted conjugacy classes can be leveraged to do computations involving group derivations, see [Ter25, Sec. 10] for a description on this.
Please note that the functions in this section require G and H to either both be finite, or both be PcpGroups.
The functions below only work for derivations between finite groups or between PcpGroups.
‣ GroupDerivationByImages ( H, G[[, gens], imgs], act ) | ( function ) |
‣ GroupDerivationByImagesNC ( H, G[[, gens], imgs], act ) | ( function ) |
Returns: the specified group derivation, or fail
if the given arguments do not define a derivation.
This works in the same vein as GroupHomomorphismByImages
(Ref 40.1-1). The group H acts on the group G via act, which must be a homomorphism from H into a group of automorphisms of G. This command then returns the group derivation defined by mapping the list gens of generators of H to the list imgs of images in G.
If omitted, the arguments gens and imgs default to the GeneratorsOfGroup
value of H and G respectively.
This function checks whether gens generate H and whether the mapping of the generators extends to a group derivation. This test can be expensive, so if one is certain that the given arguments produce a group derivation, these checks can be avoided by using the NC
version.
‣ GroupDerivationByFunction ( H, G, fun, act ) | ( function ) |
Returns: the specified group derivation.
GroupDerivationByFunction
works in the same vein as GroupHomomorphismByFunction
(Ref 40.1-4). The group H acts on the group G via act, which must be a homomorphism from H into a group of automorphisms of G. This command then returns the group derivation defined by mapping the element h
of H to the element fun( h
) of G, where fun is a GAP function.
No tests are performed to check whether the arguments really produce a group derivation.
gap> H := PcGroupCode( 149167619499417164, 72 );; gap> G := PcGroupCode( 5551210572, 72 );; gap> inn := InnerAutomorphism( G, G.2 );; gap> hom := GroupHomomorphismByImages( > G, G, > [ G.1*G.2, G.5 ], [ G.1*G.2^2*G.3^2*G.4, G.5 ] > );; gap> act := GroupHomomorphismByImages( > H, AutomorphismGroup( G ), > [ H.2, H.1*H.4 ], [ inn, hom ] > );; gap> gens := [ H.2, H.1*H.4 ];; gap> imgs := [ G.5, G.2 ];; gap> der := GroupDerivationByImages( H, G, gens, imgs, act ); Group derivation [ f2, f1*f4 ] -> [ f5, f2 ]
Many of the functions, operations, attributes... available to group homomorphisms are available for group derivations as well. We list some of the more useful ones.
‣ IsInjective ( der ) | ( property ) |
Returns: true
if the group derivation der is injective, otherwise false
.
‣ IsSurjective ( der ) | ( property ) |
Returns: true
if the group derivation der is surjective, otherwise false
.
‣ IsBijective ( der ) | ( property ) |
Returns: true
if the group derivation der is bijjective, otherwise false
.
‣ Kernel ( der ) | ( operation ) |
Returns: the set of elements that are mapped to the identity by der.
This will always be a subgroup of Source
(der).
‣ Image ( der ) | ( function ) |
‣ Image ( der, elm ) | ( function ) |
‣ Image ( der, coll ) | ( function ) |
Returns: the image of the group derivation der.
One can optionally give an element elm or a subgroup sub as a second argument, in which case Image
will calculate the image of this argument under der.
‣ PreImagesRepresentative ( der, elm ) | ( operation ) |
Returns: a preimage of the element elm under the group derivation der, or fail
if no preimage exists.
‣ PreImages ( der, elm ) | ( function ) |
Returns: the set of all preimages of the element elm under the group derivation der.
This will always be a (right) coset of Kernel
( der ), or the empty list.
gap> IsInjective( der ) or IsSurjective( der ); false gap> K := Kernel( der );; gap> Size( K ); 9 gap> ImH := Image( der ); Group derivation image in Group( [ f1, f2, f3, f4, f5 ] ) gap> h1 := H.1*H.3;; gap> g := Image( der, h1 ); f2*f4 gap> ImK := Image( der, K ); Group derivation image in Group( [ f1, f2, f3, f4, f5 ] ) gap> h2 := PreImagesRepresentative( der, g );; gap> Image( der, h2 ) = g; true gap> PreIm := PreImages( der, g ); RightCoset(<group of size 9 with 2 generators>,<object>) gap> PreIm = RightCoset( K, h2 ); true
In general, the image of a group derivation is not a subgroup. However, it is still possible to do a membership test, to calculate the number of elements, and to enumerate the elements if there are only finitely many.
‣ \in ( elm, img ) | ( operation ) |
Returns: true
if elm is an element of img, otherwise false
.
‣ Size ( img ) | ( attribute ) |
Returns: the number of elements in img.
‣ List ( img ) | ( function ) |
Returns: a list containing the elements of img.
gap> Size( ImH ); 8 gap> Size( ImK ); 1 gap> g in ImH; true gap> g in ImK; false gap> List( ImK ); [ <identity> of ... ]
generated by GAPDoc2HTML