[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 of either of the two above described 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 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, if the group structure of A is already known/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 (H21E4)

The following statements create and compute two subgroups of GA_(Zm).

> S := [];
> for j in [1..2] do
>     P := Random(GA_Zm);
>     Include(~S, P);
> end for;
> S;
[ 6395, 33037 ]
> GH1_Zm := sub< GA_Zm | 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 GA_Zm:
  GH1_Zm.1 = GA_Zm.2 + GA_Zm.3
  GH1_Zm.2 = GA_Zm.4
Relations:
  6*GH1_Zm.1 = 0
  612*GH1_Zm.2 = 0
> 
>
> S := [];
> for j in [1..5] do
>     P := Random(U);
>     Include(~S, P);
> end for;
> S;
[ 18731, 2255, 14303, 3013, 14389 ]
> GH2_Zm := sub< GA_Zm | 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 GA_Zm:
  GH2_Zm.1 = GA_Zm.1
  GH2_Zm.2 = GA_Zm.2
  GH2_Zm.3 = GA_Zm.3
  GH2_Zm.4 = GA_Zm.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 and compute two subgroups of GA_(qf). In both cases subgroup structure computation is automatic since the supergroup structures GA_(Zm) and GA_(qf) were already 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 (H21E5)

The following statements create and compute the structure of each of the p-Sylow subgroups of GA_(Zm).

> order_fact := Factorization(#U);
> for i in [1..#order_fact] do
>     p := order_fact[ i, 1 ];
>     printf "%o-Sylow subgroup:", p;
>     GAp := Sylow(GA_Zm, 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 GA_Zm:
  GAp.1 = GA_Zm.1
  GAp.2 = GA_Zm.2
  GAp.3 = 3*GA_Zm.3
  GAp.4 = 153*GA_Zm.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 GA_Zm:
  GAp.1 = 2*GA_Zm.3
  GAp.2 = 68*GA_Zm.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 GA_Zm:
  GAp.1 = 36*GA_Zm.4
Relations:
  17*GAp.1 = 0


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