Question: Is there a classification of involutions in $\text{GL}\_n(\mathbb{Z})$?

Here's some more details about what I mean. Consider $f \in \text{GL}\_n(\mathbb{Z})$ such that $f^2=1$. Regard $f$ as an automorphism of $\mathbb{Z}^n$. Extend $f$ to an automorphism $g$ of $\mathbb{Q}^n$. Then we can write $\mathbb{Q}^n = E\_1 \oplus E\_{-1}$, where $g$ acts as the identity on $E\_1$ and as $-1$ on $E\_{-1}$. Restricting this decomposition to $\mathbb{Z}^n$, we obtain a finite-index subgroup $A$ of $\mathbb{Z}^n$ and a decomposition $A = F\_1 \oplus F\_{-1}$ such that $f$ acts as the identity on $F\_1$ and as $-1$ on $F\_{-1}$.

However, we definitely cannot assume that $A = \mathbb{Z}^n$. For instance, the matrix whose first row is $(0 1)$ and whose second row is $(1 0)$ (by the way, I can't figure out how to get my matrices to display correctly) is an involution in $\text{GL}\_n(\mathbb{Z})$ that can be diagonalized over $\mathbb{Q}$ but not over $\mathbb{Z}$.

What else can be said here?

Answer: 
The problem is equivalent to classifying isomorphism classes of $n$-dimensional integral representations of the cyclic group $C\_2$ of order 2, or $\mathbb{Z}[C\_2]$-modules on $\mathbb{Z}^n$. This group has exactly 3 isomorphism classes of indecomposable free $\mathbb{Z}$-modules: 

(1) trivial 

(2) sign representation 

(3) 2-dimensional with matrix $\begin{bmatrix}0 & 1\\ 1 & 0\end{bmatrix}.$

Every $n$-dimensional $\mathbb{Z}[C\_2]$-module is a direct sum of (1), (2), (3) with uniquely determined multiplicities. Thus any involution is conjugate over $\mathbb{Z}$ to a block diagonal matrix with blocks [1], [-1], $\begin{bmatrix}0 & 1\\ 1 & 0\end{bmatrix}$ whose sizes are uniquely determined.
You can use [GAP](http://www.gap-system.org/) to decompose a Q-class of a finite subgroup of GL(n,Z) into its component Z-classes. This uses the CARAT program from Aachen. To see the first few cases, you can use:

```
zclasses := [];;
for dim in [2,3,4,5,6] do
  zclasses[dim] := [];
  for sig in [1..dim] do
    qclass := Group( DiagonalMat( Concatenation(
      ListWithIdenticalEntries( sig, -1 ),
      ListWithIdenticalEntries( dim - sig, 1 ) ) ) );
    zclasses[dim][sig] := ZClassRepsQClass( qclass );
  od;
od;

```

Then to summarize how many Z-classes there are of each dimension and signature:

```
gap> List(zclasses,dim->List(dim,Size));
[[2,1],[2,2,1],[2,3,2,1],[2,3,3,2,1],[2,3,4,3,2,1]]

```

The actual groups are available as `zclasses[dim][sig][idx]`, for instance the generator of the 3rd Z-class of dimension 4 and signature -1,-1,1,1 is:

```
gap> Display( GeneratorsOfGroup( zclasses[4][2][3] )[1] );
[ [   0,   0,  -1,   0 ],
  [   0,   0,   0,  -1 ],
  [  -1,   0,   0,   0 ],
  [   0,  -1,   0,   0 ] ]

```

Hopefully these will show a clear enough pattern for you. The `ZClassRepsQClass` command can be applied to other finite subgroups as well, in case you wanted to understand elements of order 3 or 4 or whatever. Presumably the theory behind these things are developed in some of the crystallographic style references by the authors (I believe W. Plesken has written several monographs that cover things along these lines).