<Chapter><Heading> Poincare series</Heading>

<Table Align="|l|" >

<Row>
<Item>
<C>EfficientNormalSubgroups(G)</C>
<Br/>
<C>EfficientNormalSubgroups(G,k)</C>
<P/>
Inputs a prime-power group <M>G</M> and, optionally, a positive 
integer <M>k</M>. The default is <M>k=4</M>. The function returns a 
list of normal subgroups <M>N</M> in <M>G</M> such that the Poincare 
series for <M>G</M> equals 
the Poincare series for the direct product <M>(N \times (G/N))</M> up to degree <M>k</M>.
</Item>
</Row>
<Row>
<Item>
<Index> ExpansionOfRationalFunction</Index>
<C>ExpansionOfRationalFunction(f,n)</C>
<P/>

Inputs a positive integer <M>n</M> and a rational function 
<M>f(x)=p(x)/q(x)</M> where the degree of the polynomial <M>p(x)</M>
is less than that of <M>q(x)</M>. It returns a list 
<M>[a_0 , a_1 , a_2 , a_3 , \ldots ,a_n]</M> of the first <M>n+1</M>
coefficients of the infinite expansion
<P/>
<M>f(x) = a_0 + a_1x + a_2x^2 + a_3x^3 + \ldots </M>  .
</Item>
</Row>

<Row>
<Item>
<Index> PoincareSeries</Index>
<C>
PoincareSeries(G,n)
</C>
&nbsp;
<C>
PoincareSeries(R,n)
</C>
<Br/>
<C>
PoincareSeries(L,n)
</C>
<Br/>
<C>
PoincareSeries(G)
</C>
<P/>

Inputs a finite <M>p</M>-group <M>G</M> and a positive integer <M>n</M>. 
It returns a quotient of polynomials <M>f(x)=P(x)/Q(x)</M> 
whose coefficient of <M>x^k</M> equals the rank of the vector space 
<M>H_k(G,Z_p)</M> for all <M>k</M> in the range <M>k=1</M> to <M>k=n</M>.  
(The second input variable can be omitted, in which case the 
function tries to choose a "reasonable" value for <M>n</M>.)
<P/>

In place of the group <M>G</M> the function can also input 
(at least <M>n</M> terms of) a minimal mod <M>p</M> resolution 
<M>R</M> for <M>G</M>.
<P/>
Alternatively, the first input variable can be a list <M>L</M>
of integers. In this case the coefficient of <M>x^k</M> in <M>f(x)</M>
is equal to the <M>(k+1)</M>st term in the list.
</Item>
</Row>


<Row>
<Item>
<Index> PoincareSeriesPrimePart</Index>
<C>PoincareSeriesPrimePart(G,p,n)
</C>
<P/>

Inputs a finite group <M>G</M>, a prime <M>p</M>, and a positive integer 
<M>n</M>. It returns a quotient of polynomials 
<M>f(x)=P(x)/Q(x)</M> whose coefficient of <M>x^k</M> 
equals the rank of the vector space <M>H_k(G,Z_p)</M> 
for all <M>k</M> in the range <M>k=1</M> to <M>k=n</M>.
<P/>
The efficiency of this function needs to be improved.
</Item>
</Row>

<Row>
<Item>
<Index> Prank</Index>
<C>
Prank(G)
</C>
<P/>

Inputs a <M>p</M>-group <M>G</M> and returns the rank of the 
largest elementary abelian subgroup. 
</Item>
</Row>

</Table>
</Chapter>


