# CAS: Computing homology of complex of non-free abelian groups

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.

-
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

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);
K;
f := hom< A -> K | [4*y[1]-2*y[2]]>;
I := Image(f);
I;
K/I;


gives the following result:

 Abelian Group isomorphic to Z/4
Defined on 1 generator in supergroup B:
K.1 = y[2]
Relations:
4*K.1 = 0
Abelian Group isomorphic to Z/2
Defined on 1 generator in supergroup K:
I.1 = 2*K.1
Relations:
2*I.1 = 0
Abelian Group isomorphic to Z/2
Defined on 1 generator
Relations:
2*\$.1 = 0

-