Probleme – Un automate qui compte modulo
Exercice · niveau 3 (difficile) · informatique (MP2I/MPI), chapitre 29 — Langages réguliers et automates finis
Énoncé
Sur l'alphabet , on veut reconnaître les écritures binaires des multiples de (le poids fort à gauche, et le mot vide valant ).
- Construire l'automate et prouver sa correction par un invariant.
- En donner une expression régulière par élimination des états.
- Le résultat se généralise-t-il à un diviseur quelconque ?
- Un automate fini ne sait pas compter jusqu'à un entier arbitraire. Comment celui-ci fait-il ?
Corrigé
1. L'automate. Trois états, , , : l'état est le reste modulo 3 de ce qui a été lu. Initial , acceptant , et
soit la table
Correction. Invariant : après lecture du préfixe , l'état vaut , où est l'entier écrit par . Il est vrai au départ (, ). Il est conservé : lire un chiffre transforme en , et
ce qui est exactement la transition. À la fin, l'état vaut , et le mot est accepté si et seulement si ce reste est nul.
Vérification. L'automate a été exécuté sur les mots de longueur au plus , et sa réponse comparée au reste modulo de la valeur binaire calculée directement : accord complet. Les mots reconnus de longueur au plus sont , 0, 00, 11, 000, 011, 110, 0000, 0011, 0110, 1001, 1100, 1111 — on y reconnaît et leurs écritures à zéros de tête.
2. L'expression. On élimine , puis . Les chemins de vers sont : ou bien un 0 direct ; ou bien un 1 vers l'état , un séjour quelconque dans , puis un retour en . Le séjour se résume en — aller en par un 0, y boucler par des 1, revenir en par un 0 —, et le retour final se fait par un 1. D'où
Cette expression a été évaluée par dérivées sur les mots de longueur au plus et comparée à l'automate : accord complet.
3. La généralisation. L'automate se généralise sans changement : pour un diviseur , on prend états — les restes — et . L'invariant est le même mot pour mot. Il a été vérifié pour tout de à sur les mots de longueur au plus : accord complet.
Mais la minimalité, elle, ne se généralise pas, et c'est la surprise de la question. On mesure :
| états de l'automate | ||||||||||
| après minimisation |
Pour impair, aucun état n'est superflu : est inversible modulo , donc de deux restes distincts on tire , et il existe un mot de bits qui complète en un multiple de sans compléter . Les restes sont deux à deux distinguables.
Pour pair, non. Écrivons avec impair. Dès qu'on a lu bits de plus, : le reste modulo est oublié. Il ne reste à retenir que le reste modulo , plus le nombre de bits déjà lus tant qu'il est inférieur à . On mesure exactement états minimaux, et cette formule a été vérifiée sur les dix-huit valeurs — par exemple donne états au lieu de .
La leçon. Une construction naturelle et correcte n'est pas pour autant minimale, et rien dans l'écriture ne le signale. Il faut minimiser pour le savoir.
4. La question de fond. L'automate ne compte pas jusqu'à un entier arbitraire : il compte modulo , et il n'y a que valeurs à retenir. C'est une information de taille bornée, indépendante de la longueur du mot — exactement ce qu'un automate fini peut se permettre.
La comparaison avec éclaire le chapitre entier :
| Ce qu'il faut retenir | Taille de cette information | |
|---|---|---|
| multiples de | le reste modulo | bits, bornée |
| le nombre exact de `a` | bits, non bornée |
Ce n'est jamais « compter » qui est interdit à un automate fini, c'est retenir une quantité non bornée. Le lemme de l'étoile ne dit rien d'autre, et cette famille d'exemples montre qu'il ne faut pas le lire trop vite : un automate à trois états décide la divisibilité par d'un nombre arbitrairement grand.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.