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]$. So my question: Is there an efficient way of determining whether or not two ideals in $\mathbb Z[t^\pm]$ 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]$ isn't a PID' but I'm hopeful there's some reasonable tools out there. Understanding ideals in $\mathbb Z[t^\pm]$ 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]$, consider the finitely-generated abelian group $G = Z[t^\pm]/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.