% !TeX encoding = UTF-8
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[margin=0.5in]{geometry}
\usepackage[french]{babel}
\usepackage{tabularx}
\usepackage{theorem}
\usepackage{amsmath}
\usepackage{amssymb}
\let\theoremstyle\relax
\usepackage{amsthm}
\usepackage{calrsfs}
\usepackage{setspace}
\usepackage{stmaryrd}

\usepackage{bashful}


\theorembodyfont{\upshape}

% Assure que les nouvelles parties commencent toujours sur une nouvelle page.
\let\oldpart\part
\renewcommand\part{\clearpage\oldpart}

% Un peu plus d'interligne, c'est plus lisible
\onehalfspacing

% Fait une jolie barre horizontale
\newcommand{\hsep}{\centerline{\rule{0.8\linewidth}{.05pt}}}

% Racourcis
\newcommand{\FD}{\mathbb{F}_2\hspace{-.2em}}

\newtheoremstyle{break}
  {\topsep}{\topsep}%
  {}{}%
  {\bfseries}{}%
  {\newline}{}%
\theoremstyle{break}
\newtheorem{definition}{Définition}[section]
\newtheorem{theoreme}{Théorème}[section]
\theoremstyle{remark}
\newtheorem*{remarque}{Remarque}

% Compter les mots

\author{Samy AVRILLON, Victor BELLOT, Dylan THEVENET}
\title{Études des codes cycliques}
\begin{document}

	\maketitle
	
	\hsep
	
	\tableofcontents
	
	\pagebreak
	
	\part{Contexte mathématique}
		
	\section{Codes}
	
	\begin{definition}[Code, Codage]
		On définit un code de paramètres $(n,k)$ comme une partie de $\FD^n$ associée à $\FD^k$. Un codage est une application de $\FD^k$ vers $\FD^n$ injective.
		
		Un codage est dit systématique lorsque les $k$ premiers bits de l'image d'un élément sont égaux à cet élément.
	\end{definition}
	\begin{definition}[Distance de Hamming, Poids d'un mot]
		La distance de Hamming entre deux mots $v$ et $w$ de $\FD^n$ est le nombre de coordonnées différentes des deux mots.
		$$d(v,w) = \operatorname{card}(i\in \llbracket1,n\rrbracket,v_i \neq w_i)$$
		
		Le poids d'un mot est son nombre de coordonnées non nulles, égal à sa distance au vecteur nul.
	\end{definition}
	
	\begin{definition}[Capacités d'un code]\label{thMinDist}
		Étant donné un code $C$, on appelle capacité de détection $e_d$ et capacité de correction $e_c$ le plus grand nombre de bits erronés que l'on puisse détecter, respectivement corriger dans le code.
		La distance minimale d'un code est la plus grande distance entre deux mots du code.
		
		$$d_C = \min_{x,y\in C\times C}\left(d(x,y)\right)$$
	\end{definition}
	
	\begin{theoreme}
		On peut alors exprimer $e_d$ et $e_c$ en fonction de $d_C$ :
		
		$$ e_c = d_C - 1 \qquad e_d = \left\lfloor\frac{d_C - 1}{2}\right\rfloor$$
	\end{theoreme}
	
	\begin{definition}[Code Parfait]
		Un code parfait est un code tel que pour tout mot $w$ de $\FD^n$, il existe un \underline{unique} mot de $C$ étant à une distance minimale de $w$. Autrement dit, il n'y a jamais d'ambigüité sur la façon de décoder un mot erroné.
	\end{definition}
	
	\begin{remarque}
		Il n'existe que trois types de codes parfaits:
		\begin{itemize}
			\item Les codes de Hamming
			\item Les codes de répétition pure
			\item Le code de Golay binaire de longueur 23
		\end{itemize}
	\end{remarque}
		
	\section{Codes linéaires}
	
		On dit qu'un code est linéaire lorsqu'il a une structure naturelle de sous-espace vectoriel de $\FD^n$. Les codages linéaires associés sont des applications linéaires.
		
		\begin{definition}[Matrice génératrice]
			On appelle \textbf{matrice génératrice} d'un codage linéaire $\phi$ la matrice de $\mathcal{M}_{n,k}(\FD)$ associée à $\phi$. 
		\end{definition}
		
		\begin{definition}[Matrice de contrôle]
			On appelle \textbf{matrice de contrôle} n'importe quelle matrice de $\mathcal{M}_{n-k,k}(\FD)$ ayant $C$ pour noyau.
			
			Tout code a au moins une matrice de contrôle.
		\end{definition}
		
		\begin{theoreme}[Calcul de distances]
			La structure d'espace vectoriel ainsi que la définition \ref{thMinDist} nous permettent de dire que la distance minimale d'un code linéaire est le plus petit poids non nul de ses vecteurs.
			
			On peux aussi utiliser la borne de Singleton qui assure:
			
				$$d_C \leqslant n+1-k$$
			
		\end{theoreme}
		
		Voici ici  quelques concepts qui seront utiles au décodage.
		
		
		\begin{definition}[Erreur et syndrome]
			Si l'on souhaite envoyer un mot $X \in \FD^k$ qui est donc codé en $Y\in C$. Le mot réceptionné est $Z \in \FD^n$.
			
			On appelle alors \textbf{mot erreur} le mot $E = Z - Y$.
			On appelle \text{syndrome} le mot $S = H \cdot Z$.
			
			On remarque que $E$ et $Z$ on le même syndrome. On peut plus généralement définir une relation d'équivalence «avoir le même syndrome». Les classes d'équivalence de cette relation sont appelées \textbf{classes latérales}
		\end{definition}
		
	\section{Codes cycliques}
		
		\begin{definition}[Code cyclique]
			Un code linéaire est dit cyclique si il est stable par décalage binaire cyclique. C'est à dire que si $w_1w_2w_2\ldots w_n$ est dans $C$ alors $w_2w_3w_4\ldots w_{n-1}w_nw_1$ appartient aussi à $C$.
			
			On peut aussi définir le \textbf{code cyclique engendrée} par un mot $w$, qui est le plus petit espace vectoriel stable par décalage cyclique qui contienne $w$.
		\end{definition}
		
		\begin{definition}
			On définit le mot binaire associé au polynôme $P=\displaystyle\sum_{i=0}^{n-1}{a_i\cdotp X^i}$ comme étant le mot $a_0a_1\cdots a_{n-1}$. Le polynôme réciproquement associé à un mot binaire par ce procédé est appelé \textbf{représentation polynomiale} du mot.
		\end{definition}
		
		\begin{definition}[Polynôme générateur]
			Un polynôme $P$ de $\FD\,[X]$ de degré $n-k$ est dit \textbf{générateur du code cyclique $C$ de paramètre $(k,n)$} lorsque $P | X^n + 1$ et que $(\sigma^i(w))_{i\in \llbracket 0,k-1\rrbracket}$ est une base de $C$ avec $\sigma$ l'opérateur de décalage binaire cyclique est $w$ le mot associé à $P$
		\end{definition}
		\begin{theoreme}[Théorème fondamental des codes cycliques]
			Tout code cyclique admet un et un seul polynôme générateur.
		\end{theoreme}
		
		\begin{remarque}
			Un codage naturel pour un code cyclique apparaît avec le polynôme générateur. Le codage appliqué à un mot $w$ est le mot associé au produit du polynôme générateur et du polynôme associé à $w$. 
		\end{remarque}
		
	\part{Algorithmes}
	\section{Des structures de données}
	\section{Liste des fonctions}
	
	
\end{document}
