Computing the Smith Normal Form

Let AR be the finitely generated abelian group, determined by the relation-matrix


Reduce this matrix using Smith Normal Form and determine the isomorphism type of AR.

I know that the Smith Normal Form of this matrix is:


However, this was computed using Maple and I need to understand the method of computing this manually which I am struggling to grasp. Can anyone help?


The computation requires two processes:

  • row operations of the type used in Gaussian elimination (with some restrictions because we require that the integer equivalence class be preserved) and the corresponding column operations,
  • the Euclidean algorithm for finding the greatest common divisor of two integers.

Specifically, you are allowed to

  1. interchange two rows or two columns,
  2. multiply a row or column by ±1 (which are the invertible elements in Z),
  3. add an integer multiple of row to another row (or an integer multiple of a column to another column).

The first goal is to reach diagonal form. Let’s first work on column 1: using operation 3 for rows repeatedly, you can, by following the Euclidean algorithm, form a row whose first element is the GCD of the elements in column 1. You can then obtain a matrix with the GCD in the (1,1) position and zeroes in the rest of column 1.

Now work on row 1: do the same thing, but using column operations; eventually you will have the GCD of row 1 in the (1,1) position, and zeroes elsewhere in row 1. You will most likely have messed up column 1, but that’s OK. Go back and redo column 1, then redo row 1, and repeat until all elements in row and column 1 are 0 except for the (1,1) element. This process is guaranteed to terminate because the GCD gets smaller each time.

Now you can move on to row/column 2, and repeat the process. Continue for row/column 3, and so on, until you have reached diagonal form.

You may not be done at this point, because the diagonal elements may not satisfy the divisibility requirement of the Smith normal form. You can, however, enforce this by some additional moves as in the following example:
The idea is again to use the Eulidean algorithm. After adding column 1 to column 2, you may have to do several row operations to obtain the GCD of the two original diagonal elements. In the example above, only one row operation was needed for this.

Addendum: Details for the particular example in the OP’s question.
If you add row 2 to row 1, and then multiply row 1 by 1, you get a pivot of 1. You can then subtract suitable multiples of row 1 from rows 2 and 4, and end up with
which, by subtracting multiples of column 1 from columns 2, 3, and 4, leads to
We next need to do a series of row operations involving rows 2, 3, and 4 that results in the GCD of 3477, 255, and 4182. If we always choose the pivot of smallest nonzero magnitude, the steps would be

  1. Subtract 14 times row 3 from row 2, and 17 times row 3 from row 4.
  2. Add 2 times row 2 to row 3, and subtract row 2 from row 4.
  3. Subtract row 4 from row 2, and add row 4 to row 3.
  4. Add 3 times row 3 to row 2, and 6 times row 3 to row 4.
  5. Add row 2 to row 3, and subtract row 2 from row 4.
  6. Add 2 times row 3 to row 2.
  7. Swap rows 2 and 3.
  8. Negate row 2.

You should now have
You can now subtract suitable multiples of column 2 from columns 3 and 4. Then you just have to deal with the 2×2 block in the lower right. You should be able to get it from here.

Source : Link , Question Author : Euden , Answer Author : Will Orrick

Leave a Comment