Bonjour,
Dans la leçon précédente, nous avons établi les fondations de notre étude en définissant formellement un automate fini déterministe (AFD) et en apprenant à simuler son exécution sur une chaîne d'entrée. Vous savez maintenant qu'un AFD est un quintuplet et comment il accepte ou rejette un mot.
Aujourd'hui, nous passons de l'analyse à la synthèse, un exercice intellectuel fondamental pour l'Agrégation. L'objectif n'est plus de comprendre un automate existant, mais de construire vous-même un AFD pour un langage régulier simple décrit en français. Cette leçon vous dotera d'une méthodologie systématique pour traduire une description de langage en une machine formelle qui le reconnaît.
1. La Méthodologie de Construction d'un AFD
Construire un AFD n'est pas un processus aléatoire ; cela suit une démarche logique rigoureuse. La clé est de comprendre que les états de l'automate représentent sa mémoire. Puisque cette mémoire est finie (le nombre d'états est fini), nous devons identifier l'information essentielle et limitée que la machine doit retenir sur le préfixe de la chaîne lue jusqu'à présent pour décider de l'avenir.
Voici la démarche que je vous propose de suivre :
- Identifier l'alphabet () : Quels sont les symboles autorisés dans les mots du langage ?
- Définir la sémantique des états : C'est l'étape la plus importante. Pour chaque état que vous créez, vous devez pouvoir répondre précisément à la question : "Dans quel cas la machine se trouve-t-elle dans cet état ?". Chaque état doit correspondre à une propriété spécifique du préfixe déjà lu (par exemple, "le préfixe se termine par 'a'", "le préfixe contient un nombre pair de 'b'", etc.).
- Définir l'état initial () : Cet état correspond toujours à la lecture du mot vide, . Il représente l'information que nous avons avant de commencer à lire la chaîne.
- Définir le ou les états accepteurs () : Parmi les états que vous avez définis, lesquels correspondent à des préfixes qui sont des mots complets et valides du langage ?
- Construire la fonction de transition () : Pour chaque état et chaque symbole de l'alphabet, déterminez l'état suivant. Posez-vous la question : "Si je suis dans un état qui a la sémantique S et que je lis le symbole x, quelle est la nouvelle sémantique du préfixe augmenté, et donc, dans quel état dois-je passer ?".
- Assurer la complétude (et l'état puits) : Un AFD doit avoir une transition définie pour chaque couple (état, symbole). Si, à un moment donné, la chaîne lue ne pourra plus jamais appartenir au langage, on la dirige vers un état puits (ou "trap state"), un état non-accepteur dont toutes les transitions bouclent sur lui-même.
Appliquons immédiatement cette méthode.
2. Exemple 1 : Langages définis par leur préfixe
Considérons un problème classique : construire un AFD qui accepte toutes les chaînes sur l'alphabet qui commencent par '0'.
La vidéo suivante illustre parfaitement la construction pas à pas de cet automate.
Deterministic Finite Automata (Example 1)
Cette vidéo de Neso Academy, intitulée 'Deterministic Finite Automata (Example 1)', détaille la conception d'un AFD pour le langage des chaînes qui commencent par '0'. Suivez attentivement le raisonnement pour chaque décision.
Regardez la vidéo de 00:24 à 06:05. Concentrez-vous sur la manière dont les trois états sont introduits et leur rôle : L'état initial. L'état final (accepteur), atteint dès que la condition 'commence par 0' est remplie. L'état 'mort' ou 'puits' (dead/trap state), atteint si la chaîne commence par '1'.
Analysons cette construction avec notre méthodologie :
- Alphabet : .
- Sémantique des états :
- État A (, initial) : On n'a encore rien lu.
- État B (, accepteur) : Le préfixe lu a commencé par un '0'.
- État C (, puits) : Le préfixe lu a commencé par un '1'.
- État initial : A, car le mot vide n'a pas encore commencé par '0' ou '1'.
- État accepteur : B, car toute chaîne commençant par '0' doit être acceptée, quelle que soit la suite.
- Transitions :
- Depuis A : si on lit '0', on passe en B (la condition est remplie). Si on lit '1', on passe en C (la condition est échouée à jamais).
- Depuis B : si on lit '0' ou '1', on reste en B. La chaîne a déjà commencé par '0', elle reste acceptée.
- Depuis C : si on lit '0' ou '1', on reste en C. La chaîne a déjà échoué, elle restera rejetée.
La vidéo continue en validant l'automate sur les chaînes '001' (acceptée) et '101' (rejetée) entre 06:05 et 09:16. Je vous encourage à faire ce traçage mentalement pour vous assurer de votre compréhension.
3. Exemple 2 : Langages définis par une sous-chaîne
Complexifions légèrement. Construisons un AFD qui accepte le langage sur des mots contenant la sous-chaîne '00'.
Quelle information devons-nous mémoriser ici ?
- Nous n'avons pas encore vu de '0' pertinent.
- Nous venons de voir un '0', donc le prochain caractère pourrait être un second '0'.
- Nous avons déjà vu la sous-chaîne '00'.
Cela nous suggère trois états. La vidéo suivante construit un automate pour un problème analogue (détecter '11').
Regular Languages: Deterministic Finite Automaton (DFA)
Cette vidéo de la chaîne 'lydia' construit un AFD pour détecter une 'heatwave', définie comme deux jours consécutifs avec une température élevée. En remplaçant 'température élevée' par '1', c'est l'automate pour le langage des chaînes contenant '11'.
Regardez la vidéo de 01:01 à 03:17. Observez comment les états q0, q1, et q2 correspondent précisément aux trois niveaux d'information que nous avons identifiés : 'rien vu', 'vu un 1', 'vu 11'.
Maintenant, adaptez ce que vous venez de voir pour notre problème (contenir '00') :
- Sémantique des états :
- (initial) : Le préfixe lu ne se termine pas par '0'.
- : Le préfixe lu se termine par un seul '0'.
- (accepteur) : Le préfixe lu contient la sous-chaîne '00'.
- Transitions :
- Depuis : si on lit '1', on reste en . Si on lit '0', on passe en .
- Depuis : si on lit '1', le '0' que l'on avait vu est "perdu", on retourne en . Si on lit '0', on passe en (succès !).
- Depuis : si on lit '0' ou '1', on reste en . Une fois la sous-chaîne trouvée, le mot est accepté définitivement.
Ce principe de "chaîne d'états" qui mémorise la progression vers la reconnaissance d'un motif est très courant. L'image suivante montre la solution pour un motif un peu plus long, "abc". La logique est la même.
4. Synthèse et Formalisation
La construction d'un AFD consiste à matérialiser une "mémoire" sous forme d'états et de transitions. Une fois le diagramme esquissé, il est crucial de pouvoir le formaliser avec le quintuplet , comme vu dans la leçon précédente.
Le document de référence ci-dessous fournit une définition formelle rigoureuse ainsi qu'un autre exemple classique : l'automate reconnaissant le langage .
[PDF] Théorie des langages - CNRS
Le document 'Théorie des langages' du CNRS formalise la notion d'AFD et de son exécution. Il est important de vous familiariser avec ce niveau de formalisme.
Consultez la section 3.3 'Automates Finis Déterministes' (page 17). Relisez la définition formelle d'un AFD et analysez l'exemple graphique donné. Essayez de comprendre pourquoi l'état U est l'état final et comment l'état E sert d'état puits.
Exercice de Réflexion
Pour aller plus loin, considérons un type de langage différent, où la propriété à mémoriser n'est pas un motif, mais une propriété arithmétique.

Question pour vous : en appliquant notre méthodologie, quelle est la sémantique de chacun des trois états ? Autrement dit, quelle information sur le préfixe lu l'automate doit-il mémoriser pour prendre sa décision ?
Cliquez ici pour la réponse
L'information cruciale à mémoriser est le reste de la division par 3 de la somme des chiffres du préfixe lu.- État $a_0$ : La somme des chiffres lus est congrue à 0 modulo 3. C'est l'état initial (somme de $\epsilon$ = 0) et l'état final.
- État $a_1$ : La somme des chiffres lus est congrue à 1 modulo 3.
- État $a_2$ : La somme des chiffres lus est congrue à 2 modulo 3.
Conclusion
Aujourd'hui, vous avez acquis une compétence essentielle : la capacité de transformer une description abstraite de langage en un modèle de calcul concret et formel.
Points clés à retenir :
- La construction d'un AFD est une démarche systématique basée sur l'identification de la mémoire finie nécessaire.
- La sémantique des états est le cœur de la conception : chaque état encode une propriété du préfixe lu.
- La construction des transitions consiste à mettre à jour cette propriété à la lecture de chaque nouveau symbole.
- L'état puits est un outil indispensable pour gérer les échecs irrécupérables et garantir la complétude de l'automate.
Dans notre prochaine leçon, nous introduirons le concept d'automate fini non déterministe (AFN). Vous verrez que pour certains langages, les AFN sont plus simples et plus intuitifs à construire. Nous prouverons ensuite un résultat fondamental : malgré cette simplicité, les AFN ne sont pas plus puissants que les AFD.