# Système de tague

En informatique théorique, plus précisément en calculabilité, un système de tague (tag system en anglais) est un modèle de calculabilité défini par Emil Leon Post en 1943 comme système de réécriture. C'est un cas particulier de système de Post. Ce modèle est Turing-complet : toute fonction calculable peut être représentée par un système de tague de Post.

## Définitions
### Définition d'un système de tague

Un système de tague est défini par :
* un entier naturel m (nombre de lettres du préfixe, à effacer après chaque itération) ;
* un alphabet fini A ;
* un mot initial écrit avec l'alphabet A;
* une règle de réécriture par lettre de l'alphabet : à toute lettre a, on associe un mot P(a).
Un système de tague de paramètre m est appelé m-système. Les 2-systèmes sont les plus étudiés.

### Fonctionnement du système de tague

On transforme un mot de la façon suivante :
* on regarde la première lettre a du mot ;
* on ajoute P(a) à la fin du mot ;
* on efface les m premières lettres.
Le fonctionnement du système de tague consiste à démarrer avec le mot initial puis à appliquer des transformations. On arrête les itérations lorsque le mot est de longueur plus petite que m. Il existe des variantes de système de tague où les itérations s'arrêtent si le mot est vide, ou si sa première lettre est une lettre spéciale qui code l'arrêt (typiquement « H » comme « halt »). Il y a des systèmes de tague qui ne terminent jamais parce que la longueur du mot est globalement croissante ; dans ce cas, chaque fois que le mot a une forme particulière (par exemple, si son écriture ne comprend que des lettres a), il représente (par exemple par le nombre de a) un terme d'une suite (mathématiques).

### Exemple

L'exemple suivant est un 3-système de tague qu'Emil Post affirmait avoir inventé en 1921 ; il s'écrit sur un alphabet de deux lettres a et b.

#### Règles de réécriture

* Si la première lettre est a, le suffixe sera aa
* Si la première lettre est b, le suffixe sera bbab

#### Simulation pas par pas

Avec le mot initial aaaba, on a les étapes suivantes :
* Le mot aaaba commençant par un a on lui rajoute le suffixe aa pour avoir aaabaaa puis baaa après avoir enlevé les 3 premières lettres ;
* Le mot baaa commençant par b, on lui rajoute le suffixe bbab pour avoir baaabbab puis abbab par suppression des 3 premières lettres ;
* Le mot abbab commençant par a on lui ajoute le suffixe aa pour avoir abbabaa puis abaa par suppression des 3 premières lettres ;
* Le mot abaa commençant par a on lui ajoute aa pour avoir abaaaa puis aaa par suppression des 3 premières lettres ;
* Le mot aaa commençant par a on lui ajoute là encore le suffixe aa pour avoir aaaaa puis, par suppression des 3 premières lettres, aa ;
* Le mot aa commençant par a, là encore le suffixe sera aa et on obtiendra le mot aaaa puis, par suppression des 3 premiers a, le mot d'une seule lettre a ;
* La première lettre de a est a, donc on lui rajoute le suffixe aa pour avoir aaa, mot de trois lettres qui se vide lorsqu'on supprime ses 3 (premières) lettres.
Le mot étant vide, le système a atteint le point d'arrêt et l'exécution se termine là.

#### Notation

Pour faciliter la lecture de l'historique d'un système de tague, on écrit les mots non en dessous l'un de l'autre, mais décalés, ici de 3 lettres, vers la droite, afin que les lettres identiques soient alignées verticalement. L'exemple précédent donne ceci :

### Origine du nom

Dans son article de 1943, Post parle de simuler un tel système de réécriture par une machine de Turing à deux têtes, l'une qui lit et l'autre qui écrit. Les deux têtes ne reculent jamais, mais alors que la tête qui lit avance toujours de m cases, celle qui écrit avance d'une longueur variable puisque dépendant du suffixe. Le mouvement des deux têtes évoquait à Post celui de deux enfants jouant à « attrape », jeu dont le nom québécois est tague. Le fait qu'on puisse comparer l'ajout du suffixe à un tag est donc une coïncidence.

## Exemples
### Détermination de la parité

Voici un 2-système calculant la parité du nombre initial de o dans un mot ne comprenant presque que des o ; par exemple, le mot oooooPI (comprenant 5 fois la lettre o) aboutit, lors de l'arrêt, au mot impair :

### Triplement

Ce 1-système triple le nombre de o dans un mot :
Cette variante donne les puissances de 3 : chaque fois que le mot commence par T, il contient un nombre de o qui est successivement 1, 3, 9, 27, etc. :

### Calcul d'une suite de Collatz

Ce 2-système de tague vient de [De Mol, 2008]. Il n'a pas de symbole d'arrêt mais s'arrête tout seul sur tout mot de moins de 2 lettres, et calcule la suite de Collatz.
Dans la suite originelle de Collatz, le successeur de n est ou bien n/2 (pour n pair), ou bien 3n + 1 (pour n impair). Le nombre 3n + 1 étant pair pour n impair, le terme de la suite qui suit 3n + 1 est donc 3n + 1/2. Cette étape intermédiaire est omise dans le système de tague suivant, en définissant le successeur de n comme étant 3n + 1/2 pour n impair.
Dans ce système de tague, un entier naturel n est représenté par le mot aa...a avec n fois la lettre a.

### Problème du 3-système de Post

Dans son article de 1943, Post décrit le 3-système présenté en exemple au début de cet article (aa,bbab) noté (00,1101) comme difficile. Il dit que même si chaque fois qu'il y a un a au début le mot raccourcit d'une lettre, soit autant qu'il s'allonge lorsque sa première lettre est b, il ne semble pas y avoir de lien simple entre le pourcentage de a dans le mot initial, et le fait qu'on puisse aboutir à un mot vide. En 1967, Minsky propose d'essayer avec le mot baabaabaabaabaabaabaa qui donne un système semblant s'allonger sans limite. Des systèmes à caractère périodique peuvent aussi exister :

## Turing-complétude

Hao Wang a démontré en 1963 qu'un 2-système est Turing-complet ; l'année suivante, John Cocke et Marvin Minsky démontre un résultat analogue (avec un 2-système aussi). Ils simulent une machine de Turing universelle par un 2-système.

## Systèmes cycliques

Dans un système cyclique, les suffixes ne dépendent pas de la première lettre mais sont choisis cycliquement dans une liste de mots. Cette généralisation a été créée par Matthew Cook dans la démonstration du caractère Turing-complet de l'automate cellulaire dit règle 110.