Conversion d’un automate en expression régulière
Nous allons voir comment convertir n’importe quel automate fini en expression régulière.
Description de l’algorithme
L’entrée est un AFN A. Dans un premier temps, nous le transformons en AFNG. Dans la seconde phase, à chaque étape nous éliminons un état, nous modifions correctement la fonction de transition et nous recommençons jusqu’à ce qu’il ne reste que deux états : l’état initial et l’état final. Entre eux passera un arc dont l’étiquette est une expression régulière, qui sera le résultat de l’algorithme tout entier. Toute la méthode consiste donc essentiellement à éliminer un état, puis à corriger l’automate de façon à obtenir un automate équivalent.
Élimination d’un état
Voyons sur un exemple simple comment éliminer un état. Supposons qu’une partie de notre automate ressemble à ceci :
où les Ri sont des expressions régulières. À quoi ressemblerait l’automate si nous éliminions l’état qr ? On peut se l’imaginer ainsi : nous sommes dans l’état qi et nous nous demandons quels sont tous les mots que nous pouvons engendrer sur cette portion. Si nous allons directement de l’état qi à l’état qj, ce seront tous les mots qui correspondent à l’expression régulière R4.
Mais si nous passons par l’état qr, nous pouvons engendrer les mots de la forme R1. Dans l’état qr, nous pouvons cependant boucler selon l’expression régulière R2, de sorte que nous pouvons en fait engendrer les mots de la forme
Nous savons maintenant que, de cette partie de l’automate, peuvent sortir des mots de la forme R4 ou de la forme
Nous pouvons maintenant éliminer simplement l’état qr et ne garder que les deux états qi et qj, et à la place de R4 nous écrivons l’expression que nous venons de calculer :
Nous effectuons cette opération avec chaque arc partant de chaque état qi vers un état qj, y compris les boucles, c’est-à-dire y compris le cas où qi = qj.
Après l’élimination d’un état, nous obtenons un automate équivalent, c’est-à-dire un automate qui reconnaît le même langage.
L’algorithme complet
L’entrée est un AFN A = (Q ; Σ ; δ ; q0 ; F).
- Nous convertissons l’AFN A en AFNG Z = (Q′ ; Σ ; δ′ ; q0′ ; qf′). Dans la suite, nous noterons k le nombre d’états de Z.
- Si k = 2, l’algorithme se termine, et sur l’arc entre l’état initial et l’état final se trouve l’expression régulière cherchée.
- Si k>2, nous choisissons un état quelconque qr différent de l’état initial et de l’état final, c’est-à-dire qr ≠ q0′ et qr ≠ qf′. Nous construisons ensuite un nouvel AFNG Z′ = (Q′′ ; Σ ; δ′′ ; q0′ ; qf′) tel que :
et, pour tout qi ∈ Q′′ ∖ {qf′} et tout qj ∈ Q′′ ∖ {q0′}, posons où R1 = δ′(qi,qr), R2 = δ′(qr,qr), R3 = δ′(qr, qj), R4 = δ′(qi, qj). Ensuite, retourne à l’étape 2.
Exemple
Soit en entrée cet automate fini :
Nous le convertissons d’abord en AFNG (nous ne représenterons pas les transitions ∅ inutiles) :
Appliquons maintenant la seconde partie de l’algorithme et éliminons un nœud. Commençons par le nœud q2. Nous éliminons le nœud q2 et nous ajoutons une transition de l’état q1 vers l’état qf. Nous étiquetons cette transition b(a|b)∗, car du nœud q1 nous arrivons à l’état q2 par les mots de la forme b, puis nous pouvons boucler selon a|b, ce qui donne (a|b)∗, et enfin nous passons à qf par la ε-transition. On a en outre b(a|b)∗ϵ = b(a|b)∗. Nous obtenons l’automate :
Il nous reste à éliminer le dernier état, q1. Nous ajoutons un arc de l’état qs à l’état qf. Comment l’étiqueter ? Nous arrivons à l’état q1 par une ε-transition, que nous pouvons omettre directement. Ensuite, nous pouvons boucler selon a, ce qui donne l’expression régulière a∗. Et enfin, nous arrivons à qf par l’arc, donc nous concaténons encore l’expression avec b(a|b)∗. Nous étiquetons donc l’arc par l’expression régulière a∗ b(a|b)∗.
L’automate n’a plus que deux états, donc l’algorithme se termine. Sur l’arc se trouve l’expression régulière cherchée.
Sources
- L’exemple et la description de l’algorithme proviennent de M. Sipser : Introduction to the Theory of Computation
Chapitres: Expressions régulières, Conversion d’une expression régulière en automate, Automate fini non déterministe généralisé, Conversion d’un automate en expression régulière