Computation of lattice isomorphisms and the integral matrix similarity problem
Let $K$ be a number field, let $A$ be a finite-dimensional $K$-algebra, let $\mathrm{J}(A)$ denote the Jacobson radical of $A$, and let $Λ$ be an $\mathcal{O}_{K}$-order in $A$. Suppose that each simple component of the semisimple $K$-algebra $A/{\mathrm{J}(A)}$ is isomorphic to a matrix ring over a field. Under this hypothesis on $A$, we give an algorithm that given two $Λ$-lattices $X$ and $Y$, determines whether $X$ and $Y$ are isomorphic, and if so, computes an explicit isomorphism $X \rightarrow Y$. This algorithm reduces the problem to standard problems in computational algebra and algorithmic algebraic number theory in polynomial time. As an application, we give an algorithm for the following long-standing problem: given a number field $K$, a positive integer $n$ and two matrices $A,B \in \mathrm{Mat}_{n}(\mathcal{O}_{K})$, determine whether $A$ and $B$ are similar over $\mathcal{O}_{K}$, and if so, return a matrix $C \in \mathrm{GL}_{n}(\mathcal{O}_{K})$ such that $B= CAC^{-1}$. We give explicit examples that show that the implementation of the latter algorithm for $\mathcal{O}_{K}=\mathbb{Z}$ vastly outperforms implementations of all previous algorithms, as predicted by our complexity analysis.