Is there a limit on the orders of elements in an AgGroup?
The motivation for the question and my own attempts to answer the
question follow:
Let $p$ and $q$ be odd primes such that $q$ is 1 mod $2p$. Let $n$ be a
primitive $p^{\text{th}}$ root of unity modulo $q$, and form the
semidirect product $G(p,q)$ with kernel of order $q$ and quotient of
order $p$ where the action of the quotient on the kernel is defined by
the root of unity selected.
For large $q$ (on the order of $10^7$, I would like to use an AgGroup to
represent this group, as it would otherwise require either an automaton
(via Derek Holt's kbmag) for an economical normal form or a tremendous
amount of storage because of the length of a permutation representing an
element of order $q$. So, I try the following:
gap> IsPrime(3) and IsPrime(53269) and Mod(5427^3,53269)=1; true gap> F:=FreeGroup(2); Group( f.1, f.2 ) gap> G:=F / [F.1^3,F.2^53269,(F.2^F.1)*(F.2)^-5427]; Group( f.1, f.2 ) gap> InfoAgGroup1:=Print; function (...) internal; end gap> InfoAgGroup2:=Print; function (...) internal; end gap> G1:=AgGroupFpGroup(G); #W AgGroupFpGroup: composite index, use 'RefinedAgSeries'
Now, this seems rather strange, so let's see what's up:
gap> AgGroupOps.FpGroup(G1); Group( f.1, f.2 ) gap> PresentationFpGroup(last); << presentation with 2 gens and 3 rels of total length 17700 >> gap> TzPrintPresentation(last); #I generators: #I 1. f.1 5 occurrences #I 2. f.2 17695 occurrences #I relators: #I 1. f.1^3 #I 2. f.2^-1*f.1^-1*f.2*f.1*f.2^-5426 #I 3. f.2^12267 #I there are 2 generators and 3 relators of total length 17700 gap> IsPrime(12267); false
The order of the second generator gets changed somehow, so let's go and
root out the offending code:
# Check if the indices are primes.
if ForAny( G.generators, x->not IsPrimeInt(RelativeOrderAgWord(x))) then
Print("#W AgGroupFpGroup: composite index, use 'RefinedAgSeries'\n");
fi;
which, after a
grep RelativeOrderAgWord /usr/local/gap3r4p3/lib/* | less
shows that the command is defined in the kernel somewhere, so we go poke
around in aggroup.c:
*V HdRnRelativeOrder . . . . . . . . . . . . 'RelativeOrder' record name bag
*V HdCallSumAgWord . . . . . . . . . . . . . . . . . call to record function
*F FunRelativeOrderAgWord( <hdCall> ) . . . internal 'RelativeOrderAgWord'..
Long story short, it boils down to INT_TO_HD, which, via integer.c and
integer.h, claims to have no problems with integers between $\pm 2^{28} -1$.
So I'm stumped. The system is a fully-patched GAP 3r4p3 running on a P5
under Linux; I have the same problems on a NeXTstation and on a
SparcServer 1000.
Any assistance would be greatly appreciated.
Paul Brown