# Identité de MacWilliams

En mathématiques, l'identité de MacWilliams est une application de l'analyse harmonique sur un groupe abélien fini, dans le cas où le groupe est un espace vectoriel de dimension finie sur un corps fini. Elle porte le nom de la mathématicienne Jessie MacWilliams.
Elle est utilisée essentiellement en théorie des codes, pour les codes linéaires, elle relie les polynômes énumérateurs (en) des poids d'un code et de son dual, permettant ainsi, par exemple, de déterminer le polynôme énumérateur des poids du dual à partir de celui du code.

## Position du problème
### Objectif

Dans cet article C désigne un code de paramètre [n, k, δ] sur le corps fini F$_d$ où d est un entier puissance d'un nombre premier p.
L'objectif de l'identité de MacWilliams est de répondre à la question suivante : soit C un code linéaire, quelle est la distance minimale au sens de Hamming de son code dual ?
La réponse ne dépend pas uniquement de la distance minimale de C, il est en fait nécessaire de connaître toute la distribution des poids du code C, ce qui donne lieu à la définition suivante :
* Le polynôme énumérateur des poids est le polynôme dont à coefficients à valeur dans les entiers positifs tel que si i est un entier positif le coefficient du monôme X$^i$ est égal au nombre de mots du code de poids de Hamming égal à i.
Le polynôme énumérateur des poids correspond donc à la distribution des différents poids du code.
Considérons par exemple le cas où n est égal à k, c'est-à-dire celui où il n'existe aucune redondance, la sphère de rayon i et de centre le vecteur nulle contient exactement a$_i$ points avec :
$a_{i}={n \choose i}(d-1)^{i},$
c'est-à-dire le i-ème coefficient binomial d'ordre n que multiplie le nombre de lettres différente de 0 de l'alphabet à la puissance i. Dans ce cas, le polynôme énumérateur P(X) est égal à :
$P(X)=\sum _{i=0}^{n}a_{i}X^{i}=\sum _{i=0}^{n}{n \choose i}(d-1)^{i}X^{i}={\Big1+(d-1)X{\Big )}^{n}.$
L'objectif est de trouver le polynôme énumérateur des poids du code dual, dans l'exemple le code dual ne contient qu'un unique mot, le mot nul, son polynôme énumérateur est donc le polynôme constant égal à 1.

### Outils

L'espace vectoriel fini utilisé ici, à savoir F$_d$$^n$, est un groupe abélien fini pour l'addition, son groupe dual est donc fini et isomorphe à (F$_d$$^n$ +), la théorie de l'analyse harmonique est relativement simple. Dans ce contexte, elle permet de définir une transformée de Fourier disposant des propriétés usuelles comme l'égalité de Parseval ou la formule sommatoire de Poisson.
La théorie est encore simplifiée du fait de la structure d'espace vectoriel du groupe, il existe un isomorphisme entre le groupe et son espace dual. Si μ est un caractère non trivial sur le groupe additif du corps F$_d$, tous les caractères s'écrivent sous la forme χ$_y$ suivante :
$\forall x\in \mathbb {F} _{d}^{n}\quad \chi _{y}(x)=\mu (y.x)\quad {\text{avec}}\quad y\in \mathbb {F} _{d}^{n}.$
Ici, « . » désigne la forme bilinéaire non dégénérée définie par l'égalité suivante, si x = (x$_i$) et y = (y$_i$) désigne deux vecteurs de F$_d$$^n$ :
$x.y=\sum _{i=1}^{n}x_{i}.y_{i}.$

## Identité de MacWilliams

Avec les notations du paragraphe précédent, si Q(X) désigne le polynôme énumérateur des poids du code dual de C, alors l'égalité suivante est vérifiée :
$Q(X)={\frac {1}{d^{k}}}{\Big1+(d-1)X{\Big )}^{n}P{\Big{\frac {1-X}{1+(d-1)X}}{\Big )}.$
Considérons la fonction g de F$_d$$^n$ dans $^{\mathbb {C} [X]}$ l'anneau commutatif des polynômes à coefficients complexes, définie par :
$\forall x\in \mathbb {F} _{d}^{n}\quad g(x)=\sum _{y\in \mathbb {F} _{d}^{n}}\mu (x.y)X^{w(y)}\quad {\text{avec}}\quad w(y)=\sum _{i=0}^{n}c(y_{i}).$
Ici, $c$ désigne la fonction de F$_d$ dans $^{\mathbb {N} }$ qui à 0 associe 0 et à tout autre élément associe 1. L'application $w$ correspond donc à la fonction poids de Hamming. Une fois encore, (y$_i$) désigne les différentes coordonnées de y dans la base canonique de F$_d$$^n$.
* Le polynôme Q(X), défini par l'égalité suivante, est le polynôme énumérateur des poids du code dual de C.
$Q(X)={\frac {1}{q^{k}}}\sum _{c\in C}g(c).$
La définition du polynôme Q(X) montre que :
$Q(X)={\frac {1}{q^{k}}}\sum _{c\in C}g(c)={\frac {1}{q^{k}}}\sum _{y\in \mathbb {F} _{d}^{n}}\sum _{c\in C}\mu (c.y)X^{w(y)}={\frac {1}{q^{k}}}\sum _{y\in \mathbb {F} _{d}^{n}}b_{y}X^{w(y)}\quad {\text{avec}}\quad b_{y}=\sum _{c\in C}\mu (c.y).$
Il est donc nécessaire de calculer b$_y$. Si y est un élément du code dual, alors c.y est égal à 0 pour tout c élément de C, on en déduit que μ(c.y) est égal à 1 et b$_y$ est égal au cardinal de C, c'est-à-dire q$^k$. Si y n'est pas élément de C, alors l'application qui à c associe μ(c.y) est un caractère non trivial du groupe (C, + ). Il est donc orthogonal au caractère trivial, cette relation d'orthogonalité exprime le fait que b$_y$ est nul. On en déduit que :
$Q(X)=\sum _{c\in C^{\perp }}X^{w(c)}.$
Cette dernière égalité démontre que Q(X) est bien le polynôme annulateur du code dual.
* le polynôme Q(X) vérifie l'égalité suivante :
$Q(X)={\frac {1}{d^{k}}}{\Big1+(d-1)X{\Big )}^{n}P{\Big{\frac {1-X}{1+(d-1)X}}{\Big )}.$
Si (c$_i$) sont les coordonnées de c et (y$_i$) celle de y, alors les égalités suivantes sont vérifiées :
$g(c)={\frac {1}{q^{k}}}\sum _{y\in \mathbb {F} _{d}^{n}}\mu (c.y)X^{w(y)}={\frac {1}{q^{k}}}\sum _{y\in \mathbb {F} _{d}^{n}}\prod _{i=1}^{n}\mu (c_{i}.y_{i})X^{c(y_{i})}.$
Calculons alors la valeur suivante :
$S_{i}=\sum _{y\in \mathbb {F} _{d}}\mu (c_{i}.y)X^{c(y)}.$
Si c$_i$ est nul alors μ(c$_i$.y) est égal à 1 pour toute valeur de y, c(y) vaut 0 si y est nul et 1 sinon, on en déduit que S$_i$ = 1 + (q - 1)X. Si c$_i$ est non nul alors l'application qui à y associe μ(c$_i$.y) est un caractère non trivial du groupe additif du corps F$_d$. Il est donc orthogonal au caractère trivial et :
$\sum _{y\in \mathbb {F} _{d}}\mu (c_{i}.y)=0\quad {\text{donc}}\quad \sum _{y\in \mathbb {F} _{d}y\neq 0}\mu (c_{i}.y)=-1\;$
On en déduit les égalités suivantes :
$S_{i}=\sum _{y\in \mathbb {F} _{d}}\mu (c_{i}.y)X^{c(y)}=\mu (c_{i}.0)X^{0}+{\Big\sum _{y\in \mathbb {F} _{d}y\neq 0}\mu (c_{i}.y){\Big )}X=1-X.$
On en déduit l'égalité suivante :
$g(c)={\frac {1}{q^{k}}}{\Big1+(q-1)X{\Big )}^{n-w(c)}{\Big1-X{\Big )}^{w(c)}={\frac {1}{q^{k}}}{\Big1+(q-1)X{\Big )}^{n}{\Big{\frac {1-X}{1+(q-1)X}}{\Big )}^{w(c)}.$
On obtient donc pour expression de Q(X), l'égalité suivante :
$Q(X)={\frac {1}{q^{k}}}{\Big1+(q-1)X{\Big )}^{n}\sum _{c\in C}{\Big{\frac {1-X}{1+(q-1)X}}{\Big )}^{w(c)}={\frac {1}{d^{k}}}{\Big1+(d-1)X{\Big )}^{n}P{\Big{\frac {1-X}{1+(d-1)X}}{\Big )},$
ce qui termine la démonstration.

## Applications
### Code sans redondance

Considérons le code sans redondance de l'exemple du paragraphe des objectifs, le polynôme énumérateur des poids du code est :
$P(X)={\Big1+(d-1)X{\Big )}^{n}.$
L'identité de MacWilliams donne pour valeur de Q(X) polynôme énumérateur du code dual :
$Q(X)={\frac {1}{d^{n}}}{\Big1+(d-1)X{\Big )}^{n}{\Big1+(d-1){\frac {1-X}{1+(d-1)X}}{\Big )}^{n},$
ce qui donne les égalités suivantes :
$Q(X)={\frac {1}{d^{n}}}{\Big1+(d-1)X{\Big )}^{n}{\Big{\frac {d}{1+(d-1)X}}{\Big )}^{n}=1.$
Le code dual possède en effet un unique élément de poids nul, l'identité de MacWilliams fournit bien le polynôme énumérateur du code dual.

### Code de Hamming

Déterminons le polynôme énumérateur des poids du code de Hamming. La méthode utilisée ici consiste à déterminer directement le polynôme énumérateur du code dual et d'utiliser l'identité de MacWilliams pour en déduire celui du code de Hamming.
Les notations utilisées ici sont celles de l'article détaillé, en particulier m désigne la valeur n - k, c'est-à-dire la dimension du code dual et H désigne la matrice de contrôle du code.
* Tous les mots du code dual non nuls du code de Hamming ont un poids égal à d$^{m-1}$.
En effet, le code dual est constitué des mots de la forme $^t$x.H où x décrit l'espace vectoriel F$_d$$^m$. Désignons par (h$_i$) pour i variant de 1 à n les n colonnes de la matrice H qui sont aussi des vecteurs de dimension m. L'application qui à x associe le vecteur (x.h$_i$) est donc un isomorphisme entre F$_d$$^m$ et le code dual.
Soit A l'ensemble des vecteurs a de F$_d$$^m$ tel que a.x soit différent de 0. L'intersection des classes de l'espace projectifs avec A forment une partition de A. De plus, a.x est différent de 0 si et seulement si λa.x est différent de 0 pour tout λ élément de F$_d$$^*$. En conséquence chaque classe de la partition de A contient d - 1 éléments. Enfin, les vecteurs h$_i$ décrivent un système de représentants des classes de l'espace projectif de F$_d$$^m$ (cf le paragraphe Existence et unicité dans le cas général). On en déduit que le poids de (x.h$_i$) est égal à la fraction de numérateur le cardinal de A et de dénominateur d - 1.
Le complémentaire de A, si x n'est pas nul, est un hyperplan de F$_d$$^m$ donc un ensemble de cardinal d$^{m-1}$. Le cardinal de A est donc égal à d$^{m-1}$. (d - 1). Le poids de (x.h$_i$) est alors égal à d$^{m-1}$ si x n'est pas nul.
* Le polynôme énumérateur des poids du code de Hamming P(X) est défini par l'égalité suivante :
$P(X)={\frac {1}{d^{m}}}{\Bigg{\Big1+(d-1)X{\Big )}^{n}+(d^{m}-1){\Big1+(d-1)X{\Big )}^{n-d^{m-1}}(1-X)^{d^{m-1}}{\Bigg )}.$
En effet, le polynôme énumérateur des poids du code dual est le suivant :
$Q(X)=1+(d^{m}-1)X^{d^{m-1}}.$
L'identité de MacWilliams montre alors que :
$P(X)={\frac {1}{d^{m}}}{\Big1+(d-1)X{\Big )}^{n}{\Big1+(d^{m}-1){\Big{\frac {1-X}{1+(d-1)X}}{\Big )}^{d^{m-1}}{\Big )}={\frac {1}{d^{m}}}{\Bigg{\Big1+(d-1)X{\Big )}^{n}+(d^{m}-1){\Big1+(d-1)X{\Big )}^{n-d^{m-1}}(1-X)^{d^{m-1}}{\Bigg )},$
ce qui termine la démonstration.