Bonjour,
Dans la leçon précédente, nous avons appris à décrire un langage régulier à l'aide d'une expression régulière, un formalisme algébrique concis. Nous avons ainsi établi une troisième caractérisation pour la classe des langages réguliers, s'ajoutant aux automates finis déterministes (AFD) et non déterministes (AFN).
Aujourd'hui, nous allons commencer à démontrer l'équivalence formelle de ces formalismes, un pilier de la théorie des langages connu sous le nom de théorème de Kleene. Cette leçon se concentre sur la première moitié de la preuve : montrer que tout langage descriptible par une expression régulière est reconnaissable par un automate.
L'objectif est donc de maîtriser une méthode algorithmique et systématique pour convertir une expression régulière en un automate fini non déterministe (AFN). Nous utiliserons pour cela la construction de Thompson, un algorithme élégant et fondamental pour le concours de l'agrégation.
1. Le Principe de la Construction de Thompson
L'idée centrale de la construction de Thompson est d'exploiter la nature récursive des expressions régulières. Une expression régulière est définie inductivement à partir de cas de base (un symbole, le mot vide, le langage vide) et de cas récursifs (union, concaténation, étoile). L'algorithme suit cette même structure :
- Cas de base : On définit des automates "briques" très simples pour les expressions élémentaires : , , et
a(pour un symboleade l'alphabet). - Cas récursifs : On définit des règles de composition pour construire un automate plus complexe à partir des automates correspondant à ses sous-expressions. Chaque opération (union, concaténation, étoile) a sa propre règle de "plomberie" d'automates.
Pour que ces compositions fonctionnent de manière fiable, les automates générés par l'algorithme de Thompson respectent un invariant crucial :
Chaque automate possède un unique état initial (sans transition entrante) et un unique état final (sans transition sortante).
Cet invariant garantit que l'on peut "brancher" des automates les uns aux autres sans effets de bord. L'automate résultant est un AFN avec des transitions spontanées (un -AFN).
2. Les Règles de Construction
Voyons maintenant comment construire ces automates, étape par étape. Les documents suivants, issus de cours de l'ENS Paris-Saclay et de l'EPITA, formalisent ces règles de manière rigoureuse.
[PDF] Notes de révision : Automates et langages
Ces notes de cours de l'ENS Paris-Saclay présentent de manière synthétique et formelle la construction de Thompson. C'est la référence principale pour les schémas de construction.
Lisez la section 1.2.1, "Construction de THOMPSON". Concentrez-vous sur les schémas qui illustrent la construction par induction pour les cas de base (∅, ε, a) et les opérations (E∗, E1+E2, E1E2). L'invariant sur l'unicité des états initiaux et finaux est la clé de la modularité de la méthode.
Synthétisons ces règles.
Cas de Base
- Expression : Un automate sans chemin de l'état initial à l'état final. Il ne reconnaît aucun mot.
- Expression : Un automate où l'état initial est relié à l'état final par une unique transition spontanée.
- Expression
a(pour ): Un automate où l'état initial est relié à l'état final par une unique transition étiquetéea.
L'image suivante, extraite d'un autre document de cours, visualise clairement ces trois briques de base ainsi que les règles de composition.

Cas Récursifs
Supposons que nous ayons déjà construit les automates et pour les expressions et .
-
Union (): On crée un nouvel état initial et un nouvel état final. Le nouvel état initial est relié par des -transitions aux anciens états initiaux de et . Les anciens états finaux de et sont reliés au nouvel état final par des -transitions. Cela crée un "parallélisme" : on reconnaît un mot si celui-ci est reconnu soit par , soit par .
-
Concaténation (): On met les automates en "série". L'état final de est fusionné (ou relié par une -transition) à l'état initial de . L'état initial du nouvel automate est celui de , et l'état final est celui de .
-
Étoile de Kleene ():
- On crée un nouvel état initial et un nouvel état final.
- On ajoute une -transition du nouvel état initial au nouvel état final (pour reconnaître le mot vide ).
- On ajoute une -transition du nouvel état initial à l'ancien état initial de .
- On ajoute une -transition de l'ancien état final de au nouvel état final.
- Enfin, on ajoute une -transition de l'ancien état final vers l'ancien état initial (pour permettre la répétition, le "bouclage").
3. Application sur un Exemple Complet
Appliquons ces règles pour construire l'automate de l'expression . La vidéo suivante illustre une démarche similaire sur un autre exemple, ce qui vous aidera à visualiser le processus.
Regex to NFA Conversion Isn't Hard! (Sipser 1.28a)
Cette vidéo de la chaîne Easy Theory, bien qu'en anglais, est excellente pour sa clarté visuelle. Elle décompose la construction d'un automate pour (a ∪ abb*)*b, en suivant rigoureusement les règles que nous venons de voir. L'approche est algorithmique et facile à suivre.
Regardez l'intégralité de cette courte vidéo. L'auteur applique les règles pour la concaténation (02:17), l'étoile (03:49) et l'union (06:00). Observez comment chaque étape consiste à combiner des automates plus petits en de nouveaux automates qui respectent toujours l'invariant (un début, une fin).
Maintenant, construisons l'automate pour à la main.
-
Briques de base : On commence par les automates pour
aetb.- :
- :
-
Union (): On combine et en parallèle.

Un automate pour (a+b) obtenu en appliquant la règle de l'union aux automates de base pour 'a' et 'b'. -
Étoile (): On applique la règle de l'étoile à l'automate précédent.

Un automate pour (a+b) obtenu en appliquant la règle de l'étoile de Kleene.* -
Concaténation (): On met en série l'automate pour et un nouvel automate pour
a.
L'automate final pour (a+b)a, obtenu par concaténation de l'automate pour (a+b) et de l'automate pour 'a'.
L'automate obtenu, bien que correct, est complexe et rempli de transitions spontanées. Les étapes suivantes (hors du cadre de cette leçon) consisteraient à éliminer ces transitions puis à déterminiser l'automate pour obtenir un AFD minimal. L'essentiel ici est la nature systématique et correcte de la construction.
4. Mise en Pratique
Il est temps de vous exercer. La feuille d'exercices suivante, classique pour ce niveau d'étude, propose plusieurs expressions à convertir.

Je vous propose de réaliser l'Exercice 1, question 1 de ce document :
Appliquer l'algorithme de Thompson pour construire un -AFN qui reconnaît le langage dénoté par l'expression régulière .
Prenez une feuille et un crayon, et appliquez méthodiquement les règles que nous avons vues. Décomposez l'expression :
- Commencez par
aetb. - Construisez
a|b. - Appliquez l'étoile pour obtenir .
- Construisez l'automate pour
abbpar deux concaténations successives. - Concaténez finalement l'automate de avec celui de
abb.
Cette démarche, bien que pouvant paraître fastidieuse, est la garantie d'une construction correcte et constitue une compétence algorithmique fondamentale.
Conclusion
Aujourd'hui, nous avons franchi une étape décisive en établissant un pont constructif entre le monde algébrique des expressions régulières et le monde machine des automates.
Points clés à retenir :
- L'algorithme de Thompson permet de convertir n'importe quelle expression régulière en un -AFN équivalent.
- C'est un algorithme récursif qui suit la structure de l'expression régulière, avec des règles pour les cas de base et pour chaque opérateur (union, concaténation, étoile).
- L'invariant clé est que chaque automate généré possède un unique état initial et un unique état final, ce qui permet des compositions propres.
- Le résultat est un automate souvent non optimal mais garanti correct, qui peut ensuite être optimisé (élimination des -transitions, déterminisation, minimisation).
Dans la prochaine leçon, nous achèverons la preuve du théorème de Kleene en étudiant la direction inverse : comment convertir un automate fini en une expression régulière. Nous verrons que cette direction est également algorithmique, bien que conceptuellement différente. Cela consolidera définitivement l'équivalence de ces trois formalismes pour décrire les langages réguliers.