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