## Idea

Implementation of polycyclic groups in Sympy. A few methods of the pc-groups require similar implementation as that of the `FpGroups`

, so, `PcGroup`

can be implemented as a child of the `FpGroup`

such that it will inherit the methods required.

## Deliverables

- Computation of polycyclic series for a given
`FpGroup`

. - Solving word problem for Polycyclic groups using collection algortihm.
- Implement a method to compute coset representatives of a given CosetTable.(Might be useful in the computation of polycyclic series).
**(Week-9)** - Elementatry methods like
`compute_pc_presentation`

,`compute_power_relations`

,`compute_relative_orders`

etc…**(Week-9)**

## Algorithms

**Computing the polycyclic series:**As sugested by Valeriia and Kalevi in the gitter channel, the method to compute the polycyclic series would be, first we compute the derived series`G = G1, G2, ..., Gn = <identity>`

. Every quotient`Q_i = G_i/G_i+1`

is abelian so every subgroup of the quotient group is a normal subgroup. To compute the subnormal series, we randomly pick and element`e`

(Could be the generators as well) from`Q_i`

and quotient the group`Q_i`

with the group generated by this element`e`

. This will be repeated recursively to obtain the cyclic subnormal series,`H1, H2, ..., Hn`

. Now, the pre-images(`H*_k`

) of`H_k`

in the quotient map from`G_i -> G_i+1`

will be the subgroups of`G_i`

. Now, we lift it to the original group. So, the final cyclic subnormal series(polycyclic series) will be`G1 > ... > G_i > H*_1 >... H*_n > G_i+1 > ... > <identity>`

.**Computing the abelian-subgroup-quotient (Auxilary method):**The presentation of the quotient`G/H`

is given by adding the generators of`G`

to the relators of`H`

, they are defined on the same free-group.**Computing Polycyclic generating sequence and relative orders:**The polycyclic generating sequence can be obtained by chosing an element`g_i`

such that`g_i`

belongs to`G_i/G_i+1`

. And the relative order`r_i`

is written as`r_i = [G_i:G_i+1]`

.

## Implementation

- A
`PcGroup`

class is defined as a child of the`FpoGroup`

class. - Method
`is_polycyclic`

is implemented to check if the given group is polycyclic. - A method to compute the polycyclic series for a given group.
- A method to check if a given group is the subgroup of a parent group.(Uses the
`PermutationGroup`

isomorphic to it). - A few elementary methods are implemented as a part of the
`PcGroup`

class, which include`is_prime_order`

,`relative_order`

,`compute_pcgs`

.

## Trvial example

To be added after testing.

## PR

Here is the link to the PR ‘Add methods for Polycyclic Groups’. This is currently work in progress (as of 11tha July, 2018) and would be completed soon.

## Week-9:

- Method to compute the coset representative for a given cosetTable.
- Implementation of the collectuion algorthim.
- Implement methods to compute the pc-presentation and the power realtions.
**To-Do:**Add tests and documentation.## References

- [1] Derek F.Holt, Bettina Fick, Eamonn A.O’Brian. Handbook of Computational Group Theory.
- [2] Article on Polycyclic groups.
- [3] GAP - Polycyclic package.