Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 72

AFD vers Expression Régulière : Algorithme de Kleene

Recommended resources

Bonjour,

Dans notre leçon précédente, nous avons établi la première moitié de l'équivalence fondamentale entre les formalismes des langages réguliers, en montrant comment transformer une expression régulière en un automate fini non déterministe grâce à la construction de Thompson. Nous avons ainsi prouvé que tout langage descriptible par une expression régulière est reconnu par un automate.

Aujourd'hui, nous allons achever la démonstration du théorème de Kleene en abordant la direction inverse. L'objectif est de maîtriser une méthode algorithmique pour convertir un automate fini (AFD ou AFN) en une expression régulière équivalente. Cette construction, bien que plus complexe conceptuellement que celle de Thompson, est tout aussi fondamentale et constitue un attendu classique pour l'agrégation.

Nous étudierons la méthode la plus courante, souvent appelée algorithme de Kleene ou méthode d'élimination d'états. Elle repose sur une approche de programmation dynamique où l'on construit progressivement des expressions régulières décrivant des chemins de plus en plus complexes au sein de l'automate.


1. Le Théorème de Kleene : Une Vision d'Ensemble

Avant de plonger dans l'algorithme, resituons notre objectif. Le théorème de Kleene stipule que les trois classes de langages suivantes sont identiques :

  1. Les langages reconnus par un Automate Fini Déterministe (AFD).
  2. Les langages reconnus par un Automate Fini Non Déterministe (AFN).
  3. Les langages décrits par une expression régulière.

Le diagramme suivant illustre les relations que nous établissons.

Diagramme du Théorème de Kleene
Ce diagramme illustre le cycle de conversions qui prouve l'équivalence entre expressions régulières, AFN et AFD. La leçon précédente couvrait la flèche "Expression Régulière → AFN". Aujourd'hui, nous nous concentrons sur la flèche "AFD → Expression Régulière", complétant ainsi la preuve.

La leçon d'aujourd'hui ferme cette boucle en montrant qu'un langage reconnu par un automate peut toujours être décrit par une expression régulière.



2. L'Algorithme de Kleene : Une Construction par Induction

L'idée centrale de l'algorithme est de construire des expressions régulières pour les ensembles de mots qui permettent de passer d'un état à un état en n'utilisant qu'un sous-ensemble restreint d'états intermédiaires. On enrichit ensuite progressivement ce sous-ensemble jusqu'à pouvoir utiliser tous les états de l'automate.

Introduction à l'algorithme de Kleene pour la conversion d'automates en expressions régulières
Cette image illustre l'environnement d'enseignement pour des concepts avancés comme la conversion d'automates en expressions régulières, au cœur de notre leçon.

Pour formaliser cela, nous allons définir une expression .

Définition Formelle

Soit un automate dont les états sont numérotés de 1 à . Nous définissons comme une expression régulière décrivant l'ensemble de tous les mots qui permettent de passer de l'état à l'état en utilisant uniquement des états intermédiaires dont l'indice est strictement inférieur à .

La construction se fait par récurrence sur .

  • Cas de base (): décrit les chemins de à n'utilisant aucun état intermédiaire (indice < 1). Cela correspond donc aux transitions directes.

    • Si , est la somme (+) des étiquettes de toutes les flèches allant directement de à . S'il n'y en a pas, l'expression est .
    • Si , est (pour le chemin de longueur nulle) + la somme des étiquettes de toutes les boucles sur .
  • Étape d'induction (): Pour calculer , on considère les chemins de à utilisant des états intermédiaires d'indice (c'est-à-dire dans ). Un tel chemin peut :

    1. Soit ne jamais passer par l'état . Dans ce cas, il n'utilise que des états intermédiaires d'indice . L'expression correspondante est donc .
    2. Soit passer par l'état au moins une fois. Ce chemin se décompose en :
      • Un premier segment de à (sans passer par en intermédiaire) : .
      • Zéro, une ou plusieurs boucles depuis vers (sans repasser par en intermédiaire) : .
      • Un dernier segment de à (sans passer par en intermédiaire) : .

En combinant ces deux cas, on obtient la relation de récurrence fondamentale :

La vidéo suivante, d'un cours de l'Université de Cambridge, explique cette construction de manière très rigoureuse et visuelle.

Kleene's Theorem (b): from automaton to regex (Discrete Mathematics: Formal Languages and Automata)

Cette vidéo de Frank Stajano décompose magistralement la preuve. Elle introduit le lemme puissant sur lequel repose l'algorithme, puis détaille la construction inductive (cas de base et étape de récurrence). C'est une excellente ressource pour saisir l'ingéniosité de la méthode.

Regardez les sections suivantes : De 05:40 à 12:04 : Introduction du lemme central et comment il permet de résoudre le problème. De 12:58 à 16:26 : Explication du cas de base (chemins directs, k=1). De 16:26 à 22:14 : Explication détaillée de l'étape inductive, qui est la formule que nous venons de voir. Concentrez-vous sur le raisonnement qui décompose les chemins.

Expression Finale

Une fois que nous pouvons calculer pour n'importe quelles valeurs, l'expression régulière pour l'automate entier (avec états) est la somme de toutes les expressions où est un état initial et est un état final.

Le garantit que tous les états peuvent être utilisés comme intermédiaires.

Pour une référence écrite en français, vous pouvez consulter le document suivant.

[PDF] IF114 – Automates finis et applications

Ce polycopié de cours de Bordeaux INP formalise l'algorithme sous le nom de construction de McNaughton et Yamada. C'est une excellente référence textuelle pour la formule et son application.

Lisez la section 3.3.3 "Des automates finis aux expressions régulières" (pages 38-39). Repérez la définition formelle de R(i, j, k), la formule du cas de base (3.1) et la formule de l'étape d'induction (3.2). Notez la formule finale (3.3) qui combine les résultats pour obtenir l'expression du langage.



3. Application de l'Algorithme : Un Exemple Détaillé

L'application manuelle de la formule est un processus mécanique mais qui peut vite devenir complexe en raison de la taille des expressions générées. La vidéo suivante montre un exemple complet, pas à pas. Bien qu'elle utilise une notation légèrement différente ( au lieu de ), le principe est rigoureusement identique.

TOC Lec 17 - DFA to Regular expression by Deeba Kannan

Cette vidéo de Deeba Kannan est un tutoriel purement procédural. Elle est parfaite pour comprendre comment appliquer les formules, gérer les simplifications d'expressions et arriver au résultat final.

Regardez la vidéo à partir de 01:50 jusqu'à la fin. Observez attentivement les étapes : Calcul des expressions pour k=0 (transitions directes). Application de la formule pour k=1, en substituant les expressions déjà calculées. Simplification des expressions régulières obtenues (ex: a + ab = ab). Répétition du processus pour k=2 afin d'obtenir l'expression finale.

L'autre approche, visuellement équivalente, consiste à voir l'algorithme comme une élimination successive d'états dans un automate où les transitions sont étiquetées par des expressions régulières. À chaque fois qu'on élimine un état , on met à jour les transitions entre ses voisins pour prendre en compte les chemins qui passaient par , en utilisant précisément la formule . Le document de cours de l'enseignant-chercheur Alexis Nasr (LINK, section "Automate ⇒ expression régulière") illustre bien cette perspective graphique.



4. Exercice d'Application

Mettons en pratique la méthode d'élimination d'états, qui est souvent plus rapide à la main. Soit l'automate suivant, qui reconnaît les mots sur contenant un nombre pair de a.

  • États : (initial et final),
  • Transitions :

Notre but est de trouver l'expression régulière en éliminant l'état .

  1. Identifier les chemins passant par :
    Le seul chemin qui "sort" de l'ensemble pour y revenir passe par . C'est le chemin .

  2. Construire la nouvelle transition :

    • Chemin de à : étiquette a.
    • Boucles sur : étiquette b. L'expression pour passer un temps arbitraire sur est donc b*.
    • Chemin de à : étiquette a.

    Le chemin complet est donc décrit par l'expression a b* a.

  3. Mettre à jour l'automate :
    On peut maintenant "supprimer" et ajouter une nouvelle boucle sur avec l'étiquette a b* a.
    L'état avait déjà une boucle étiquetée b.

  4. Expression finale :
    Après élimination de , nous n'avons plus que l'état . Le langage est l'ensemble des mots qui nous font partir de et revenir à . Ces mots sont des séquences de "boucles" sur .
    Les boucles possibles sont soit b, soit a b* a. L'expression pour une boucle quelconque est donc b + a b* a.
    Comme on peut faire ces boucles autant de fois que l'on veut (y compris zéro fois, pour le mot vide ), l'expression finale est :

    Ceci est bien l'expression régulière pour les mots contenant un nombre pair de a.



Conclusion

Cette leçon clôt le chapitre sur l'équivalence des formalismes des langages réguliers.

Points clés à retenir :

  • Le théorème de Kleene établit l'équivalence formelle entre les automates finis et les expressions régulières.
  • L'algorithme de Kleene (ou méthode d'élimination d'états) fournit une construction systématique pour convertir tout automate fini en une expression régulière équivalente.
  • La méthode repose sur une construction inductive (ou de programmation dynamique) qui calcule les expressions pour des chemins de plus en plus généraux.
  • La formule de récurrence est au cœur de la preuve et de l'algorithme.

Avec la construction de Thompson et celle de Kleene, vous disposez maintenant de la boîte à outils complète pour naviguer entre ces deux représentations.

Dans notre prochaine leçon, nous aborderons un outil essentiel pour prouver qu'un langage n'est pas régulier : le lemme de pompage. Ce sera notre premier pas vers la compréhension des limites de ce modèle de calcul.