#8667: New version of modular group cohomology spkg
----------------------------+-----------------------------------------------
Reporter: SimonKing | Owner: SimonKing
Type: enhancement | Status: new
Priority: major | Milestone: sage-4.4
Component: group_theory | Keywords: modular cohomology finite group
Author: Simon King | Upstream: N/A
Reviewer: | Merged:
Work_issues: |
----------------------------+-----------------------------------------------
There is a major new version 2.0 of the p_group_cohomology spkg. It can be
installed by
{{{
sage -i
http://sage.math.washington.edu/home/SimonKing/Cohomology/p_group_cohomology-2.0.spkg
}}}
A test suite is run if `SAGE_CHECK=yes`. The results are printed on screen
and saved in `install.log`. There is extensive
[http://sage.math.washington.edu/home/SimonKing/Cohomology/
documentation].
'''__Main New Features__'''
The name "p_group_cohomology" used to mean "cohomology of p-groups". Now,
it means "mod p cohomology of finite groups", i.e., the package now covers
the case of non prime power groups as well. This is implemented in the new
module `pGroupCohomology.modular_cohomology`.
With the new package version, we were able to compute the mod-p cohomology
rings of many interesting groups and for different primes - see [here
http://www.nuigalway.ie/maths/sk/Cohomology/rings/]. Most notably, we can
compute the mod-2 cohomology rings of the third Conway group (it is Cohen-
Macaulay) and the Higman-Sims group.
'''__Minor Improvements__'''
* The documentation is now backed up by references.
* As a safety feature, data in the Singular interface are reconstructed,
should Singular crash. This is particularly important, since the new
implementation ''heavily'' relies on Singular.
* More generally, I tried to make all potentially hard computations
interruptible without data loss.
* The install script should be better portable:
* The test for the presence of the Small Groups library is improved
(compare #8523)
* The environment variables `CC`, `AR`, `MKDIR`, `RM` etc are now used.
* In previous versions, it sometimes happened that `C-MeatAxe` wrote a
multiplication table in the current directory. This is now stopped.
'''__Theory__'''
Both for prime power and non prime power groups, the basic approach is to
approximate the cohomology ring degree by degree. A completeness criterion
then asserts that the approximation is complete, so that the computation
may terminate. More details and
[http://sage.math.washington.edu/home/SimonKing/Cohomology/pGroupCohomology.html#references
references] can be found in the documentation.
__Prime power case__
For prime power groups, the approximation is computed using an initial
segment of a minimal free resolution. We use a modification of Dave
Benson's completeness criterion. In the new package version, we
alternatively use a criterion of Peter Symonds.
The modified Benson criterion uses an existence result for small filter
regular parameters over a finite field extension. For Symonds' criterion,
the parameters don't need to be filter regular, but one can not use a
field extension. For both criteria, small parameter degrees are helpful.
So, two things may happen:
* General parameters are of smaller degree than filter regular
parameters: Advantage for the Symonds criterion.
* The degrees of filter regular parameters over an extension field are
smaller than the degrees of general parameters without field extension:
Advantage for the modified Benson criterion.
The program chooses between the two criteria. If ''both'' may apply, the
Symonds criterion is preferred, since it is easier to use.
__Non prime power case__
The computations rely on the stable element method. Namely, the mod-''p''
cohomology of a finite group ''G'' can be computed as a subring of the
mod-''p'' cohomology of any subgroup ''P'' of ''G'' whose index is coprime
to ''p''. This subring is characterised by so-called stability conditions
given by pairs of induced maps.
So, eventually the computations rely on the computation of the cohomology
ring of a prime power group. But this can be in several steps. By default,
the program starts with the cohomology ring of a Sylow subgroup ''S'' and
then proceeds to compute the cohomology of `P=Normaliser(G,Centre(S))` as
a subring of the cohomology of ''S'', and computes the cohomology of ''G''
as a subring of the cohomology of ''P''.
The reason for choosing an intermediate subgroup between ''G'' and ''S''
is that the number of stability conditions usually drops drastically,
compared with a direct computation with ''P=S''.
Now, if the cohomology ring of ''P'' is computed, the ring structure of
the cohomology of ''G'' can be computed in increasing degree, by solving
the stability conditions. Eventually, it would be possible to use either
Benson's or Symonds' criterion.
However for non prime power groups, [http://arxiv.org/abs/1004.0736
another criterion] is available that combines the advantages of the other
two criteria: It uses an existence proof for (not necessarily filter
regular) parameters over a finite extension field, and it relies on the
computation of the Poincare series of the ring approximation, which is
relatively easy compared with a computation of the filter degree type.
'''__Example__'''
The example that we present here is part of the doc tests. Its purpose is
to illustrate a theoretical improvement that stands behind the
implementation.
We compute the mod 2 cohomology of the symmetric group `S_8`. The reason
for using the option `useFactorization=False` is that in this example the
random factorization algorithm for multivariate polynomials often (not
always) chokes on the paramaters of the ring.
{{{
sage: from pGroupCohomology import CohomologyRing
sage: G = gap('SymmetricGroup(8)')
sage: H = CohomologyRing(G,
prime=2,GroupName='SymmetricGroup(8)',useFactorization=False)
}}}
The initialisation takes quite long, since behind the scenes other
cohomology rings are computed, namely:
{{{
sage: H.subgroup_cohomology()
H^*(SmallGroup(384,5602); GF(2))
sage: H.sylow_cohomology()
H^*(Syl2(S8); GF(2))
}}}
We compute the complete ring structure by a single command:
{{{
sage: H.make()
sage: print H
Cohomology ring of S8 with coefficients in GF(2)
Computation complete
Minimal list of generators:
[b_2_0: 2-Cocycle in H^*(S8; GF(2)),
c_4_0: 4-Cocycle in H^*(S8; GF(2)),
b_6_0: 6-Cocycle in H^*(S8; GF(2)),
b_1_0: 1-Cocycle in H^*(S8; GF(2)),
b_3_0: 3-Cocycle in H^*(S8; GF(2)),
b_3_1: 3-Cocycle in H^*(S8; GF(2)),
b_5_8: 5-Cocycle in H^*(S8; GF(2)),
b_7_17: 7-Cocycle in H^*(S8; GF(2))]
Minimal list of algebraic relations:
[b_3_0*b_3_1+b_1_0*b_5_8+b_1_0^3*b_3_0+b_2_0*b_1_0*b_3_1+c_4_0*b_1_0^2,
b_6_0*b_1_0,
b_1_0*b_7_17,
b_3_1*b_5_8+b_1_0^2*b_3_0^2+b_1_0^3*b_5_8+b_1_0^5*b_3_0+b_2_0*b_1_0*b_5_8+b_2_0*b_1_0^3*b_3_1+c_4_0*b_1_0*b_3_1+c_4_0*b_1_0*b_3_0+c_4_0*b_1_0^4,
b_2_0*b_7_17,
b_6_0*b_3_1,
b_3_0*b_7_17,
b_3_1*b_7_17,
b_5_8^2+b_1_0*b_3_0^3+b_1_0^4*b_3_0^2+b_2_0*b_3_0*b_5_8+b_2_0*b_1_0^2*b_3_0^2+b_2_0^2*b_1_0*b_5_8+b_2_0^2*b_6_0+c_4_0*b_3_0^2+b_2_0*c_4_0*b_1_0*b_3_0+c_4_0^2*b_1_0^2,
b_5_8*b_7_17]
}}}
In the rest of this example, we discuss the three completeness criteria.
The criteria have in common that one needs to construct parameters. By
Benson, using simultaneous lifts of Dickson invariants in the cohomology
of maximal elementary abelian subgroups, one obtains filter regular
parameters. Here, they live in degrees 8, 12, 14, 15. But it turns out
that the last parameter can be replaced by an element in degree 6. Note
that replacing the last parameter does not change filter regularity.
{{{
sage: H.filter_regular_parameters()
['b_3_0*b_5_8+b_1_0^2*b_3_1^2+b_1_0^2*b_3_0^2+b_1_0^3*b_5_8+b_1_0^5*b_3_0+b_1_0^8+b_2_0*b_1_0^3*b_3_1+b_2_0^4+c_4_0*b_1_0*b_3_1+c_4_0*b_1_0*b_3_0+c_4_0*b_1_0^4+c_4_0^2',
'b_3_1^4+b_3_0^4+b_1_0^4*b_3_0*b_5_8+b_1_0^6*b_3_1^2+b_1_0^6*b_3_0^2+b_1_0^7*b_5_8+b_1_0^9*b_3_0+b_6_0*b_3_0^2+b_6_0^2+b_2_0*b_1_0*b_3_0^3+b_2_0*b_1_0^4*b_3_1^2+b_2_0*b_1_0^5*b_5_8+b_2_0*b_1_0^7*b_3_1+b_2_0^2*b_1_0^2*b_3_1^2+b_2_0^2*b_1_0^5*b_3_0+b_2_0^3*b_1_0*b_5_8+b_2_0^3*b_1_0^3*b_3_1+b_2_0^3*b_6_0+b_2_0^4*b_1_0^4+c_4_0*b_3_0*b_5_8+c_4_0*b_1_0^2*b_3_1^2+c_4_0*b_1_0^2*b_3_0^2+c_4_0*b_1_0^3*b_5_8+c_4_0*b_1_0^5*b_3_1+c_4_0*b_1_0^5*b_3_0+c_4_0*b_1_0^8+b_2_0*c_4_0*b_3_0^2+b_2_0*c_4_0*b_1_0^3*b_3_1+b_2_0*c_4_0*b_1_0^3*b_3_0+b_2_0^2*c_4_0*b_1_0*b_3_1+b_2_0^2*c_4_0*b_1_0^4+c_4_0^2*b_1_0*b_3_1+c_4_0^2*b_1_0*b_3_0+c_4_0^2*b_1_0^4+b_2_0*c_4_0^2*b_1_0^2+b_2_0^2*c_4_0^2',
'b_7_17^2+b_3_0^3*b_5_8+b_1_0^2*b_3_1^4+b_1_0^2*b_3_0^4+b_1_0^3*b_3_0^2*b_5_8+b_6_0*b_3_0*b_5_8+b_2_0*b_1_0^3*b_3_1^3+b_2_0*b_1_0^3*b_3_0^3+b_2_0*b_1_0^4*b_3_0*b_5_8+b_2_0*b_1_0^6*b_3_1^2+b_2_0*b_1_0^9*b_3_0+b_2_0*b_6_0*b_3_0^2+b_2_0^2*b_1_0*b_3_0^3+b_2_0^2*b_1_0^4*b_3_1^2+b_2_0^2*b_1_0^4*b_3_0^2+b_2_0^2*b_1_0^7*b_3_1+b_2_0^3*b_3_0*b_5_8+b_2_0^3*b_1_0^2*b_3_0^2+b_2_0^3*b_1_0^3*b_5_8+b_2_0^4*b_1_0*b_5_8+b_2_0^4*b_6_0+c_4_0*b_1_0*b_3_1^3+c_4_0*b_1_0^4*b_3_1^2+c_4_0*b_1_0^4*b_3_0^2+c_4_0*b_1_0^7*b_3_0+b_2_0*c_4_0*b_1_0^2*b_3_1^2+b_2_0*c_4_0*b_1_0^2*b_3_0^2+b_2_0*c_4_0*b_1_0^3*b_5_8+b_2_0*c_4_0*b_1_0^5*b_3_1+b_2_0*c_4_0*b_1_0^5*b_3_0+b_2_0*c_4_0*b_1_0^8+b_2_0^2*c_4_0*b_3_0^2+b_2_0^2*c_4_0*b_1_0*b_5_8+b_2_0^2*c_4_0*b_1_0^3*b_3_1+b_2_0^2*c_4_0*b_6_0+b_2_0^3*c_4_0*b_1_0*b_3_0+c_4_0^2*b_3_1^2+c_4_0^2*b_1_0^6+b_2_0*c_4_0^2*b_1_0*b_3_1+b_2_0*c_4_0^2*b_1_0^4+c_4_0^3*b_1_0^2',
'b_1_0^6+b_6_0']
sage: H.is_filter_regular(_,[8,12,14,6])
True
sage: H.filter_degree_type()
[-1, -2, -3, -4, -4]
}}}
Benson's test would yield the degree bound `(8+12+14+6)-dimension = 36`.
It turns out that our existence proof for filter regular parameters over a
finite extension field does not yield an improvement:
{{{
sage: H.potential_degree_bound(H.filter_regular_parameters(),[8,12,14,6])
36
}}}
The Symonds test relies on parameters that are not necessarily filter
regular. The program finds some, in degrees 4,12,14,6. Actually it is
guaranteed that none of these parameters can be replaced by an element of
smaller degree.
{{{
sage: H.parameters()
['b_2_0^2+c_4_0',
'b_3_1^4+b_3_0^4+b_1_0^4*b_3_0*b_5_8+b_1_0^6*b_3_1^2+b_1_0^6*b_3_0^2+b_1_0^7*b_5_8+b_1_0^9*b_3_0+b_6_0*b_3_0^2+b_6_0^2+b_2_0*b_1_0*b_3_0^3+b_2_0*b_1_0^4*b_3_1^2+b_2_0*b_1_0^5*b_5_8+b_2_0*b_1_0^7*b_3_1+b_2_0^2*b_1_0^2*b_3_1^2+b_2_0^2*b_1_0^5*b_3_0+b_2_0^3*b_1_0*b_5_8+b_2_0^3*b_1_0^3*b_3_1+b_2_0^3*b_6_0+b_2_0^4*b_1_0^4+c_4_0*b_3_0*b_5_8+c_4_0*b_1_0^2*b_3_1^2+c_4_0*b_1_0^2*b_3_0^2+c_4_0*b_1_0^3*b_5_8+c_4_0*b_1_0^5*b_3_1+c_4_0*b_1_0^5*b_3_0+c_4_0*b_1_0^8+b_2_0*c_4_0*b_3_0^2+b_2_0*c_4_0*b_1_0^3*b_3_1+b_2_0*c_4_0*b_1_0^3*b_3_0+b_2_0^2*c_4_0*b_1_0*b_3_1+b_2_0^2*c_4_0*b_1_0^4+c_4_0^2*b_1_0*b_3_1+c_4_0^2*b_1_0*b_3_0+c_4_0^2*b_1_0^4+b_2_0*c_4_0^2*b_1_0^2+b_2_0^2*c_4_0^2',
'b_7_17^2+b_3_0^3*b_5_8+b_1_0^2*b_3_1^4+b_1_0^2*b_3_0^4+b_1_0^3*b_3_0^2*b_5_8+b_6_0*b_3_0*b_5_8+b_2_0*b_1_0^3*b_3_1^3+b_2_0*b_1_0^3*b_3_0^3+b_2_0*b_1_0^4*b_3_0*b_5_8+b_2_0*b_1_0^6*b_3_1^2+b_2_0*b_1_0^9*b_3_0+b_2_0*b_6_0*b_3_0^2+b_2_0^2*b_1_0*b_3_0^3+b_2_0^2*b_1_0^4*b_3_1^2+b_2_0^2*b_1_0^4*b_3_0^2+b_2_0^2*b_1_0^7*b_3_1+b_2_0^3*b_3_0*b_5_8+b_2_0^3*b_1_0^2*b_3_0^2+b_2_0^3*b_1_0^3*b_5_8+b_2_0^4*b_1_0*b_5_8+b_2_0^4*b_6_0+c_4_0*b_1_0*b_3_1^3+c_4_0*b_1_0^4*b_3_1^2+c_4_0*b_1_0^4*b_3_0^2+c_4_0*b_1_0^7*b_3_0+b_2_0*c_4_0*b_1_0^2*b_3_1^2+b_2_0*c_4_0*b_1_0^2*b_3_0^2+b_2_0*c_4_0*b_1_0^3*b_5_8+b_2_0*c_4_0*b_1_0^5*b_3_1+b_2_0*c_4_0*b_1_0^5*b_3_0+b_2_0*c_4_0*b_1_0^8+b_2_0^2*c_4_0*b_3_0^2+b_2_0^2*c_4_0*b_1_0*b_5_8+b_2_0^2*c_4_0*b_1_0^3*b_3_1+b_2_0^2*c_4_0*b_6_0+b_2_0^3*c_4_0*b_1_0*b_3_0+c_4_0^2*b_3_1^2+c_4_0^2*b_1_0^6+b_2_0*c_4_0^2*b_1_0*b_3_1+b_2_0*c_4_0^2*b_1_0^4+c_4_0^3*b_1_0^2',
'b_1_0^6+b_6_0']
}}}
It turns out that the ring approximation is generated in degree at most
32, as a module over these paramters:
{{{
sage: max([int(singular.eval('deg(%s)'%t)) for t in
H.relation_ideal().std(singular.ideal(H.parameters())).kbase()])
32
}}}
The Symonds criterion thus yields the bound `(4+12+14+6)-dimension+1=33`.
However, it turns out that ''over some finite extension field'', the
degree 14 parameter can be replaced by an element in degree 7. Note that
this is impossible without a field extension, because otherwise the
exhaustive search in `H.parameters()` would have detected it. The
existence of the parameter can be shown like this:
{{{
sage: P = H.parameters()
sage: P.pop(2)
'b_7_17^2+b_3_0^3*b_5_8+b_1_0^2*b_3_1^4+b_1_0^2*b_3_0^4+b_1_0^3*b_3_0^2*b_5_8+b_6_0*b_3_0*b_5_8+b_2_0*b_1_0^3*b_3_1^3+b_2_0*b_1_0^3*b_3_0^3+b_2_0*b_1_0^4*b_3_0*b_5_8+b_2_0*b_1_0^6*b_3_1^2+b_2_0*b_1_0^9*b_3_0+b_2_0*b_6_0*b_3_0^2+b_2_0^2*b_1_0*b_3_0^3+b_2_0^2*b_1_0^4*b_3_1^2+b_2_0^2*b_1_0^4*b_3_0^2+b_2_0^2*b_1_0^7*b_3_1+b_2_0^3*b_3_0*b_5_8+b_2_0^3*b_1_0^2*b_3_0^2+b_2_0^3*b_1_0^3*b_5_8+b_2_0^4*b_1_0*b_5_8+b_2_0^4*b_6_0+c_4_0*b_1_0*b_3_1^3+c_4_0*b_1_0^4*b_3_1^2+c_4_0*b_1_0^4*b_3_0^2+c_4_0*b_1_0^7*b_3_0+b_2_0*c_4_0*b_1_0^2*b_3_1^2+b_2_0*c_4_0*b_1_0^2*b_3_0^2+b_2_0*c_4_0*b_1_0^3*b_5_8+b_2_0*c_4_0*b_1_0^5*b_3_1+b_2_0*c_4_0*b_1_0^5*b_3_0+b_2_0*c_4_0*b_1_0^8+b_2_0^2*c_4_0*b_3_0^2+b_2_0^2*c_4_0*b_1_0*b_5_8+b_2_0^2*c_4_0*b_1_0^3*b_3_1+b_2_0^2*c_4_0*b_6_0+b_2_0^3*c_4_0*b_1_0*b_3_0+c_4_0^2*b_3_1^2+c_4_0^2*b_1_0^6+b_2_0*c_4_0^2*b_1_0*b_3_1+b_2_0*c_4_0^2*b_1_0^4+c_4_0^3*b_1_0^2'
sage:
H.relation_ideal().std(singular.ideal(P+H.standard_monomials(7))).dim()==0
True
}}}
What can we do with this existence proof? We know that the Poincare series
does not change by extending the field, and we know that we can choose its
denominator as given by the degree of the parameters. Moreover, it is
known that the Poincare series, as a rational function, has degree at most
minus the depth of the cohomology ring. The following lines imply that the
computation is complete (here is the [http://arxiv.org/abs/1004.0736
theoretical background), provided that one also shows that there are no
generators in higher degree:
{{{
sage: H.subgroup_cohomology().depth()
3
sage: 4+12+7+6-3
26
sage: H.knownDeg>=26
True
sage: p = H.poincare_series()
sage: t = p.parent().gen()
sage: q = p*(1-t^4)*(1-t^12)*(1-t^7)*(1-t^6)
sage: q.denominator()==1
True
sage: q.numerator().degree()<=26
True
}}}
There remains to show that there are no generators in higher degree, and
this is where we use that the group is not of prime power order. It can be
shown that the cohomology ring of ''P'' is a finitely generated module
over the restriction of the cohomology of ''G''. Moreover, if it is
finitely generated as a module over the restriction of the ring
approximation, generated in degree at most ''n'', then the cohomology ring
of ''G'' can be generated in degree at most ''n''. Here, we find:
{{{
sage: Rest=[t.as_cocycle_in_subgroup().as_polynomial() for t in
H.gens()[1:]]
sage: HP = H.subgroup_cohomology()
sage: HP.set_ring()
sage: max([int(singular.eval('deg(%s)'%t)) for t in
HP.relation_ideal().std(singular.ideal(Rest)).kbase()])
8
}}}
Hence, there are no generators above degree 8. Therefore, the computation
can indeed be terminated in degree 26. I call this the ''Hilbert-Poincare
criterion'', and it seems to be the best method available.
'''__Tests__'''
I did successfully build and test on my machine (`x86_64 GNU/Linux`, Intel
Core Duo), on bsd.math (both 32 and 64 bit) and on boxen.math. Any Python
or Cython function is documented and has a test.
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/8667>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.