As mentioned previously there are two ways in which one can compute the structure of a generic abelian group A. If the order of A is known or if it can be computed, then one proceeds to construct each p-Sylow subgroup of A. The p-Sylow subgroups are built from random elements in U, or Universe(U). (Recall that U (Universe(U)) is the domain of A.)
Random elements are chosen according to the implicit random functionality attached to U (Universe(U)), or according to the user-supplied function via the RandomIntrinsic parameter, or from a user-supplied set of generators via the UserGenerators parameter. It is therefore vital that user-supplied generators truly generate the group one wishes to construct.
The one drawback of this method (ie. computing the structure of the group from its various p-Sylow subgroups), apart from its `crudeness', is that it can be very space-expensive since it is necessary to store all the elements of a specific p-Sylow subgroup until it is completed. This algorithm is mostly based on work by Michael Stoll.
The second method computes the group structure from a set of generators (as supplied by the user), removing the need to compute the order of A. This can be particularly useful when computing this order is expensive. However, one must remember that computing the structure of a group from a set of generators is akin to the discrete logarithm problem. This second algorithm uses a variant of the Pollard-Rho algorithm and is due to Edlyn Teske [Tes98a].
If A is a subgroup of a generic abelian group, G say, then the structure computation is handled somewhat differently. In this case the structure of G is computed first. This is then followed by the computation of the structure of A. The rationale here is that once the structure of G is known, computing the structure of A is (almost always) cheap.
UseUserGenerators: Bool Default: FALSE
PollardRhoRParam: RngInt Default: 20
PollardRhoTParam: RngInt Default: 8
PollardRhoVParam: RngInt Default: 3
Compute the group structure of the generic abelian group A (which may be a subgroup as created by the subgroup constructor or the Sylow function). The two values returned are the abstract abelian group and the (invertible) map from the latter into A.
If UseUserGenerators is false, then the group structure computation is made via the construction of each p-Sylow subgroup, using the factorization of the order of A.
If UseUserGenerators is set to true, the group structure computation uses the user-supplied set of generators for A. In this case, the additional parameters PollardRhoRParam, PollardRhoTParam, and PollardRhoVParam can be supplied. They will be passed to the Pollard-Rho algorithm used in the group structure computation: PollardRhoRParam sets the size of the r-adding walks, PollardRhoTParam sets the size of the internal storage of elements, and PollardRhoVParam is used for an efficient finding of the periodic segment. It is conjectured that the default values as given above are `best' (see [Tes98b]), therefore there should be no need to set these parameters in general.
> G := AbelianGroup(GA_Zm); GA_Zm; Generic Abelian Group over Residue class ring of integers modulo 34384 Abelian Group isomorphic to Z/2 + Z/2 + Z/6 + Z/612 Defined on 4 generators Relations: 2*GA_Zm.1 = 0 2*GA_Zm.2 = 0 6*GA_Zm.3 = 0 612*GA_Zm.4 = 0