Skip to main content Informatique en prépa - Lycée Malherbe 

3- Automates

I. Expressions régulières (rappels)

On se donne un alphabet .

Définition : expression régulière

On définit inductivement une expression régulière comme :

  • , l'expression vide ;
  • , le mot vide ;
  • , pour une lettre.

Pour , deux expressions régulières, on ajoute :

  • ou , l'union ;
  • ou , la concaténation ;
  • , l'étoile.
Définition : langage associé à une expression

On définit inductivement le langage associé à une expression régulière :

Pour , deux expressions régulières :

  • (à noter que )

On appelle langage régulier un langage dénoté par une expression régulière.

II. Automates

a) Automates déterministes

Définition : automate déterministe

Un automate est un quintuplet , où :

  • est un ensemble fini d'états ;
  • est un alphabet ;
  • est l'état initial de l'automate ;
  • est l'ensemble des états acceptants de l'automate ;
  • est l'ensemble des transitions.
Définition :

On définit inductivement la fonction de la manière suivante :

Définition : langage reconnu par un automate

On définit le langage reconnu par un automate comme :

Par exemple, sur , l'automate suivant reconnaît les mots qui contiennent un nombre pair de : l'état 0 signifie "on a lu un nombre pair de ", l'état 1 "un nombre impair". L'état initial est indiqué par une flèche entrante, et les états acceptants par un double cercle.

Modifiez le mot pour voir l'automate le lire, lettre par lettre :

Dessin de l'automate…

abbab

1 / 6

État courant : 0

b) Automates non déterministes

Les différences avec les automates déterministes sont indiquées en rouge.

Définition : automate non déterministe

Un automate non déterministe est un quintuplet , où :

  • est un ensemble fini d'états ;
  • est un alphabet ;
  • est l'ensemble des états initiaux de l'automate ;
  • est l'ensemble des états acceptants de l'automate ;
  • est l'ensemble des transitions.
Définition :

On définit inductivement la fonction de la manière suivante :

Définition : langage reconnu par un automate

On définit le langage reconnu par un automate comme :

Par exemple, l'automate non déterministe suivant reconnaît les mots qui se terminent par : depuis l'état 0, en lisant un , on peut rester en 0 ou "parier" que ce est l'avant-dernière lettre, en allant en 1. Pendant la lecture, on suit l'ensemble des états où l'on peut se trouver :

Dessin de l'automate…

aabab

1 / 6

État courant : 0

c) Transitions instantanées (ε-transitions)

On s'autorise maintenant des transitions étiquetées par (le mot vide) : ce sont des transitions instantanées, que l'automate peut emprunter sans lire de lettre.

Pendant la lecture d'un mot, dès qu'on est dans un état, on est donc aussi, "gratuitement", dans tous les états qu'on peut atteindre depuis lui en suivant uniquement des -transitions. Un mot est accepté s'il existe un chemin qui lit ses lettres (en intercalant autant de -transitions qu'on veut) et qui arrive dans un état acceptant.

Par exemple, l'automate suivant reconnaît : on lit des dans l'état 0, puis on "passe" instantanément dans l'état 1 pour lire des . Dès le début de la lecture, les états courants sont 0 et 1.

Dessin de l'automate…

aabb

1 / 5

États courants : 0, 1

Essayez avec aba : après le , l'automate est dans l'état 1, qui ne lit plus de : le mot est refusé.

Les -transitions ne permettent pas de reconnaître plus de langages : on peut toujours les supprimer. L'idée : si on peut aller de à par des -transitions, on recopie sur les transitions qui partent de , et devient acceptant si l'est. Elles sont en revanche très pratiques pour assembler des automates, comme on va le voir.

d) Propriétés

Propriété : déterminisation

Soit l'ensemble des langages reconnaissables par un automate déterministe, et l'ensemble des langages reconnaissables par un automate non déterministe.

Alors : .

Définition : langage rationnel

On appelle langage rationnel tout langage tel qu'il existe un automate avec .

Définition : automate des parties

Soit un automate non déterministe.

On définit , l'automate des parties correspondant à , de la manière suivante :

  • (les parties de ) ;
  • ;
  • ;
  • ;
  • .
Propriété

et reconnaissent le même langage.

Par exemple, pour l'automate non déterministe précédent (mots se terminant par ), on obtient l'automate des parties suivant, en ne gardant que les parties accessibles depuis l'état initial :

Dessin de l'automate…

aabab

1 / 6

État courant : {0}

Ses états courants sont exactement les ensembles d'états courants de l'automate non déterministe.

Avec des -transitions. La construction est la même, à une différence près : chaque ensemble d'états est remplacé par sa clôture, c'est-à-dire qu'on lui ajoute tous les états accessibles par des -transitions.

Par exemple, l'automate suivant reconnaît :

Dessin de l'automate…

aabbaa

1 / 7

États courants : 0, 1, 2

Dessin de l'automate…

aabbaa

1 / 7

État courant : {0, 1, 2}

On obtient un automate déterministe, sans -transition : l'état correspond à "on lit encore les premiers ", à "on lit les ", et à "on lit les derniers " (un est alors interdit).

Propriété : opérations sur les langages rationnels

Soit deux langages rationnels. Alors , , , et le sont aussi.

On le montre en construisant les automates correspondants. Prenons comme exemples, sur , l'automate des mots qui contiennent un nombre pair de , et l'automate des mots qui se terminent par :

Dessin de l'automate…

abab

1 / 5

État courant : p₀

Dessin de l'automate…

abab

1 / 5

État courant : q₀

Union. On place les deux automates côte à côte : les états initiaux sont ceux de et de , les états acceptants aussi. Un mot est accepté s'il est accepté par l'un des deux (l'automate obtenu est non déterministe).

Dessin de l'automate…

aab

1 / 4

États courants : p₀, q₀

Intersection. On fait avancer les deux automates "en même temps" : c'est l'automate produit, dont les états sont les couples , avec . Un couple est acceptant si ses deux composantes le sont. Ici, on reconnaît les mots avec un nombre pair de qui se terminent par :

Dessin de l'automate…

abab

1 / 5

État courant : (p₀, q₀)

Complémentaire et différence. Si est déterministe et complet (une transition pour chaque état et chaque lettre), il suffit d'échanger états acceptants et non acceptants pour reconnaître . Puis .

Concaténation. Prenons maintenant l'automate qui reconnaît le seul mot :

Dessin de l'automate…

ab

1 / 3

État courant : s₀

Pour reconnaître , on place les deux automates l'un après l'autre, et on les relie par des -transitions : de chaque état acceptant de vers chaque état initial de . Les états initiaux sont ceux de , les états acceptants ceux de . Une fois un mot de lu, on "saute" instantanément au début de :

Dessin de l'automate…

abab

1 / 5

État courant : s₀

Les -transitions servent à isoler les deux automates : on ne fusionne aucun état, donc aucun chemin ne peut "revenir" de dans , ni mélanger les transitions des deux automates.

Étoile. Prenons l'automate qui reconnaît :

Dessin de l'automate…

aab

1 / 4

État courant : 0

Pour reconnaître , il faut accepter le mot vide, et pouvoir "recommencer" un nouveau mot de à la fin de chaque mot. Une idée naïve serait de rendre l'état initial 0 acceptant, et d'ajouter une -transition de 1 vers 0... mais alors le mot serait accepté (on reste dans l'état 0, devenu acceptant), alors que ! Le problème : l'état 0 a une boucle, qu'on emprunte sans avoir fini un mot.

On ajoute donc un nouvel état , isolé du reste : il est initial et acceptant (pour le mot vide), relié par une -transition à l'ancien état initial ; et chaque état acceptant est relié à par une -transition, pour recommencer :

Dessin de l'automate…

abaab

1 / 6

États courants : i, 0

Essayez le mot a : il est bien refusé.

III. Lien entre les deux

Théorème de Kleene

Les langages rationnels sont exactement les langages réguliers.

a) Passage automate → expression régulière

On étiquette les transitions par des expressions régulières plutôt que par des lettres, et on supprime les sommets un à un.

Méthode : élimination des états

  1. On ajoute un nouvel état initial , relié par une transition aux anciens états initiaux, et un nouvel état final , vers lequel vont des transitions depuis les anciens états finals.
  2. On supprime un à un les autres états. Pour supprimer l'état : pour chaque transition et chaque transition , si a une boucle étiquetée , on ajoute la transition (sans boucle : ). Si une transition de vers existe déjà, étiquetée , on la remplace par .
  3. À la fin, il ne reste que et : l'étiquette de la transition est une expression régulière du langage.

Par exemple, sur l'automate des mots qui se terminent par (partie II.b), après l'étape 1 :

i i 0 0 i->0 ε f f 0->0 a | b 1 1 0->1 a 2 2 1->2 b 2->f ε
i i f f i->f (a | b)* ab

On retrouve bien l'expression régulière .

b) Passage expression régulière → automate

Prenons par exemple l'expression . On construit l'automate de Glushkov :

  1. On linéarise l'expression régulière, c'est-à-dire qu'on numérote chaque lettre. On note le nouvel alphabet :
  2. On trouve l'ensemble des préfixes et suffixes de 1 lettre, et des facteurs de 2 lettres, possibles :
    • premiers : ;
    • derniers : ;
    • facteurs : .
  3. On construit l'automate correspondant au langage linéarisé , où :
    • ;
    • ;
    • n'est pas définie sinon.
  4. On supprime la numérotation dans les transitions du graphe pour avoir l'automate final.

Automate de l'étape 3 :

start eps ε start->eps a1 a₁ eps->a1 a₁ b1 b₁ eps->b1 b₁ b3 b₃ eps->b3 b₃ a1->a1 a₁ a1->b1 b₁ a1->b3 b₃ a2 a₂ a2->a2 a₂ b2 b₂ a2->b2 b₂ a3 a₃ a3->a3 a₃ b1->a2 a₂ b1->b2 b₂ b2->a1 a₁ b2->b1 b₁ b2->b3 b₃ b3->a3 a₃

Automate de l'étape 4, sur lequel vous pouvez lire des mots :

Dessin de l'automate…

aba

1 / 4

État courant : ε

À noter qu'on obtient un automate non déterministe, qui contient autant d'états que de lettres dans l'expression régulière source, plus un (l'état initial ).

IV. Le lemme de l'étoile

Tous les langages ne sont pas rationnels. Pour le montrer, on utilise le fait qu'un automate a un nombre fini d'états : il ne peut retenir qu'une quantité limitée d'information.

Lemme de l'étoile

Soit un langage rationnel. Il existe un entier tel que tout mot de longueur s'écrit , avec :

  • ;
  • ;
  • pour tout , .
Preuve

Soit un automate déterministe qui reconnaît , et son nombre d'états. Soit avec . En lisant les premières lettres de , l'automate passe par états : d'après le principe des tiroirs, deux d'entre eux sont égaux, avec .

On pose , et la fin du mot. La lecture de fait une boucle de à : on peut la parcourir fois (y compris ), et on arrive toujours dans le même état après , qui est acceptant. Donc .

start q0 q₀ start->q0 qi qᵢ = qⱼ q0->qi x qi->qi y qf q_f qi->qf z

Application : le langage n'est pas rationnel.

Preuve

Supposons rationnel, et soit l'entier du lemme de l'étoile. Le mot est dans et de longueur : on peut l'écrire avec et . Comme , et ne contiennent que des : avec . Mais alors : contradiction.

Intuitivement, pour reconnaître , il faudrait "compter" les , sans limite : un automate fini ne le peut pas.

Le lemme de l'étoile donne une condition nécessaire pour qu'un langage soit rationnel, pas une condition suffisante : il sert uniquement à montrer qu'un langage n'est pas rationnel.

Exercices

Exercice 1

Construire un automate déterministe qui reconnaît les mots sur qui contiennent le facteur . Vous pourrez tester la réponse en y lisant des mots.

Trois états : 0 (on n'a pas vu , et la dernière lettre n'est pas un ), 1 (on n'a pas vu , et la dernière lettre est un ), 2 (on a vu , final).

Dessin de l'automate…

babaab

1 / 7

État courant : 0

Exercice 2

Déterminiser l'automate non déterministe suivant (états 0, 1, 2 ; initial 0 ; final 2), qui reconnaît les mots dont l'avant-dernière lettre est un : , , .

Parties accessibles : , , , . Les finals sont celles qui contiennent 2.

Dessin de l'automate…

abab

1 / 5

État courant : {0}

Exercice 3

Construire l'automate de Glushkov de l'expression .

Linéarisation : . Premiers : ; derniers : ; facteurs : .

Dessin de l'automate…

aaba

1 / 5

État courant : ε

Exercice 4

Montrer avec le lemme de l'étoile que le langage des palindromes sur n'est pas rationnel.

Soit l'entier du lemme, et , palindrome de longueur . On écrit avec et : avec . Alors n'est pas un palindrome : contradiction.