# Code comma-free

En informatique théorique, et notamment en théorie des codes, et aussi en bio-informatique et notamment en génétique, un code comma-free (terme que l'on pourrait traduire par «code sans virgule») est un code en bloc ou code uniforme dans lequel aucun mot du code n'est facteur interne du produit de deux mots du code.
Les codes comma-free sont aussi connus sous le terme de « self-synchronizing block codes »$^,$ parce qu'aucune synchronisation n'est nécessaire pour trouver le début d'un mot du code.

## Motivation historique

Le code génétique est formé de codons. Chaque codon est une suite de trois nucléotides pris dans un « alphabet » de quatre lettres A, U, G, C (adénine, uracile, guanine, et cytosine). L'ensemble de 64 codons possibles forme un code uniforme. Chacun des codons possibles peut synthétiser l'un des 20 acides aminés naturels. Au début de la génétique, la question a été posée si l'ensemble des codons des 20 acides aminés était un code comma-free ; en effet le nombre maximum d'éléments d'un code comma-free de longueur 3 sur 4 lettres est exactement 20. S'il y avait bijection entre acides aminés et codons, le décodage pouvait se faire sans synchronisation. De fait, il n'en est rien.

## Définitions

Un code sur un alphabet $A$ est un ensemble $C$ de mots non vides sur $A$ tel que tout produit de mots de $C$ se factorise de manière unique comme produit : formellement, si
    $c_{1}c_{2}\cdots c_{n}=d_{1}d_{2}\cdots d_{m}$
pour $n,m\geq 1$ et $c_{i},d_{j}\in C$, alors
    $n=m$ et $c_{i}=d_{i}$ pour tout $i$.
Un autre formulation de la propriété est que le sous-monoïde $C^{*}$ engendré par $C$ est librement engendré par $C$, donc que $C$ est une base du sous-monoïde $C^{*}$. Les mots composant un code $C$ sont appelés les « mots du code », un produit de mots du code est un « message ». Si $B$ est un alphabet en bijection avec $C$, une fonction bijective $f:B\to C$ s'étend naturellement en un morphisme de $B^{*}$ sur $C^{*}$ qui, à tout mot $w=b_{1}\cdots b_{n}$ sur $B$ associe le message
    $f(b_{1}\cdots b_{n})f(b_{1})\cdots f(b_{n}$).
L'application $f$ est un « morphisme de codage », l'application inverse $f^{-1}$ est le « décodage ».
Un code uniforme ou code en bloc est un code dont tous les mots ont même longueur, appelée la longueur du code. Un code comma-free est un code uniforme tel qu'aucun mot du code n'est facteur interne du produit de deux mots du code : Si $pcs=c_{1}c_{2}$ pour des mots du code $c,c_{1},c_{2}$, alors $p$ ou $s$ est le mot vide. Golomb et. al. donnent la formulation explicite suivante : si $a_{1}a_{2}\cdots a_{n}$ et $b_{1}b_{2}\cdots b_{n}$ sont éléments du code $C$, alors aucun des mots $a_{2}\cdots a_{n}b_{1}$, $a_{3}\cdots a_{n}b_{1}b_{2}$, ..., $a_{n}b_{1}b_{2}\cdots b_{n-1}$ n'est dans $C$.

## Taille d'un code comma-free

Tous les mots d'un code comma-free sont primitifs. La taille, c'est-à-dire le nombre d'éléments d'un code comma-free de longueur $n$ est donc majorée par le nombre de mots primitifs de longueur $n$, qui est aussi le nombre de colliers apériodiques de longueur $n$ ; ce nombre est égal à
    $M_{k}(n)={1 \over n}\sum _{d\mid n}\mu (d)k^{n/d}$
pour un alphabet à k lettres. Ici, $\mu$ est la fonction de Möbius. Si on note $W_{k}(n)$ la taille maximale d'un code comma-free de longueur $n$ sur un alphabet à $k$ lettres, on a donc $W_{k}(n)\leq M_{k}(n)$. Golomb et al. ont démontré qu'il y a égalité si la longueur $n$ des mots du code est impaire et inférieure à 15 ; le cas général a été prouvé par Willard L. Eastman. On a donc:
    $W_{k}(n)=M_{k}(n)={1 \over n}\sum _{d\mid n}\mu (d)k^{n/d}$ si $n$ est impair.
Willard L. Eastman donne de plus un algorithme pour construire ces codes. Un autre algorithme est donné par Robert A. Scholtz. Pour $k=4$ lettres et des mots de longueur $n=3$, on trouve la valeur 20, en concordance avec la conjecture de Crick et. al.
Knuth parle du premier algorithme dans sa conférence de Noël. L'algorithme d'Eastman est développé par Knuth comme exemple de backtracking. Il existe des liens entre codes comma-free et les ensembles Hall et les ensembles de Lazard. Le résultat sur la maximalité est faux pour les mots de longueur paire, et aucune formule n'est conjecturée pour la cardinalité d'un code comma-free de longueur paire n sur k lettres.