Let G, H be groups and \varphi,\psi\colon H \to G group homomorphisms. Then the pair (\varphi,\psi) induces a (right) group action on G given by
G \times H \to G\colon (g,h) \mapsto g \cdot h := \psi(h)^{-1} g\varphi(h).
This group action is called (\varphi,\psi)-twisted conjugation, and induces an equivalence relation on the group G. We say that g_1, g_2 \in G are (\varphi,\psi)-twisted conjugate, denoted by g_1 \sim_{\varphi,\psi} g_2, if and only if there exists some element h \in H such that g_1 \cdot h = g_2, or equivalently g_1 = \psi(h) g_2 \varphi(h)^{-1}.
If \varphi\colon G \to G is an endomorphism of a group G, then by \varphi-twisted conjugacy we mean (\varphi,\operatorname{id}_G)-twisted conjugacy. Most functions in this package will allow you to input a single endomorphism instead of a pair of homomorphisms. The "missing" endomorphism will automatically be assumed to be the identity mapping. Similarly, if a single group element is given instead of two, the second will be assumed to be the identity.
‣ TwistedConjugation ( hom1[, hom2] ) | ( function ) |
Implements the twisted conjugation (right) group action induced by the pair of homomorphisms ( hom1, hom2 ) as a function.
‣ RepresentativeTwistedConjugation ( hom1[, hom2], g1[, g2] ) | ( function ) |
Tests whether the elements g1 and g2 are twisted conjugate under the twisted conjugacy action of the pair of homomorphisms ( hom1, hom2 ).
This function relies on the output of RepresentativeTwistedConjugation
. Computes an element that maps g1 to g2 under the twisted conjugacy action of the pair of homomorphisms ( hom1, hom2 ) or returns fail
if no such element exists.
If G is abelian, this function relies on (a generalisation of) [DT21, Alg. 4]. If H is finite, it relies on a stabiliser-orbit algorithm. Otherwise, it relies on a mixture of the algorithms described in [Rom16, Thm. 3], [BKL+20, Sec. 5.4], [Rom21, Sec. 7] and [DT21, Alg. 6].
gap> G := AlternatingGroup( 6 );; gap> H := SymmetricGroup( 5 );; gap> phi := GroupHomomorphismByImages( H, G, [ (1,2)(3,5,4), (2,3)(4,5) ], > [ (1,2)(3,4), () ] );; gap> psi := GroupHomomorphismByImages( H, G, [ (1,2)(3,5,4), (2,3)(4,5) ], > [ (1,4)(3,6), () ] );; gap> tc := TwistedConjugation( phi, psi );; gap> g1 := (4,6,5);; gap> g2 := (1,6,4,2)(3,5);; gap> IsTwistedConjugate( psi, phi, g1, g2 ); false gap> h := RepresentativeTwistedConjugation( phi, psi, g1, g2 ); (1,2) gap> tc( g1, h ) = g2; true
The equivalence classes of the equivalence relation \sim_{\varphi,\psi} are called the Reidemeister classes of (\varphi,\psi) or the (\varphi,\psi)-twisted conjugacy classes. We denote the Reidemeister class of g \in G by [g]_{\varphi,\psi}. The number of Reidemeister classes is called the Reidemeister number R(\varphi,\psi) and is always a positive integer or infinity.
‣ ReidemeisterClass ( hom1[, hom2], g ) | ( function ) |
‣ TwistedConjugacyClass ( hom1[, hom2], g ) | ( function ) |
If hom1 and hom2 are group homomorphisms from a group H to a group G, this method creates the Reidemeister class of the pair (hom1, hom2) with representative g. The following attributes and operations are available:
Representative
, which returns g,
GroupHomomorphismsOfReidemeisterClass
, which returns the list [ hom1, hom2 ],
ActingDomain
, which returns the group H,
FunctionAction
, which returns the twisted conjugacy action on G,
Random
, which returns a random element belonging to the Reidemeister class,
\in
, which can be used to test if an element belongs to the Reidemeister class,
List
, which lists all elements in the Reidemeister class if there are finitely many, otherwise returns fail
,
Size
, which gives the number of elements in the Reidemeister class,
StabiliserOfExternalSet
, which gives the stabiliser of the Reidemeister class under the twisted conjugacy action.
‣ ReidemeisterClasses ( hom1[, hom2] ) | ( function ) |
‣ TwistedConjugacyClasses ( hom1[, hom2] ) | ( function ) |
Returns a list containing the Reidemeister classes of ( hom1, hom2 ) if the Reidemeister number R( hom1, hom2 ) is finite, or returns fail
otherwise. It is guaranteed that the Reidemeister class of the identity is in the first position.
If G is abelian, this function relies on (a generalisation of) [DT21, Alg. 5]. If G and H are finite and G is not abelian, it relies on an orbit-stabiliser algorithm. Otherwise, it relies on (variants of) [DT21, Alg. 7].
This function is only guaranteed to produce a result if either G = H or G is nilpotent-by-finite.
‣ RepresentativesReidemeisterClasses ( hom1[, hom2] ) | ( function ) |
‣ RepresentativesTwistedConjugacyClasses ( hom1[, hom2] ) | ( function ) |
Returns a list containing representatives of the Reidemeister classes of ( hom1, hom2 ) if the Reidemeister number R( hom1, hom2 ) is finite, or returns fail
otherwise. It is guaranteed that the identity is in the first position.
The same remarks as for ReidemeisterClasses
are valid here.
‣ ReidemeisterNumber ( hom1[, hom2] ) | ( function ) |
‣ NrTwistedConjugacyClasses ( hom1[, hom2] ) | ( function ) |
Returns the Reidemeister number of ( hom1, hom2 ), i.e. the number of Reidemeister classes.
If G is abelian, this function relies on (a generalisation of) [Jia83, Thm. 2.5]. If G = H, G is finite non-abelian and \psi = \operatorname{id}_G, it relies on [FH94, Thm. 5]. Otherwise, it uses the output of ReidemeisterClasses
.
This function is only guaranteed to produce a result if either G = H or G is nilpotent-by-finite.
gap> tcc := ReidemeisterClass( phi, psi, g1 ); (4,6,5)^G gap> Representative( tcc ); (4,6,5) gap> GroupHomomorphismsOfReidemeisterClass( tcc ); [ [ (1,2)(3,5,4), (2,3)(4,5) ] -> [ (1,2)(3,4), () ], [ (1,2)(3,5,4), (2,3)(4,5) ] -> [ (1,4)(3,6), () ] ] gap> ActingDomain( tcc ) = H; true gap> FunctionAction( tcc )( g1, h ); (1,6,4,2)(3,5) gap> Random( tcc ) in tcc; true gap> List( tcc ); [ (4,6,5), (1,6,4,2)(3,5) ] gap> Size( tcc ); 2 gap> StabiliserOfExternalSet( tcc ); Group([ (1,2,3,4,5), (1,3,4,5,2) ]) gap> ReidemeisterClasses( phi, psi ){[1..7]}; [ ()^G, (4,5,6)^G, (4,6,5)^G, (3,4)(5,6)^G, (3,4,5)^G, (3,4,6)^G, (3,5,4)^G ] gap> RepresentativesReidemeisterClasses( phi, psi ){[1..7]}; [ (), (4,5,6), (4,6,5), (3,4)(5,6), (3,4,5), (3,4,6), (3,5,4) ] gap> NrTwistedConjugacyClasses( phi, psi ); 184
The set of all Reidemeister numbers of automorphisms is called the Reidemeister spectrum and is denoted by \operatorname{Spec}_R(G), i.e.
\operatorname{Spec}_R(G) := \{\, R(\varphi) \mid \varphi \in \operatorname{Aut}(G) \,\}.
The set of all Reidemeister numbers of endomorphisms is called the extended Reidemeister spectrum and is denoted by \operatorname{ESpec}_R(G), i.e.
\operatorname{ESpec}_R(G) := \{\, R(\varphi) \mid \varphi \in \operatorname{End}(G) \,\}.
The set of all Reidemeister numbers of pairs of homomorphisms from a group H to a group G is called the coincidence Reidemeister spectrum of H and G and is denoted by \operatorname{CSpec}_R(H,G), i.e.
\operatorname{CSpec}_R(H,G) := \{\, R(\varphi, \psi) \mid \varphi,\psi \in \operatorname{Hom}(H,G) \,\}.
If H = G this is also denoted by \operatorname{CSpec}_R(G). The set of all Reidemeister numbers of pairs of homomorphisms from every group H to a group G is called the total Reidemeister spectrum and is denoted by \operatorname{TSpec}_R(G), i.e.
\operatorname{TSpec}_R(G) := \bigcup_{H} \operatorname{CSpec}_R(H,G).
Please note that the functions below are only implemented for finite groups.
‣ ReidemeisterSpectrum ( G ) | ( function ) |
Returns the Reidemeister spectrum of G.
If G is abelian, this function relies on the results from [Sen23].
‣ ExtendedReidemeisterSpectrum ( G ) | ( function ) |
Returns the extended Reidemeister spectrum of G.
‣ CoincidenceReidemeisterSpectrum ( [H, ]G ) | ( function ) |
Returns the coincidence Reidemeister spectrum of H and G.
‣ TotalReidemeisterSpectrum ( G ) | ( function ) |
Returns the total Reidemeister spectrum of G.
gap> Q := QuaternionGroup( 8 );; gap> D := DihedralGroup( 8 );; gap> ReidemeisterSpectrum( Q ); [ 2, 3, 5 ] gap> ExtendedReidemeisterSpectrum( Q ); [ 1, 2, 3, 5 ] gap> CoincidenceReidemeisterSpectrum( Q ); [ 1, 2, 3, 4, 5, 8 ] gap> CoincidenceReidemeisterSpectrum( D, Q ); [ 4, 8 ] gap> CoincidenceReidemeisterSpectrum( Q, D ); [ 2, 3, 4, 6, 8 ] gap> TotalReidemeisterSpectrum( Q ); [ 1, 2, 3, 4, 5, 6, 8 ]
Let \varphi,\psi\colon G \to G be endomorphisms such that R(\varphi^n,\psi^n) < \infty for all n \in \mathbb{N}. Then the Reidemeister zeta function Z_{\varphi,\psi}(s) of the pair (\varphi,\psi) is defined as
Z_{\varphi,\psi}(s) := \exp \sum_{n=1}^\infty \frac{R(\varphi^n,\psi^n)}{n} s^n.
Please note that the functions below are only implemented for endomorphisms of finite groups.
‣ ReidemeisterZetaCoefficients ( endo1[, endo2] ) | ( function ) |
For a finite group, the sequence of Reidemeister numbers of the iterates of endo1 and endo2, i.e. the sequence R(endo1,endo2), R(endo1^2,endo2^2), ..., is eventually periodic, i.e. there exist a periodic sequence (P_n)_{n \in \mathbb{N}} and an eventually zero sequence (Q_n)_{n \in \mathbb{N}} such that
\forall n \in \mathbb{N}: R(\varphi^n,\psi^n) = P_n + Q_n.
This function returns a list containing two sublists: the first sublist contains one period of the sequence (P_n)_{n \in \mathbb{N}}, the second sublist contains (Q_n)_{n \in \mathbb{N}} up to the part where it becomes the constant zero sequence.
‣ IsRationalReidemeisterZeta ( endo1[, endo2] ) | ( function ) |
Returns true
if the Reidemeister zeta function of endo1 and endo2 is rational, and false
otherwise.
‣ ReidemeisterZeta ( endo1[, endo2] ) | ( function ) |
Returns the Reidemeister zeta function of endo1 and endo2 if it is rational, and fail
otherwise.
‣ PrintReidemeisterZeta ( endo1[, endo2] ) | ( function ) |
Returns a string describing the Reidemeister zeta function of endo1 and endo2. This is often more readable than evaluating ReidemeisterZeta
in an indeterminate, and does not require rationality.
gap> khi := GroupHomomorphismByImages( G, G, [ (1,2,3,4,5), (4,5,6) ], > [ (1,2,6,3,5), (1,4,5) ] );; gap> ReidemeisterZetaCoefficients( khi ); [ [ 7 ], [ ] ] gap> IsRationalReidemeisterZeta( khi ); true gap> ReidemeisterZeta( khi ); function( s ) ... end gap> s := Indeterminate( Rationals, "s" );; gap> ReidemeisterZeta( khi )(s); (1)/(-s^7+7*s^6-21*s^5+35*s^4-35*s^3+21*s^2-7*s+1) gap> PrintReidemeisterZeta( khi ); "(1-s)^(-7)"
generated by GAPDoc2HTML