[Next][Prev] [Right] [Left] [Up] [Index] [Root]

Subgroups

The same dichotomy between creation and group structure computation as the one discussed for GenericAbelianGroup applies for subgroups of generic abelian groups. That is, if H is a subgroup of the generic abelian group A, then, as a general rule, the structure of H is not computed at creation time. There are two exceptions to this rule: when the user specifically requests structure computation to be performed (via the ComputeStructure parameter), and when the structure of A is already known and H is given in terms of a set of generators, or H is a p-Sylow subgroup of A.

Subsections

Construction of Subgroups

sub<A | L: parameters> : GrpAbGen, List -> GrpAbGen
Construct the subgroup of the generic abelian group A generated by the elements specified by the terms of the generator list L. A term L[i] of the generator list may consist of any of the following objects:
(a)
An element liftable into A;
(b)
A sequence of integers representing an element of A;
(c)
A set or sequence whose elements may be of either of the above types.

As seen in subsection Constructing an Element of a Generic Abelian Group an element liftable into A may be an element of A itself, or it may be an element of U (Universe(U)), U being as usual the domain over which A is defined.

For consistency with the construction of a generic abelian group, the values of the following parameters may also be passed to the subgroup constructor:

     Order: RngInt                       Default: 

     RandomIntrinsic: MonStg             Default: 

     ComputeStructure: Bool              Default: false

     UseUserGenerators: Bool             Default: false

     PollardRhoRParam: RngInt            Default: 20

     PollardRhoTParam: RngInt            Default: 8

     PollardRhoVParam: RngInt            Default: 3

In particular, it is possible to construct a subgroup by giving its order and a random function generating elements of the subgroup. In this case, the list L would be empty since computing the subgroup's structure will be achieved by building the p-Sylow subgroups from random elements of the subgroup.

Also, where the group structure of A is already known, or has been computed, and if the subgroup is defined in terms of a set of generators in L then the subgroup structure is computed at the time of creation.


Example GrpAbGen_SubgroupCreation (H22E4)

The following statements create two subgroups of G, and determine their structure.

> S := [];
> for j in [1..2] do
>     P := Random(G);
>     Include(~S, P);
> end for;
> S;
[ 6395, 33037 ]
> GH1_Zm := sub< G | S>;
> GH1_Zm;
Generic Abelian Group over
Residue class ring of integers modulo 34384
Abelian Group isomorphic to Z/6 + Z/612
Defined on 2 generators in supergroup G:
  GH1_Zm.1 = G.2 + G.3
  GH1_Zm.2 = G.4
Relations:
  6*GH1_Zm.1 = 0
  612*GH1_Zm.2 = 0
So the subgroup GH1_Zm has structure Z_6 x Z_(612).

> 
>
> S := [];
> for j in [1..5] do
>     P := Random(U);
>     Include(~S, P);
> end for;
> S;
[ 18731, 2255, 14303, 3013, 14389 ]
> GH2_Zm := sub< G | S>;
> GH2_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 in supergroup G:
  GH2_Zm.1 = G.1
  GH2_Zm.2 = G.2
  GH2_Zm.3 = G.3
  GH2_Zm.4 = G.4
Relations:
  2*GH2_Zm.1 = 0
  2*GH2_Zm.2 = 0
  6*GH2_Zm.3 = 0
  612*GH2_Zm.4 = 0
The next statements create two subgroups of GA_(qf) and determine their structure. In both cases computation of the structure is automatic since the supergroup structures GA_(Zm) and GA_(qf) had already been computed.

> S := [];
> for j in [1..2] do
>     P := Random(GA_qf);
>     Include(~S, P);
> end for;
> S;
[ <45,26,22226>, <937,-930,1298> ]
> GH1_qf := sub< GA_qf | S>;
> GH1_qf;
Generic Abelian Group over
Binary quadratic forms of discriminant -4000004
Abelian Group isomorphic to Z/2 + Z/258
Defined on 2 generators in supergroup GA_qf:
  GH1_qf.1 = GA_qf.1
  GH1_qf.2 = 2*GA_qf.2
Relations:
  2*GH1_qf.1 = 0
  258*GH1_qf.2 = 0
> 
> 
> S := [];
> for j in [1..2] do
>     P := Random(Q);
>     Include(~S, P);
> end for;
> S;
[ <225,136,4465>, <270,-226,3751> ]
> GH2_qf := sub< GA_qf | S>;
> GH2_qf;
Generic Abelian Group over
Binary quadratic forms of discriminant -4000004
Abelian Group isomorphic to Z/516
Defined on 1 generator in supergroup GA_qf:
  GH2_qf.1 = GA_qf.1 + GA_qf.2
Relations:
  516*GH2_qf.1 = 0

Construction of p-Sylow Subgroups

Sylow(A, p: parameters) : GrpAbGen, RngInt -> GrpAbGen
    ComputeStructure: Bool              Default: false
Create the p-Sylow subgroup of A. If ComputeStructure is true, or if the group structure of A is known, then the group structure is computed at the time of creation.

Example GrpAbGen_pSylowComputation (H22E5)

The following statements create each of the p-Sylow subgroups of G and determine their structure.

> order_fact := Factorization(#U);
> for i in [1..#order_fact] do
>     p := order_fact[ i, 1 ];
>     printf "%o-Sylow subgroup:", p;
>     GAp := Sylow(G, p);
>     GAp;
> end for;
2-Sylow subgroup: Generic Abelian Group over
Residue class ring of integers modulo 34384
Abelian Group isomorphic to Z/2 + Z/2 + Z/2 + Z/4
Defined on 4 generators in supergroup G:
  GAp.1 = G.1
  GAp.2 = G.2
  GAp.3 = 3*G.3
  GAp.4 = 153*G.4
Relations:
  2*GAp.1 = 0
  2*GAp.2 = 0
  2*GAp.3 = 0
  4*GAp.4 = 0
3-Sylow subgroup: Generic Abelian Group over
Residue class ring of integers modulo 34384
Abelian Group isomorphic to Z/3 + Z/9
Defined on 2 generators in supergroup G:
  GAp.1 = 2*G.3
  GAp.2 = 68*G.4
Relations:
  3*GAp.1 = 0
  9*GAp.2 = 0
17-Sylow subgroup: Generic Abelian Group over
Residue class ring of integers modulo 34384
Abelian Group isomorphic to Z/17
Defined on 1 generator in supergroup G:
  GAp.1 = 36*G.4
Relations:
  17*GAp.1 = 0


 [Next][Prev] [Right] [Left] [Up] [Index] [Root]