Les systèmes de tague

Principe

Le jeu de calculviar est, comme son nom l'indique, basé sur des œufs de poissons. Chaque race de poisson se reconnaît à sa couleur, qui est la même que celle de l'œuf dont il provient. Une source de chaleur située sur la gauche fait que l'œuf de gauche est toujours le premier à éclore. Alors par exemple

On résume la situation par des règles de (re)production notées en abrégé (avec la lettre b pour "œuf bleu", la lettre r pour "œuf rouge" et la lettre v pour "œuf vert"): De plus, à chaque éclosion, un œuf détruit son voisin, ce qui fait disparaître non seulement l'œuf qui vient d'éclore mais son voisin, soit deux œufs en tout. On dit que le système émulé est un 2-tague système.

La population initiale (liste des œufs) est décrite par une chaîne de caractères appelée axiome (on suppose qu'elle est "vraie" dès le départ). Par exemple si au départ il y avait 3 œufs bleus l'axiome est bbb ce qu'on note

(le ⊢ est un "T" tourné, c'est l'initiale du mot "théorème" parce que tout axiome est considéré comme un théorème, comme ce qui s'en déduit). Avec les règles de production précédentes, l'axiome bbb (qui représente le nombre 3) donne les générations suivantes (ou théorèmes): etc.

Voici la version graphique, les générations (ou théorèmes) successives étant dessinées l'une en-dessous de l'autre:

Programmation en CoffeeScript

Pour récupérer la première lettre de l'axiome, on fait axiome[0]; pour récupérer les lettres sauf les deux premières (modélisation de la destruction des œufs), on fait axiome[2..] (les deux premières lettres ayant les indices 0 et 1, on garde tout ce qui est à partir de l'indice 2, soit effectivement toutes les lettres qui restent). Pour ajouter les lettres r et v à la fin de l'axiome, on fait axiome += "rv"; pour séparer les différents cas qui se présentent, on utilise switch ... when:

On peut modifier ce script pour tester des variantes ou afficher une liste de théorèmes plus grande...

Théorème

(Hao Wang, 1963)

Toute fonction calculable peut être simulée par un 2-tague système

Ci-dessus on simule la suite de Collatz. La conjecture de Syracuse dit que pour tout nombre d'œufs bleus initial, la population finit par fluctuer périodiquement comme on le voit ci-dessus.

Problème de 3-tague de Post (1921)

Dans ce problème, qui est le premier exemple de tague-système, on a un 3-tague système à deux couleurs (il n'y a que des poissons rouges et bleus). Et les règles de production sont les suivantes:

Par exemple, en testant ci-dessous, on constate qu'avec l'axiome rrrbr on a un nombre fini de théorèmes avant épuisement total de la population:

Et la population s'éteint et tout est fini: Il faut éviter de ne mettre que des poissons rouges dans un aquarium, ça ne leur réussit pas...

Pour certains axiomes, ce système de Post s'éteint. Mais pour d'autres il donne lieu à une population qui évolue périodiquement dans le temps. Par exemple avec l'axiome r r r b r b b b r b r r b on a une 6-période visible sur le graphique:

Ne pas hésiter à jouer avec le simulateur CoffeeScript ci-dessus, pour voir quelles périodes sont possibles, et qui sait, peut-être répondre à la question posée en 1921 par Post: Existe-t-il un algorithme permettant, à partir d'un axiome donné, de savoir s'il y a extinction ou périodisme? En effet Post n'a jamais trouvé la réponse...

Les 1-tague systèmes

On peut calculer certaines suites de nombres avec un 1-tague système, c'est-à-dire lorsque l'œuf qui éclot ne casse pas d'œuf dans son voisinage. Et même si les œufs et les poissons sont tous bleus. Voici quelques exemples:

Suites arithmétiques

Entiers naturels

Entiers impairs

Suites géométriques

Là il faut deux couleurs (rouge et bleu); les termes de la suite sont les populations où il n'y a que des œufs bleus à l'exception d'un unique œuf rouge au début: Le nombre d'œufs bleus est alors une puissance de 2

Puissances de 2

Voici le calcul des puissances de 2 par cet algorithme:

Puissances de 3

Pour les 1-tague systèmes de cette partie, les entiers sont représentés comme cardinaux de l'ensemble des œufs; par exemple le nombre 5 est représenté par la chaîne bbbbb parce qu'il y a 5 fois la lettre b. Le script suivant permet la conversion inverse:

On peut copier-coller le résultat d'un des scripts précédents pour convertir sans avoir à compter les "b"; ou on peut rajouter à l'un des scripts précédents une conversion pour améliorer l'affichage.