Appearance
Chapter 1 : Groupes abéliens de type fini
Structure de groupe abéliens de type fini
Soit $(A,+)$ un groupe abélien.
Rappel : $A$ est de type fini s’il admet une partie génératrice finie, i. e. une partie $\{a_1, \cdots, a_r\} \subset A$ telle que tout $a \in A$ s’écrit $a = x_1a_1+x_2a_2+\cdots+x_ra_r$ pour des $x_1, \cdots, x_r \in \mathbb{Z}$. Autrement dit, le morphisme $$\mathbb{Z}^r \to A, \quad \begin{bmatrix} x_1 \\ \vdots \\ x_r \end{bmatrix} \mapsto x_1a_1 + x_2a_2 + \cdots + x_ra_r$$ est surjectif. Alors tout quotient de $A$ est encore de type fini.
Exemple : Le groupe $(\mathbb{Q},+)$ n’est pas de type fini !
Exemple : Les groupes $\mathbb{Z}^r$, $r \in \mathbb{N}$, $\mathbb{Z}/n\mathbb{Z}$ sont de type fini.
Proposition : Si $A$ est abélien de type fini, tout sous-groupe $B \subset A$ est (abélien) de type fini.
Remarque : Cette proposition est fausse pour les groupes non abéliens !
Preuve : Soit $p : \mathbb{Z}^r \to A$ un morphisme surjectif. Alors $B \subset A$ est quotient de $C = p^{-1}(B) \subset \mathbb{Z}^r$. Il suffit donc de montrer que $C \subset \mathbb{Z}^r$ est de type fini. On procède par récurrence sur $r$. Pour $r = 0$, il n’y a rien à démontrer. Notons $\mathbb{Z} \subset \mathbb{Z}^r$ le sous-groupe $\mathbb{Z}\times\{0\}^{r-1}$. Alors $\mathbb{Z}\cap C$ est un sous-groupe de $\mathbb{Z}$. Donc $\mathbb{Z}\cap C$ est engendré par un seul élément $c \in \mathbb{Z} \cap C$. Considérons le diagramme (avec suites exactes) :
La projection $\pi : \mathbb{Z}^r \to \mathbb{Z}^{r-1}$, $\begin{bmatrix} x_1 \\ \vdots \\ x_r \end{bmatrix} \mapsto \begin{bmatrix} x_2 \\ \vdots \\ x_r \end{bmatrix}$ induit un isomorphisme de $C/(\mathbb{Z}\cap C)$ sur $\pi(C)$. Par l’hypothèse de récurrence sur $r$, le sous-groupe $\pi(C) \subset \mathbb{Z}^{r-1}$ est engendré par un nombre fini d’éléments $\pi(c_2), \cdots, \pi(c_s)$. Alors il est clair que $C$ est engendré par $c, c_2, \cdots, c_s$.
$\square$
Définition : Le groupe $A$ est (abélien) libre de type fini s’il est isomorphe à $\mathbb{Z}^r$ pour un $r \in \mathbb{N}$. Une famille $a_1, \cdots, a_r$ d’éléments de $A$ est une base de $A$ si le morphisme $\varphi:\mathbb{Z}^r \to A$, $e_i \mapsto a_i$ est un isomorphisme.
Remarque : Une famille $a_1, \cdots, a_r$ est une base s.s.i. elle est
- génératrice ($\Leftrightarrow\varphi$ est surjectif)
- libre ($\Leftrightarrow\varphi$ est injectif), i.e. $\forall x_1, \cdots, x_r \in \mathbb{Z}$, on a
$$x_1a_1 + \cdots + x_ra_r = 0 \implies x_1 = \cdots = x_r = 0. $$
Théorème : Toutes les bases d’un groupe abélien libre de type fini ont le même nombre d’éléments, appelé le rang du groupe abélien libre et on le note $\text{rg}(A)$.
Preuve : Soit $A$ abélien libre avec deux bases $a_1, \cdots, a_r$ et $b_1, \cdots, b_s$. Soient $\varphi : \mathbb{Z}^r \to A$, $e_i \mapsto a_i$ et $\psi : \mathbb{Z}^s \to A$, $e_i \mapsto b_i$ les isomorphismes associés. Alors $\psi^{-1} \circ \varphi : \mathbb{Z}^r \to \mathbb{Z}^s$ est un isomorphisme. Donc les $v_i := \psi^{-1}(\varphi(e_i))$ forment une famille génératrice et libre dans $\mathbb{Z}^s$. Mais alors ils forment aussi une famille génératrice et libre dans le $\mathbb{Q}$-espace vectoriel $\mathbb{Q}^s$. En effet, tout $e_i$ est combinaison linéaire à coefficients entiers des $v_i$ et si on a une relation $y_1v_1 + \cdots + y_rv_r = 0$ à coefficients rationnels, il suffit de multiplier par le produit des dénominateurs pour conclure $y_1 = \cdots = y_r = 0$. Donc les $v_1, \cdots, v_r$ forment une base du $\mathbb{Q}$-espace vectoriel $\mathbb{Q}^s$. Donc $r = s$.
$\square$
Remarque : Si $V \neq 0$ est un espace vectoriel, tout $0 \neq v \in V$ se complète en une base. Cette propriété est fausse pour les groupes abéliens libres. Par exemple $0 \neq 2 \in \mathbb{Z}$ ne se complète pas en une base de $\mathbb{Z}$ car les seules bases de $\mathbb{Z}$ sont $1$ et $-1$.
Définition : Soit $n \geq 1$ un entier. Le $GL_n(\mathbb{Z})$ est le groupe des éléments inversibles de l’anneau $\mathcal{M}_n(\mathbb{Z})$.
Exercice : Une matrice $M \in \mathcal{M}_n(\mathbb{Z})$ est dans $GL_n(\mathbb{Z})$ s.s.i. $\det(M) \in \{\pm1\}$.
Théorème : Soit $A \in \mathcal{M}_{p \times q}(\mathbb{Z})$. Alors il existe $P \in GL_p(\mathbb{Z})$ et $Q \in GL_q(\mathbb{Z})$ telles que
$$PAQ = \begin{bmatrix} d_1 & 0 & 0 & \cdots & 0 & \cdots & 0 \\ 0 & d_2 & 0 & & & & \\ 0 & 0 & \ddots & & \vdots & & \vdots\\ \vdots & & & d_s & & & \\ 0 & & \cdots & & 0 & \cdots & 0 \\ \vdots & & & & \vdots & & \vdots \\ 0 & & \cdots & & 0 & \cdots & 0 \end{bmatrix}_{p\times q}, $$
où $d_1, \cdots, d_s$ sont des entiers $\geq 1$ tels que $d_1 \mid \cdots \mid d_s$. Les $d_i$ sont déterminés par la matrice $A$ et s’appellent les facteurs invariants de $A$.
Preuve : Montrons d’abord l’unicité. Notons $B$ la matrice $PAQ$ et $\text{Im }B \subset \mathbb{Z}^p$ le sous-groupe formé des $Bx$, $x \in \mathbb{Z}^q$. Alors il est clair que l’automorphisme $P:\mathbb{Z}^p \to \mathbb{Z}^p$ induit un isomorphisme de $\text{Im }A$ sur $\text{Im }B$ et donc un isomorphisme $\mathbb{Z}^p/\text{Im }A \to \mathbb{Z}^p/\text{Im }B$. Il est clair que $\text{Im }B$ est le sous-groupe $d_1\mathbb{Z} \oplus \cdots \oplus d_s\mathbb{Z} \oplus 0 \oplus \cdots \oplus 0 \subset \mathbb{Z}^p$. Or si $M_1$ et $M_2$ sont deux groupes abéliens et $M'_1 \subset M_1$ et $M'_2 \subset M_2$ des sous-groupes, alors $(M_1 \oplus M_2) / (M'_1 \oplus M'_2) \simeq (M_1/M'_1) \oplus (M_2/M'_2)$. Donc
$$\mathbb{Z}^p/\text{Im }B \simeq \mathbb{Z}/d_1\mathbb{Z} \oplus \cdots \oplus \mathbb{Z}/d_s\mathbb{Z} \oplus \mathbb{Z}^{p-s}. $$
Le sous-groupe fini $T := \mathbb{Z}/d_1\mathbb{Z} \oplus \cdots \oplus \mathbb{Z}/d_s\mathbb{Z}\subset \mathbb{Z}^p/\text{Im } B$ admet un description intrinsèque comme le sous-groupe de torsion de $\mathbb{Z}^p/\text{Im }B$ :
$$ T = (\mathbb{Z}^p/\text{Im }B)_t = \{b\in \mathbb{Z}^p/\text{Im }B \mid \exists x\in \mathbb{Z} \setminus \{0\} \text{ t.q. } xb = 0\}. $$
L'isomorphisme $\mathbb{Z}^p/\text{Im }A \simeq \mathbb{Z}^p/\text{Im }B$ induit un isomorphisme entre les sous-groupes de torsion :
$$ (\mathbb{Z}^p/\text{Im }A)_t \simeq (\mathbb{Z}^p/\text{Im }B)_t \simeq \mathbb{Z}/d_1\mathbb{Z} \oplus \cdots \oplus \mathbb{Z}/d_s\mathbb{Z}. $$
Donc $(\mathbb{Z}^p/\text{Im }A)_t$ est un groupe abélien fini isomorphe à
$$\mathbb{Z}/d_1\mathbb{Z} \oplus \cdots \oplus \mathbb{Z}/d_s\mathbb{Z}, \quad d_1 \mid \cdots \mid d_s. $$
Par la classification des groupes abéliens finis, les $d_i\,(d_i>1)$ sont déterminés par le groupe $(\mathbb{Z}^p/\text{Im }A)_t$, et donc par la matrice $A$. De plus, le nombre de facteurs invariants de $A$ est $s=\text{rg}(PAQ) = \text{rg}(A)$, qui ne dependent que de la matrice $A$. Donc le nombre des facteurs invariants $d_i=1$ sont aussi déterminés par la matrice $A$.
Montrons l’existence. On procède comme pour les matrices à coefficients dans un corps : on utilise les opérations élémentaires qui correspondent à des multiplications à droite et à gauche par des matrices dans $GL_p(\mathbb{Z})$ resp. $GL_q(\mathbb{Z})$, par exemple
$$\begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix},\quad \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix},\quad \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix},\quad\text{etc.} $$
On peut supposer que $A \neq 0$.
Étape 1 : En permutant les lignes et les colonnes on transforme $A$ en une matrice telle que $|a_{11}|$ soit minimal parmi les $|a_{ij}|$. Si nécessaire, on multiplie la première ligne par $-1$ pour obtenir $a_{11} > 0$. Dans la suite, on va retourner plusieurs fois à l’étape 1 mais à chaque fois la valeur de $|a_{11}|$ va diminuer strictement de façon que le processus doit s’arrêter après un nombre fini d’itérations.
Étape 2 : Supposons qu’il y a un coefficient $a_{i1}$, $i > 1$, non nul à la première colonne. Effectuons une division euclidienne $a_{i1} = q \cdot a_{11} + r$ où $0 \leq r < a_{11}$. Soustrayons $q$ fois la ligne 1 à la ligne $i$. Cette opération transforme $a_{i1}$ en $r < a_{11}$. Si $r \neq 0$, on retourne à l’étape 1.
Étape 2' : Comme l’étape 2 mais pour les coefficients $a_{1,j}$, $j > 1$, non nul à la première ligne. Après un nombre fini d’itérations des étapes 1, 2 et 2', on obtient une matrice de la forme
$$\begin{bmatrix} a_{11} & 0 & \cdots & 0 \\ 0 & & & \\ \vdots & & B & \\ 0 & & & \end{bmatrix} $$
Ici, il est possible que $a_{11}$ ne divise pas tous les coefficients de $B$. Alors on prend un $b_{ij}$ non divisible par $a_{11}$, on ajoute la colonne $j+1$ (corrrespondant à la $j$-ème colonne de $B$) à la colonne $1$ et on retourne à l’étape 1. Après un nombre fini d’itérations on obtient une matrice
$$\begin{bmatrix} a_{11} & 0 & \cdots & 0 \\ 0 & & & \\ \vdots & & A' & \\ 0 & & & \end{bmatrix} $$
où $a_{11}$ divise tous les coefficients de $A'$. On conclut par récurrence sur la taille de la matrice.
$\square$
Implémentation SageMath : Calcul de la forme normale de Smith (Cliquez pour déplier)
Ce script détaille chaque étape (permutations, éliminations, vérifications de divisibilité). Vous pouvez le copier-coller directement dans SageMathCell pour l'exécuter et visualiser le processus.
python
def smith_normal_form_with_steps(A, verbose=True):
"""
Calcule la forme normale de Smith d'une matrice A à coefficients entiers
en suivant les étapes données, avec affichage des étapes intermédiaires.
INPUT:
A -- matrice à coefficients dans ZZ
verbose -- bool, si True affiche les étapes intermédiaires
OUTPUT:
(B, P, Q) où B = P * A * Q est la forme normale de Smith,
P et Q sont les matrices de changement de base (unimodulaires)
"""
m, n = A.dimensions()
B = A.change_ring(ZZ)
P = identity_matrix(ZZ, m)
Q = identity_matrix(ZZ, n)
if verbose:
print("Matrice initiale A:")
print(B)
print()
# On traite chaque position diagonale
d = 0 # indice diagonal courant
while d < min(m, n):
if verbose:
print(f"\n{'#'*70}")
print(f"# Traitement de la position diagonale ({d+1}, {d+1})")
print(f"{'#'*70}")
# Sous-matrice active : lignes d..m-1, colonnes d..n-1
sub_m = m - d
sub_n = n - d
if sub_m == 0 or sub_n == 0:
break
# Vérifier si c'est la dernière position diagonale
is_last_diagonal = (d == min(m, n) - 1)
if is_last_diagonal:
# Pour la dernière position diagonale, juste vérifier le signe
if verbose:
print(f"\n >>> Dernière position diagonale : vérification du signe de a_{{{d+1},{d+1}}}")
if B[d, d] < 0:
B.rescale_row(d, -1)
P.rescale_row(d, -1)
if verbose:
print(f" L{d+1} <- -L{d+1}")
print(f" -> a_{{{d+1},{d+1}}} = {B[d,d]} > 0")
elif B[d, d] == 0:
if verbose:
print(f" a_{{{d+1},{d+1}}} = 0, aucune action nécessaire.")
else:
if verbose:
print(f" a_{{{d+1},{d+1}}} = {B[d,d]} déjà > 0, aucune action nécessaire.")
if verbose:
print("\n Matrice B après vérification du signe:")
print(B)
d += 1
continue
# Tant que la première ligne/colonne du bloc actif n'est pas nettoyée
cleaned = False
while not cleaned:
# Étape 1 : Minimiser |a_{dd}| par permutations
if verbose:
print(f"\n >>> Étape 1 : Minimisation de |a_{{{d+1},{d+1}}}|")
operations = []
changed = True
while changed:
changed = False
# Trouver le coefficient non nul de valeur absolue minimale dans le bloc actif
min_val = None
min_pos = None
for i in range(d, m):
for j in range(d, n):
val = abs(B[i, j])
if val != 0 and (min_val is None or val < min_val):
min_val = val
min_pos = (i, j)
if min_pos is None:
# Bloc entièrement nul
if verbose:
print(" Bloc actif entièrement nul, on passe au bloc suivant.")
print("\n Matrice B après l'Étape 1:")
print(B)
cleaned = True
break
# Placer ce coefficient en position (d, d) par permutations
i_min, j_min = min_pos
if i_min != d:
B.swap_rows(d, i_min)
P.swap_rows(d, i_min)
operations.append(f"L{d+1} <-> L{i_min+1}")
changed = True
if j_min != d:
B.swap_columns(d, j_min)
Q.swap_columns(d, j_min)
operations.append(f"C{d+1} <-> C{j_min+1}")
changed = True
if verbose and not cleaned:
for op in operations:
print(f" {op}")
print(f" -> |a_{{{d+1},{d+1}}}| = {abs(B[d,d])}")
if cleaned:
break
# Assurer a_{dd} > 0
if B[d, d] < 0:
B.rescale_row(d, -1)
P.rescale_row(d, -1)
if verbose:
print(f" L{d+1} <- -L{d+1}")
print(f" -> a_{{{d+1},{d+1}}} = {B[d,d]} > 0")
elif B[d, d] == 0:
if verbose:
print("\n Matrice B après l'Étape 1:")
print(B)
cleaned = True
break
if verbose:
print("\n Matrice B après l'Étape 1:")
print(B)
# Étape 2 : Élimination dans la première colonne
if verbose:
print(f"\n >>> Étape 2 : Élimination des coefficients de la colonne {d+1}")
operations = []
restart_etape1 = False
for i in range(d + 1, m):
if B[i, d] != 0:
q = B[i, d] // B[d, d]
r = B[i, d] % B[d, d]
B.add_multiple_of_row(i, d, -q)
P.add_multiple_of_row(i, d, -q)
operations.append(f"L{i+1} <- L{i+1} - {q}*L{d+1} (car {B[i,d]+q*B[d,d]} = {q}*{B[d,d]} + {r})")
if r != 0:
restart_etape1 = True
if verbose:
if operations:
for op in operations:
print(f" {op}")
else:
print(f" Aucun coefficient non nul dans la colonne {d+1}")
print("\n Matrice B après l'Étape 2:")
print(B)
if restart_etape1:
if verbose:
print(" -> Reste non nul détecté, retour à l'Étape 1")
continue
# Étape 2' : Élimination dans la première ligne
if verbose:
print(f"\n >>> Étape 2' : Élimination des coefficients de la ligne {d+1}")
operations = []
for j in range(d + 1, n):
if B[d, j] != 0:
q = B[d, j] // B[d, d]
r = B[d, j] % B[d, d]
B.add_multiple_of_column(j, d, -q)
Q.add_multiple_of_column(j, d, -q)
operations.append(f"C{j+1} <- C{j+1} - {q}*C{d+1} (car {B[d,j]+q*B[d,d]} = {q}*{B[d,d]} + {r})")
if r != 0:
restart_etape1 = True
if verbose:
if operations:
for op in operations:
print(f" {op}")
else:
print(f" Aucun coefficient non nul dans la ligne {d+1}")
print("\n Matrice B après l'Étape 2':")
print(B)
if restart_etape1:
if verbose:
print(" -> Reste non nul détecté, retour à l'Étape 1")
continue
# Vérifier si la première ligne et la première colonne sont nettoyées
first_col_clean = all(B[i, d] == 0 for i in range(d + 1, m))
first_row_clean = all(B[d, j] == 0 for j in range(d + 1, n))
if first_col_clean and first_row_clean:
# Matrice sous la forme (*)
if verbose:
print(f"\n >>> Forme (*) atteinte :")
print(f" a_{{{d+1},{d+1}}} = {B[d,d]}, première ligne et colonne nettoyées")
# Vérifier si a_{dd} divise tous les coefficients du bloc A'
a_dd = B[d, d]
if a_dd == 0:
cleaned = True
break
# Étape 3 : Vérifier la divisibilité dans le bloc A'
if verbose:
print(f"\n >>> Étape 3 : Vérification de la divisibilité dans A'")
divisible = True
non_div_pos = None
for i in range(d + 1, m):
for j in range(d + 1, n):
if B[i, j] % a_dd != 0:
divisible = False
non_div_pos = (i, j)
break
if not divisible:
break
if divisible:
if verbose:
print(f" a_{{{d+1},{d+1}}} = {a_dd} divise tous les coefficients de A'.")
print(f" Bloc ({d+1},{d+1}) terminé.")
print("\n Matrice B après l'Étape 3:")
print(B)
cleaned = True
else:
# Il existe un coefficient non divisible, on ajoute sa colonne à la première
i_bad, j_bad = non_div_pos
b_ij = B[i_bad, j_bad]
B.add_multiple_of_column(d, j_bad, 1)
Q.add_multiple_of_column(d, j_bad, 1)
if verbose:
print(f" a_{{{d+1},{d+1}}} = {a_dd} ne divise pas b_{{{i_bad-d},{j_bad-d}}} = {b_ij}.")
print(f" C{d+1} <- C{d+1} + C{j_bad+1}")
print(f" Retour à l'Étape 1.")
print("\n Matrice B après l'Étape 3:")
print(B)
else:
if verbose:
print("\n Matrice B après l'Étape 2':")
print(B)
d += 1
if verbose:
print("\n" + "="*70)
print("FORME NORMALE DE SMITH FINALE :")
print("="*70)
print(B)
return B, P, Q
# Exemple d'utilisation
if __name__ == "__main__":
# Exemple de matrice
A = matrix(ZZ, [
[2, 4, 4],
[-6, 6, 12],
[10, 4, 16]
])
print("="*70)
print("CALCUL DE LA FORME NORMALE DE SMITH - AVEC ÉTAPES INTERMÉDIAIRES")
print("="*70)
B, P, Q = smith_normal_form_with_steps(A, verbose=True)
print("\nVérification : P * A * Q = B ?")
print(P * A * Q == B)
print("\nP =")
print(P)
print("\nQ =")
print(Q)Remarque : Si $k$ est un corps, on a une division euclidienne pour l’anneau des polynômes en une variable $k[T]$. Si on remplace la valeur absolue par le degré et qu’on demande que les $d_i$ soient des polynômes unitaires, alors on a un théorème analogue (avec la "même" démonstration) pour des matrices $A \in \mathcal{M}_{p\times q}(k[T])$ avec $P \in GL_p(k[T]) = \{P \mid \det P \in k^*\}$ et $Q \in GL_q(k[T])$.
Théorème : (La base adaptée)
Soit $M$ un groupe abélien libre de rang fini $p$. Soit $L \subset M$ un sous-groupe. Alors $L$ est (abélien) libre de rang $s \leq p$ et il existe une base $e_1, \cdots, e_p$ de $M$ et des entiers strictement positifs $d_1 \mid \cdots \mid d_s$ tels que $d_1e_1, \cdots, d_se_s$ forment une base de $L$.
Preuve : Choisissons un isomorphisme $\varphi : \mathbb{Z}^p \to M$. On sait que $\varphi^{-1}(L) \subset \mathbb{Z}^p$ est de type fini. Soit $a_1, \cdots, a_q$ une famille génératrice de $\varphi^{-1}(L)$. Soit $A \in M_{p \times q}(\mathbb{Z})$ la matrice de colonnes $a_1, \cdots, a_q$. Soient $P, Q, d_1, \cdots, d_s$ comme dans le Théorème précédent. On considère le diagramme
où $D = {\small\begin{bmatrix} d_1 & & & \\ & \ddots & & O \\ & & d_s & \\ & O & & O \end{bmatrix}}$. On a $\varphi^{-1}(L) = \text{Im }A$ et $P$ induit un isomorphisme de $\text{Im }A$ sur $\text{Im }D = d_1\mathbb{Z} \oplus \cdots \oplus d_s\mathbb{Z} \oplus 0 \oplus \cdots \oplus 0 \subset \mathbb{Z}^s$. Alors il est clair que les $\varphi(P^{-1}e_i)$, $1 \leq i \leq p$ forment une base de $M$ avec les propriétés souhaitées.
$\square$
Théorème : (Théorème de structure) Soit $A$ un groupe abélien de type fini. Alors il existe des entiers $r$ et $s$ et des entiers $1 < d_1 \mid d_2 \mid \cdots \mid d_s$ déterminés par $A$ tels que
$$A \simeq \mathbb{Z}^r \oplus \mathbb{Z}/d_1\mathbb{Z} \oplus \cdots \oplus \mathbb{Z}/d_s\mathbb{Z}. $$
Définition : Le rang de $A$ est $\text{rg}(A) = r$.
Remarques :
(i) $A$ est fini s.s.i. $r = 0$. Il est abélien libre s.s.i. $s = 0$.
(ii) Soit $\varphi : \mathbb{Z}^r \oplus \mathbb{Z}/d_1\mathbb{Z} \oplus \cdots \oplus \mathbb{Z}/d_s\mathbb{Z} \to A$ un isomorphisme (choix !). Alors l'image $A_1 = \varphi(0 \oplus \mathbb{Z}/d_1\mathbb{Z} \oplus \cdots \oplus \mathbb{Z}/d_s\mathbb{Z}) \subset A$ ne dépend pas du choix de $\varphi$. En effet, le sous-groupe $0 \oplus \mathbb{Z}/d_1\mathbb{Z} \oplus \cdots \oplus \mathbb{Z}/d_s\mathbb{Z}$ est le sous-groupe de torsion de $\mathbb{Z}^r \oplus \mathbb{Z}/d_1\mathbb{Z} \oplus \cdots \oplus \mathbb{Z}/d_s\mathbb{Z}$. Donc son image par $\varphi$ est le sous-groupe de torsion de $A$ : $A_t = \{a \in A \mid na = 0 \text{ pour un } n \in \mathbb{N} \setminus \{0\}\}$. Ce sous-groupe est clairement indépendant du choix de $\varphi$. Mais $A_2 = \varphi(\mathbb{Z}^r \oplus 0) \subset A$ dépend du choix de $\varphi$. Exemple :
$$\begin{align*} \mathbb{Z} \oplus \mathbb{Z}/2\mathbb{Z} &\xrightarrow{\text{id}} \mathbb{Z} \oplus \mathbb{Z}/2\mathbb{Z} = A, &&A_2 = \mathbb{Z} \oplus 0\\ \mathbb{Z} \oplus \mathbb{Z}/2\mathbb{Z} &\xrightarrow{\varphi} \mathbb{Z} \oplus \mathbb{Z}/2\mathbb{Z}, &&A_2 = \mathbb{Z}\oplus\mathbb{Z}/2\mathbb{Z} \\ (n, \bar{m}) &\longmapsto (n, \bar{n}+\bar{m}) && \end{align*} $$
Alors $A'_2 = \{(n, \bar{n} + \bar{m}) \mid n \in \mathbb{Z}, \bar{m} \in \mathbb{Z}/2\mathbb{Z}\} \neq A_2$. Car l'image de $A'_2$ par la projection $\mathbb{Z} \oplus \mathbb{Z}/2\mathbb{Z} \to \mathbb{Z}/2\mathbb{Z}$ est non nulle.
(iii) Notons $A_t$ le sous-groupe de torsion de $A$. Alors on a une suite exacte canonique :
$$ 0 \to A_t \to A \to A/A_t \to 0. $$
Le groupe $A/A_t$ est isomorphe (de façon non canonique !) à $\mathbb{Z}^r$. La suite est scindée : le sous-groupe $A_t$ admet un supplémentaire isomorphe à $A/A_t$ : $A \simeq A_t \oplus (A/A_t)$. Mais elle n’est pas canoniquement scindée !
Définition : Un groupe abélien est indécomposable s’il est non nul et n’est pas la somme directe de deux sous-groupes non nuls.
Corollaire : Tout groupe abélien de type fini est somme directe de groupes abéliens indécomposables qui sont uniques à isomorphisme et permutation près.
Preuve : L’existence est claire par le théorème de structure et le lemme chinois (voir l’exemple). Montrons l’unicité. Dans la décomposition en indécomposables, le nombre de facteurs $\mathbb{Z}$ est le rang du groupe, donc unique. Il suffit de montrer l’unicité pour un groupe abélien fini $B$. Le groupe $B$ est la somme directe de ses $p$-Sylow. Donc on peut supposer que $B$ est un $p$-groupe. Alors la classification des groupes abéliens finis donne
$$B \simeq \mathbb{Z}/p^{m_1} \oplus \mathbb{Z}/p^{m_2} \oplus \cdots \oplus \mathbb{Z}/p^{m_s}. $$
$\square$
Exemple : Soit $A = \mathbb{Z}/2\mathbb{Z} \oplus \mathbb{Z}/6\mathbb{Z} \oplus \mathbb{Z}/60\mathbb{Z} \oplus \mathbb{Z}/600\mathbb{Z}$. Par le lemme chinois,
$$\begin{align*} 2 = 2 &\implies \mathbb{Z}/2\mathbb{Z} \simeq \mathbb{Z}/2\mathbb{Z} \\ 6 = 2 \times 3 &\implies \mathbb{Z}/6\mathbb{Z} \simeq \mathbb{Z}/2\mathbb{Z} \oplus \mathbb{Z}/3\mathbb{Z} \\ 60 = 2^2 \times 3 \times 5 &\implies \mathbb{Z}/60\mathbb{Z} \simeq \mathbb{Z}/4\mathbb{Z} \oplus \mathbb{Z}/3\mathbb{Z} \oplus \mathbb{Z}/5\mathbb{Z} \\ 600 = 2^3 \times 3 \times 5^2 &\implies \mathbb{Z}/600\mathbb{Z} \simeq \mathbb{Z}/8\mathbb{Z} \oplus \mathbb{Z}/3\mathbb{Z} \oplus \mathbb{Z}/25\mathbb{Z} \end{align*} $$
La décomposition en groupes abéliens indécomposables de $A$ est donnée par la somme des groupes à droite des équations.
Illustration : le théorème de Mordell
Une courbe elliptique sur $\mathbb{Q}$ est l’ensemble $E$ des solutions $(x, y) \in \mathbb{Q}^2$ d’une équation $y^2 = x^3 + ax + b$, où $a, b \in \mathbb{Q}$ t.q. $4a^3 + 27b^2 \neq 0$. On admet aussi le "point à l’infini $O = (0,\infty)$" comme solution. Toutes les droites verticales passent par $O$. On peut munir $E$ d’une structure de groupe abélien, d’élément neutre $O$ telle que
$$P + Q + R = O \iff P, Q, R \text{ sont alignés} $$

Il est non trivial de montrer que $(E,+)$ est un groupe (associativité !). Il est clair que $(E,+)$ est abélien.
Théorème : (Mordell, 1922) Le groupe abélien $(E,+)$ est de type fini.
Théorème : (Mazur, 1977) Le groupe de torsion $E_t$ est isomorphe à l’un des groupes suivants : $\mathbb{Z}/n\mathbb{Z}$, $1 \leq n \leq 10$, ou $\mathbb{Z}/2\mathbb{Z} \oplus \mathbb{Z}/d\mathbb{Z}$ où $d \in \{2, 4, 6, 8\}$.
Les groupes $GL_n(\mathbb{Z})$ et $SL_n(\mathbb{Z})$
Soit $n \geq 1$ un entier. Considérons les matrices suivantes :
- Transvections élémentaires : $E_{ij}(a) = I_n + aE_{ij}$, $a \in \mathbb{Z}$, $i \neq j$.
- Dilatations : $D_i(\epsilon) = \text{diag}(1, \cdots, 1, \epsilon, 1, \cdots, 1)$, $\epsilon \in \{\pm1\} = \mathbb{Z}^*$.
- Transpositions :
$$\phantom{\tau_{ij}=} \begin{matrix} \phantom{0} &\phantom{\ddots} &\phantom{0} &i &\phantom{0} &\phantom{\cdots} &\phantom{0} &j &\phantom{0} &\phantom{\ddots} &\phantom{0} \end{matrix}\qquad $$
$$\tau_{ij}=\begin{bmatrix} 1 & & & & & & & & & & \\ &\ddots & & & & & & & & & \\ & &1 & & & & & & & & \\ & & &0 &0 &\cdots &0 &1 & & & \\ & & &0 &1 & & &0 & & & \\ & & &\vdots & &\ddots & &\vdots & & & \\ & & &0 & & &1 &0 & & & & \\ & & &1 &0 &\cdots &0 &0 & & & \\ & & & & & & & &1 & & \\ & & & & & & & & &\ddots & \\ & & & & & & & & & &1 \\ \end{bmatrix} \begin{matrix} \\ \\ \\ i\\ \\ \\ \\ j\\ \\ \\ \\ \end{matrix} $$
Théorème :
(a) Toute matrice $A \in GL_n(\mathbb{Z})$ s’écrit $A = L \cdot \text{diag}(1, \cdots, 1, \det A)$, où $L$ est un produit de transvections élémentaires.
(b) Le groupe $SL_n(\mathbb{Z})$ est engendré par les transvections élémentaires $E_{i,i+1}(1)$, $E_{i+1,i}(1)$, $1 \leq i \leq n-1$.
Preuve :
(a) Soit $E$ le sous-groupe de $SL_n(\mathbb{Z})$ engendré par les transvections élémentaires. Soit $D \subset GL_n(\mathbb{Z})$ le sous-groupe engendré par les dilatations. Pour $\epsilon \in \{\pm1\}$ et $a \in \mathbb{Z}$, on a $$D_i(\epsilon)E_{kl}(a)D_i(\epsilon)^{-1} = E_{kl}(\pm a).$$ Donc $DE = ED$. Nous avons
$$\begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix} = \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 \\ -1 & 1 \end{bmatrix} \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix} \in E, \quad\text{et} $$
$$\begin{bmatrix} 0 & 1\\ 1 & 0 \end{bmatrix} = \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix} \begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix} \in ED, $$
donc les transpositions sont dans $ED$. La démonstration du "Théorème $PAQ$" montre alors que $ED = GL_n(\mathbb{Z})$. Notons qu'on a
$$\begin{bmatrix} -1 & 0 \\ 0 & -1 \end{bmatrix} = \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix}^2 \in E. \qquad(*) $$
Si $g \in GL_n(\mathbb{Z})$, on a $g = ed$ pour $e \in E$ et $d \in D$. Alors $(*)$ montre que l’on a aussi $g = e' \cdot \text{diag}(1, \cdots, 1, \det g)$ pour un $e' \in E$.
(b) On note que $E_{ij}(a) = E_{ij}(1)^a$, $a \in \mathbb{Z}$, et que
$$[E_{ij}(a), E_{jk}(b)] = E_{ik}(ab) $$
pour $i < j < k$, $a, b \in \mathbb{Z}$. Donc $E$ est engendré par les $E_{i,i+1}(1)$, $E_{i+1,i}(1)$, $1 \leq i \leq n-1$.
$\square$