Ask Your Question

p-part of a class group

asked 2013-02-25 12:09:12 +0200

lalitkumarj gravatar image

updated 2013-02-25 15:43:53 +0200


I am trying to compute the p-part of a class groups of some number fields. I was hoping to just call G.sylow_subgroup(p), but this function is not implemented for Abelian groups. In addition, invariants doesn't seem to work, for example, if G= C6, then G.invariants() returns [6], which doesn't seem correct.

I would appreciate any advice on how to do this. For example, can I coerce an Abelian Group to just be a finite group?

Note: I asked this on IRC without an answer. I hope it is not bad form to ask it here.

Partial Solution: Elementary divisors and some factorization code gives me what I want. However, it would be nice to be able to coerce an abelian group into a group.

edit retag flag offensive close merge delete


Could you please post the code that calculates G?

Benjamin Young gravatar imageBenjamin Young ( 2013-03-03 13:21:10 +0200 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2016-06-01 19:37:49 +0200

nbruin gravatar image

The invariants as returned are in fact correct if you understand them to be the elementary divisors. Were you expecting them to be the concatenation of the invariants of the Sylow subgroups? The elementary divisor interpretation is more canonical.

In any case, the baroque print representation of elements in the class group mean that most of the group functionality (which would call gap via string interfaces) chokes, because the print names of the elements are supposed to be used as identifiers in gap.

The trick is to build an isomorphic (abstract) group and define an isomorphism. It would be nice if it were automated, but once you get through basics it's not that bad:

sage: K.<a>=NumberField(x^2+26)
sage: C=K.class_group()
sage: G=AbelianGroup(C.invariants())
sage: GtoC=G.Hom(C)(lambda a: prod([b^e for e,b in zip(a.list(),C.gens())]))
sage: G.0
sage: GtoC(G.0)
Fractional ideal class (5, a + 2)

Many group operations (such as "subgroups") do work on G. Computing Sylow subgroups in finite abelian groups is easy enough to do by hand:

sage: P3=G.subgroup([g^c for g in G.gens()])
sage: N=G.order()
sage: c=(N // 3^(N.valuation(3)))
sage: P3=G.subgroup([g^c for g in G.gens()])

If you prefer, you could also ask for G=AdditiveAbelianGroups(...), which would give you a structure that concentrates more on the Z-module structure of G and misses some of the gap-related functionality.

A lot of these things would be nice to get a little easier. Especially the construction of G and GtoC should perhaps be automated, since the group returned by classgroup is a little hobbled (or perhaps that should be fixed, which would probably be quite a bit of work)

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools


Asked: 2013-02-25 12:09:12 +0200

Seen: 994 times

Last updated: Jun 01 '16