  We describe an algorithm for determining whether two convex polytopes P and
Q, embedded in a lattice, are isomorphic with respect to a lattice
automorphism. We extend this to a method for determining if P and Q are
equivalent, i.e. whether there exists an affine lattice automorphism that sends
P to Q. Methods for calculating the automorphism group and affine automorphism
group of P are also described.
  An alternative strategy is to determine a normal form such that P and Q are
isomorphic if and only if their normal forms are equal. This is the approach
adopted by Kreuzer and Skarke in their PALP software. We describe the
Kreuzer-Skarke method in detail, and give an improved algorithm when P has many
symmetries. Numerous examples, plus two appendices containing detailed
pseudo-code, should help with any future reimplementations of these techniques.
We conclude by explaining how to define and calculate the normal form of a
Laurent polynomial.
