<Chapter>
<Heading>Mal
'cev collection
</Heading>
Let <M>G</M> be an infinite polycyclic group. It is well-known that
there exist a normal <M>T</M>-group <M>N</M> and a <M>T</M>-group
<M>C</M> such that <M>H=CN</M> is normal
of finite index in <M>G</M> and <M>H/N</M> is free abelian of finite
rank <Cite Key=
"Seg83"/>.
In this chapter we present an effective collection method for an infinite
polycyclic group which is given by a polycyclic presentation
with respect to a polycyclic sequence <M>P</M> going through the normal
series <M>1 \le N \le H \le G</M>.
This polycyclic sequence <M>P</M> must be chosen as follows.
Let <M>(n_1,\dots,n_l)</M> be a Mal
'cev basis of N and let
<M>(c_1N,\dots,c_k N)</M> be a basis for
the free abelian group <M>CN/N</M>.
Then <M>(c_1,\dots,c_k,n_1,\dots,n_l)</M>
is a polycyclic sequence for <M>H=CN</M>. Further there exists
<M>f_1,\dots, f_j \in G</M> such that <M>(f_1 H, \dots, f_j H)</M> is
a polycyclic sequence for <M>G/H</M>. Now we set
<
Display>P = (f_1,\dots,f_j, c_1, \dots , c_k, n_1, \dots, n_l )</
Display>
<Section>
<Heading>The main functions
</Heading>
<ManSection>
<Func Name=
"MalcevCollectorConstruction" Arg=
"G, inds, C, CC, N, NN"/>
<Description>
Returns a Mal
'cev collector for the infinite polycyclically
presented group <M>G</M>. The group <M>G</M> must be given
with respect to a polycyclic sequence <M>(g_1,\dots,g_r, c_{r+1},
\dots, c_{r+s}, n_{r+s+1}, \dots, n_{r+s+t})</M>
with the following properties:
<List>
<Item>
(a) <M>(n_{r+s+1}, \dots, n_{r+s+t})</M> is a Mal
'cev basis for
the <M>T</M>-group <M>N \leq G</M>,
</Item>
<Item>
(b) <M>(c_{r+1}N, \dots, c_{r+s}N)</M> is a basis for the
free-abelian group <M>CN/N</M> where <M>C \leq G</M> is a
<M>T</M>-group generated by <M>c_{r+1}, \dots, c_{r+s}</M>,
</Item>
<Item>
(c) <M>(g_1 CN, \dots, g_r CN)</M> is a polycyclic sequence for
the finite group <M>G/CN</M>.
</Item>
</List>
The list <A>inds</A> is equal to
<M>[ [1,\dots,r],[r+1,\dots,r+s],[r+s+1,\dots,r+s+t]]</M>.
The group <M>CC</M> is isomorphic to <M>C</M> via
<A>CC</A>!.bijection
and given by a polycyclic presentation with respect
to a Mal
'cev basis starting with c_{r+1}, \dots, c_{r+s}.
The group <M>NN</M> is isomorphic to <M>N</M> via
<A>NN</A>!.bijection.
and given by a polycyclic presentation with respect
to the Mal
'cev basis ( n_{r+s+1}, \dots, n_{r+s+t}).
</Description>
</ManSection>
<ManSection>
<Func Name=
"GUARANA.Tr_n_O1" Arg=
"n" />
<Func Name=
"GUARANA.Tr_n_O2" Arg=
"n" />
<Description>
for a positive integer <A>n</A>
these functions construct polycyclically presented groups
that can be used to test the Mal
'cev collector.
They return a list which can be used as input for the function
MalcevCollectorConstruction.
The constructed groups are isomorphic to triangular matrix groups
of dimension <A>n</A> over the ring <M>O_1</M>, respectively
<M>O_2</M>.
The ring <M>O_1</M>, respectively <M>O_2</M>, is the maximal order
of <M>\Q(\theta_i)</M> where <M>\theta_1</M>, respectively
<M>\theta_2</M>, is a zero of the polynomial
<M>p_1(x) = x^2-3</M>, respectively
<M>p_2(x)=x^3 -x^2 +4</M>.
</Description>
</ManSection>
<ManSection>
<Func Name=
"GUARANA.F_2c_Aut1" Arg=
"c" />
<Func Name=
"GUARANA.F_3c_Aut1" Arg=
"c" />
<Description>
for a positive integer <A>c</A>
these functions construct polycyclically presented groups
that can be used to test the Mal
'cev collector.
They return a list which can be used as input for the function
MalcevCollectorConstruction.
These groups are constructed as follows:
Let <M>F_{n,c}</M> be the free nilpotent of class <M>c</M> group on
<M>n</M> generators.
An automorphism <M>\varphi</M> of the free group <M>F_n</M>
naturally induces an automorphism
<M>\bar{\varphi}</M> of <M>F_{n,c}</M>.
We use the automorphism <M>\varphi_1</M> of <M>F_2</M>
which maps <M>f_1</M> to <M>f_2^{-1}</M> and <M>f_2</M> to
<M>f_1 f_2^3</M> and the automorphism <M>\varphi_2</M> of
<M>F_3</M> mapping <M>f_1</M> to <M>f_2^{-1}</M>, <M>f_2</M>
to <M>f_3^{-1}</M> and <M>f_3</M> to <M>f_2^{-3}f_1^{-1}</M>
for our construction.
The returned group F_2c_Aut1, respectively F_3c_Aut2, is
isomorphic to the semidirect product
<M>\langle \varphi_1 \rangle \ltimes F_{2,c}</M>, respectively
<M>\langle \varphi_2 \rangle \ltimes F_{3,c}</M>.
</Description>
</ManSection>
<ManSection>
<Func Name=
"MalcevGElementByExponents" Arg=
"malCol, exps" />
<Description>
For a Mal
'cev collector malCol of a group G
and an exponent vector <A>exps</A> with integer
entries, this functions returns the group
element of <M>G</M>, which
has exponents <A>exps</A> with respect to the polycyclic sequence
underlying <A>malCol</A>.
</Description>
</ManSection>
<ManSection>
<Func Name=
"Random" Arg=
"malCol, range" />
<Description>
For a Mal
'cev collector malCol this function returns the
output of MalcevGElementByExponents( <A>malCol</A>, <A>exps</A> ),
where <A>exps</A> is an exponent vector whose entries are randomly
chosen integers between -<A>range</A> and <A>range</A>.
</Description>
</ManSection>
<ManSection>
<Func Name=
"*" Arg=
"g, h" />
<Description>
Returns the product of group elements which are defined with respect
to a Mal
'cev collector by the the function MalcevGElementByExponents.
</Description>
</ManSection>
<ManSection>
<Func Name=
"GUARANA.AverageRuntimeCollec" Arg=
"malCol, ranges, no" />
<Description>
For a Mal
'cev collector malCol, a list of positive integers
<A>ranges</A> and a positive integer <A>no</A>
this function computes for each number <A>r</A> in <A>ranges</A>
the average runtime of <A>no</A> multiplications of
two random elements of <A>malCol</A> of range <A>r</A>, as
generated by Random( <A>malCol</A>, <A>r</A> ).
</Description>
</ManSection>
</Section>
<Section>
<Heading>An example application
</Heading>
<Example>
gap> ll := GUARANA.Tr_n_O1( 3 );
[ Pcp-group with orders [ 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ [ 1 .. 3 ], [ 4 .. 6 ], [ 7 .. 12 ] ],
Pcp-group with orders [ 0, 0, 0, 0, 0, 0 ],
Pcp-group with orders [ 0, 0, 0, 0, 0, 0 ],
Pcp-group with orders [ 0, 0, 0 ], Pcp-group with orders [ 0, 0, 0 ] ]
gap> malCol := MalcevCollectorConstruction( ll );
<<Malcev collector>>
F : [ 2, 2, 2 ]
C : <<Malcev object of dimension 3>>
N : <<Malcev object of dimension 6>>
gap> exps_g := [ 1, 1, 1, -3, -2, 1, -2, -1, 0, 3, -1,3 ];
[ 1, 1, 1, -3, -2, 1, -2, -1, 0, 3, -1, 3 ]
gap> exps_h := [ 1, 0, 1, -1, 0, 2, 0, 4, -1, 5, 9,-5 ];
[ 1, 0, 1, -1, 0, 2, 0, 4, -1, 5, 9, -5 ]
gap> g := MalcevGElementByExponents( malCol, exps_g );
[ 1, 1, 1, -3, -2, 1, -2, -1, 0, 3, -1, 3 ]
gap> h := MalcevGElementByExponents( malCol, exps_h );
[ 1, 0, 1, -1, 0, 2, 0, 4, -1, 5, 9, -5 ]
gap> k := g*h;
[ 0, 1, 0, -4, -2, 3, -7, 0, -37, -16, -352, -212 ]
gap> Random( malCol, 10 );
[ 0, 0, 1, 9, 5, 5, 2, -2, 7, -10, 7, -6 ]
</Example>
</Section>
</Chapter>