Take the 2-minute tour ×
Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

Which computer algebra system allows me to compute the homology of a complex of finitely presented abelian groups which are not necessarily free?

Sage and Magma apparently don't: see here and here.

Edit: I should specify that the main obstacle for me of doing this by hand with a CAS is the lack of an algorithm for computing the kernel of a homomorphism between finitely generated abelian groups.

share|improve this question
As far as I recall, these are just Smith normal form calculations, which Sage, Magma, Pari/GP, GAP, etc. will all do. You just want ker/im after all. They might not have nice wrapper routines for you, but at its heart it is just linear algebra. Note that linear algebra is significantly easier over finite fields than over Z, so if your groups are finitely presented elementary abelian groups, things are algorithmically simpler. Macaulay2 does a very nice job over reasonably general commutative algebras over fields. –  Jack Schmidt Jan 18 '11 at 2:44
@Jack: Well, I think I cannot use the usual command for the kernel in linear algebra since it will not see the kernel of the projection $\mathbb Z\to\mathbb Z/2$ for instance. –  Rasmus Jan 18 '11 at 7:18
add comment

1 Answer

up vote 3 down vote accepted

Magma can compute the kernel and the image of a homomorphism between abelian groups. For instance,

  A<[x]> := AbelianGroup([0]);
  B<[y]> := AbelianGroup([2,4]);
  C<[z]> := AbelianGroup([2]);
  g := hom< B -> C | [z[1],2*z[1]]>;
  K := Kernel(g);
  f := hom< A -> K | [4*y[1]-2*y[2]]>;
  I := Image(f);

gives the following result:

 Abelian Group isomorphic to Z/4
 Defined on 1 generator in supergroup B:
     K.1 = y[2]
     4*K.1 = 0
 Abelian Group isomorphic to Z/2
 Defined on 1 generator in supergroup K:
     I.1 = 2*K.1
2*I.1 = 0
 Abelian Group isomorphic to Z/2
 Defined on 1 generator
     2*$.1 = 0
share|improve this answer
add comment

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.