I'm writing some software to automatically compute things like Alexander modules, Alexander ideals, Milnor signatures and Farber-Levine pairings for 1 and 2-knot complements. So among other things I'd like to have a quick way of comparing ideals in the Laurent polynomial ring $\mathbb Z[t^{\pm 1}]$.

So my question:

Is there an efficient way of determining whether or not two ideals in $\mathbb Z[t^{\pm 1}]$ are equal? What's the most pleasant procedure you can think of?

My ideals are given by a finite number of generators.

The knot theory literature tends to stop at "$\mathbb Z[t^{\pm 1}]$ *isn't a PID*" but I'm hopeful there's some reasonable tools out there. Understanding ideals in $\mathbb Z[t^{\pm 1}]$ is essentially the same thing as understanding cyclic group actions on finitely generated abelian groups so I could imagine answers might be more complicated than I like. But I hope to be pleasantly surprised by some sort of "division algorithm + details" type algorithm.

For example, is there a better way to go about this problem than:

Given an ideal $I \subset \mathbb Z[t^{\pm 1}]$, consider the finitely-generated abelian group $G = \mathbb Z[t^{\pm 1}]/I$ together with the action of $\mathbb Z$ on $G$ given by multiplication by $t$. We want to determine $G$ as a $\mathbb Z$-module. So presumably you would do this on the $\mathbb Z$-torsion subgroup of $G$ (call it $\tau G$), then work out the conjugacy class of the action of $\mathbb Z$ on $G/\tau G$ (which amounts to the conjugacy problem in $GL_n(\mathbb Z)$), then there would be an extension problem to deal with.

I'm hoping there's a simpler way to deal with this problem -- simpler in the sense of implementation.