Ce chapitre est une tr`es succincte introduction `a la th´eorie des automates que vous aurez l’occasion de voir de fa¸con d´etaill´ee si vous choisissez un cursus d’informatique. Ce chapitre est, par nature, un peu plus “th´eorique” et un peu moins algorithmique que les pr´ec´edents.
Les automates sont des objets math´ematiques, tr`es utilis´es en informatique, qui permettent de mod´eliser un grand nombre de syst`emes (informatiques). L’´etude des automates a commenc´e vers la fin des ann´ees cinquante. Elle se base sur de nombreuses techniques (topologie, th´eorie des graphes, logique, alg`ebre, etc.). De fa¸con tr`es informelle, un automate est un ensemble “d’´etats du syst`eme”, reli´es entre eux par des “transitions” qui sont marqu´ees par des symboles. ´Etant donn´e un “mot” fourni en entr´ee, l’automate lit les symboles du mot un par un et va d’´etat en ´etat selon les transitions. Le mot lu est soit accept´e par l’automate soit rejet´e.
Avant de donner une d´efinition plus formelle des concepts d´ecrits ci-dessus, citons quelques exemples classiques d’utilisation d’automates :
V´erification d’un circuit ´electronique
Recherche d’occurrence dans un texte (moteur de recherches sur le web, etc.) V´erification de protocoles de communication
Compression de donn´ees Compilation
Biologie (g´enomique)
En dehors de ces utilisations “pratiques” des automates, notons qu’ils sont aussi utilis´es pour mod´eliser les ordinateurs et pour comprendre ce qu’un ordinateur peut faire (d´ecidabilit´e) et ce qu’il sait faire efficacement (complexit´e). C’est donc une notion fondamentale de l’informatique.
2
Rappel : alphabets, mots, langages et probl`emes
Nous reprenons ici les notations du chapitre VI. L’alphabet Σ est un ensemble de caract`eres (ou symboles). un mot est une suite finie de caract`eres. L’ensemble des mots sur Σ est not´e Σ∗. Un langage est un sous-ensemble de Σ∗, c’est-`a-dire un ensemble particulier de mots. Parmi les mots de Σ∗ on distingue le mot vide not´e ǫ. Le mot vide est l’unique mot de longueur z´ero.
3
Automates finis d´eterministes
Un automate fini d´eterministe est un quintupl´e (Q, Σ, δ, q0, F ) constitu´e des ´el´ements suivants un alphabet fini (Σ)
un ensemble fini d’´etats (Q)
une fonction de transition (δ : Q∗ Σ → Q) un ´etat de d´epart (q0 ∈ Q)
un ensemble d’´etats finaux (ou acceptant) F ⊆ Q
3.1 Fonctionnement d’un automate fini d´eterministe
L’automate prend en entr´ee un mot et l’accepte ou la rejette. On dit aussi qu’il le reconnaˆıt ou ne le reconnaˆıt pas. Le langage associ´e `a un automate est constitu´e de l’ensemble des mots qu’il reconnaˆıt. Voici comment l’automate proc`ede pour d´ecider si un mot appartient `a son langage.
Le processus commence `a l’´etat de d´epart q0
Les symboles du mot sont lus les uns apr`es les les autres.
`
A la lecture de chaque symbole, on emploie la fonction de transition δ pour se d´eplacer vers le prochain ´etat (en utilisant l’´etat actuel et le caract`ere qui vient d’ˆetre lu).
le mot est reconnu si et seulement si le dernier ´etat (i.e., l’´etat correspondant `a la lecture
du dernier caract`ere du mot) est un ´etat de F .
De fa¸con plus formelle, pour d´efinir exactement le langage reconnu par un automate, nous introduisons la fonction de transition ´etendue aux mots, ˆδ. Elle se d´efinit r´ecursivement comme suit.
A partir d’un ´etat q en lisant le mot vide ǫ on reste dans l’´etat q, i.e., ∀q ∈ Q, ˆδ(q, ǫ) = q
´
Etant donn´e un mot c se terminant par a∈ Σ (i.e., c = c′a avec c′ ∈ Σ ∪ {ǫ}), et un ´etat q de Q, ˆδ(q, c) = ˆδ(q, c′a) = δ(ˆδ(q, c′), a)
Nous pouvons maintenant d´efinir le langage L(A) accept´e par un automate fini d´eterministe A = (Q, Σ, δ, q0, F ).
L(A) ={c|ˆδ(q0, c)∈ F }
3.2 Des repr´esentation “compactes” des automates
On peut associer `a un automate une table de transition qui d´ecrit de mani`ere extensive la fonction de transition δ :
Une colonne correspond `a un caract`ere de l’alphabet.
Une ligne correspond `a un ´etat de l’automate (l’´etat initial est pr´ec´ed´e d’une fl`eche “→” ;
l’´etat final d’une ´etoile “∗”)
La valeur δ(q, a) pour q ∈ Q, a ∈ Σ correspond `a l’´etat indiqu´e `a l’intersection de la ligne q et de la colonne a. Notons qu’`a partir de cette table il est ais´e de retrouver l’ensemble des ´etats ainsi que l’alphabet et donc d’identifier exactement l’automate.
Exemple 1 Consid´erons la table de transition ci-dessous. a b → 1 1 2 ∗ 2 1 2 Il correspond `a l’automate (Q, Σ, δ, q0, F ) avec
Q ={1, 2} Σ ={a, b}
δ(1, a) = 1, δ(1, b) = 2, δ(2, a) = 1, δ(2, b) = 2 q0 = 1
F ={2}
Il est facile de voir que le langage de cet automate est constitu´e exactement des mots compos´es de a et de b qui se terminent par un b.
Pour repr´esenter de fa¸con tr`es intuitive un automate fini d´eterministe (Q, Σ, δ, q0, F ), on peut utiliser un graphe de transition constitu´e des ´el´ements suivants :
Un ensemble de sommets (chaque sommet repr´esente un ´el´ement de Q).
Un ensemble d’arcs entre les sommets valu´es par un symbole de σ (un arc entre les ´etats
q et q′ valu´e par le symbole s signifie que δ(q, s) = q′).
L’´etat initial q0 est marqu´e par une fl`eche entrante. Les ´etats finaux F sont entour´es d’une double ligne.
L’automate de l’exemple 1 est ainsi repr´esent´e sur la figure 1.
1
a 2 b
b
a
Fig. 1 – Un automate fini d´eterministe
Pour simplifier encore cette repr´esentation, un arc entre deux sommets q, q′ peut ˆetre valu´e par plusieurs symboles s1, ..., sns´epar´es par des virgules. Cette derni`ere convention signifie sim- plement que ∀i ≤ n, δ(q, si) = q′ et elle permet d’´eviter une multiplication d’arcs sur le graphe. La figure 2 illustre une telle simplification.
1 a 2 a b b 1 a 2 a, b b
Fig. 2 – Deux repr´esentations ´equivalentes du mˆeme automate fini
Exercice 1 Quel est le langage reconnu par l’automate de la figure 2 ? Solution. Tous les mots qui contiennent un “b”.
Exercice 2 ´Ecrire la table de transition de l’automate suivant. Quel est le langage reconnu ?
A 1 B 0 C 0, 1 0 1
Solution. La table de transition de l’automate est 0 1 → A B A
B B C
∗ C C C Cet automate reconnaˆıt les mots qui contiennent “01”.
δ 0 1 → ∗ q0 q2 q1 q1 q3 q0 q2 q0 q3 q3 q1 q2 Dessiner l’automate et montrer qu’il accepte “110101”.
Solution. q 0 q1 q2 q3 1 1 0 0 1 1 0 0
Exercice 4 Construire un automate fini d´eterministe qui reconnaˆıt le langage L ={x ∈ {0, 1}∗|n1(x)≡ 0 mod 4}
o`u n1(x) est le nombre d’occurrence du symbole 1 dans le mot x. Solution. A B C D 0 0 0 0 1 1 1 1
Exercice 5 Construire les automates finis d´eterministes qui reconnaissent les langages suivants L1={m ∈ (a + b)∗|chaque a de m est imm´ediatement pr´ec´ed´e et imm´ediatement suivi d’un b} L2={m ∈ (a + b)∗|m contienne `a la fois ab et ba}
L3={m ∈ (a + b)∗|m contienne exactement une occurrence de aaa}
4
Automates finis non-d´eterministes
Un automate fini non-d´eterministe est un automate tel que dans un ´etat donn´e, il peut y avoir plusieurs transitions avec le mˆeme symbole. le fonctionnement d’un tel automate n’est donc pas totalement (( d´etermin´e )), car on ne sait pas quel ´etat l’automate va choisir.
Les automates non-d´eterministes permettent de mod´eliser facilement des probl`emes com- plexes. Ils peuvent ˆetre convertis en des automates finis d´eterministe. Ces derniers peuvent ˆetre exponentiellement plus grand que les automates non d´eterministe dont ils sont issus.
Un automate fini non-d´eterministe est un quintupl´e : (Q, Σ, δ, q0, F ) un alphabet fini (Σ)
une fonction de transition δ qui associe `a tout ´etat q∈ Q et tout symbole s ∈ Σ un sous
ensemble de Q not´e δ(q, s).
un ´etat de d´epart (q0)
un ensemble d’´etats finaux (ou acceptant) F
C’est la fonction de transition δ qui diff`ere ici de celle utilis´ee par les automates finis d´eterministes. Remarquons que tout automate fini d´eterministe est aussi un automate fini non-d´eterministe.
Les repr´esentations compactes des automates finis d´eterministes s’´etendent naturellement aux automates finis non-d´eterministes. Une cellule de la table de transition contient un sous- ensemble d’´etats (´eventuellement vide).
4.1 Fonctionnement d’un automate fini non-d´eterministe
Comme pour un automate fini d´eterministe, l’automate prend en entr´ee un mot et l’accepte ou le rejette. Le langage associ´e est constitu´e de l’ensemble des mots qu’il reconnaˆıt.
Exemple 2 Voici automate qui reconnaˆıt les mots d´efinis sur l’alphabet {a, b, c} qui com- mencent par a et qui finissent par c.
q0 q1
a, b, c
q2
a c
La table associ´ee `a cet automate est alors :
a b c
→ q0 {q1} ∅ ∅ q1 {q1} {q1} {q1, q2}
∗ q2 ∅ ∅ ∅
Comme pour les automates d´eterministes, nous nous introduisons la fonction de transition ´etendue aux mots, ˆδ. Elle se d´efinit r´ecursivement comme suit.
A partir d’un ´etat q en lisant le mot vide ǫ (le mot vide ne contient aucun symbole et est
toujours not´e ǫ), on reste dans l’´etat q, i.e.,∀q ∈ Q, ˆδ(q, ǫ) = {q}
´
Etant donn´e un mot c se terminant par a∈ Σ (i.e., c = c′a avec c′ ∈ Σ ∪ {ǫ}), et un ´etat q de Q,
ˆ
δ(q, c) = ˆδ(q, c′a) = [ p∈ˆδ(q,c′)
δ(p, a)
Nous pouvons maintenant d´efinir le langage L(A) accept´e par un automate fini d´eterministe A = (Q, Σ, δ, q0, F ).
L(A) ={c|ˆδ(q0, c)∩ F 6= ∅}
Exercice 6 Construire l’automate fini non-d´eterministe associ´e `a la table ci-dessous.
a b → 0 {0, 1, 3} {2} 1 ∅ {3} 2 {3} ∅ ∗ 3 ∅ {1} Solution.
0 1 2 3 a a a b b a b
Exercice 7 Construire un automate fini non-d´eterministe qui reconnaˆıt les mots qui contiennent “church” ou “chomsky”. Solution. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Σ Σ Σ c h o m s k y c h u r c h
Exercice 8 Construire un automate finis non-d´eterministe qui reconnaˆıt les mots de l’alphabet {a, b} qui terminent par bab.
Solution.
0 1 2 3
a
b
b a b
Exercice 9 Construire un automate fini non-d´eterministe et un automate fini d´eterministe qui reconnaˆıt les mots sur l’alphabet{a, b, c} d´ecrits par l’expression r´eguli`ere (a+b+c)∗b(a + b + c). Exercice 10 Construire un automate fini non-d´eterministe qui reconnaˆıt les nombres dont le dernier chiffre n’apparaˆıt qu’une fois.
Exercice 11 Mod´elisation d’un jeu (d’apr`es la page de Jean-Eric Pin). Le joueur a les yeux band´es. Face `a lui, un plateau sur lequel sont dispos´es en carr´e quatre jetons, blancs d’un cˆot´e et noirs de l’autre. Le but du jeu est d’avoir les quatre jetons du cˆot´e blanc. Pour cela, le joueur peut retourner autant de jetons qu’il le souhaite, mais sans les d´eplacer. A chaque tour, le maˆıtre de jeu annonce si la configuration obtenue est gagnante ou pas, puis effectue une rotation du
plateau de z´ero, un, deux ou trois quarts de tours. La configuration de d´epart est inconnue du joueur, mais le maˆıtre de jeu annonce avant le d´ebut du jeu qu’elle n’est pas gagnante. Chaque annonce prend une seconde, et il faut 3 secondes au joueur pour retourner les jetons. Pouvez-vous aider le joueur `a gagner en moins d’une minute ?
4.2 D´eterminisation d’un automate fini non-d´eterministe
Un automate fini d´eterministe est aussi non-d´eterministe. Donc tout langage reconnu par un automate fini d´eterministe est reconnu par un automate fini non-d´eterministe. Plus surprenant, la r´eciproque est aussi vraie (Th´eor`eme de Rabin-Scott).
Consid´erons un automate fini non-d´eterministe An = (Qn, Σ, δn, q0, Fn) et construisons un automate fini d´eterministe Ad= (Qd, Σ, δd,{q0}, Fd) qui reconnaˆıt exactement le mˆeme langage.
Les alphabets de An et de Ad sont identiques.
Les ´etats de d´epart sont respectivement q0 et le singleton{q0}. Qdest constitu´e de tous les sous-ensembles de Qn.
Fd est l’ensemble des sous-ensembles de Qn qui contiennent au moins un ´el´ement de Fn. Etant donn´e un sous ensemble S de Q´ n et un symbole a ∈ Σ, on d´efinit la fonction de
transition δd(S, a) de la mani`ere suivante δd(S, a) =
[
q∈S
δn(q, a).
Nous illustrons le th´eor`eme de Rabin-Scott sur quelques exemples.
Exemple 3 reprenons l’exemple de l’exercice 8. Il s’agissait de construire un automate fini non-d´eterministe reconnaissant les mots de l’alphabet{a, b} qui terminent par bab. L’automate suivant r´epond `a la question.
0 1 2 3
a
b
b a b
Essayons maintenant de le d´eterminiser en construisant un nouvel ´etat `a partir de chaque sous ensemble d’´etat possible.
{0} {0, 1} {1, 3} {0, 1, 3} a b a b a b a b {1} {2} {3} {0, 2} {0, 3} {1, 2} {2, 3} {0, 1, 2} {1, 2, 3} {0, 2, 3}
Remarquons que les ´etats{1}, {2}, {3}, {0, 2}, {0, 3}, {1, 2}, {2, 3}, {0, 1, 2}, {1, 2, 3}, {0, 2, 3} sont inatteignables et peuvent ˆetre “retir´es” de l’automate.
En pratique, lors de la conversion, on ne cr´ee pas imm´ediatement tous les ´etats de l’automate fini d´eterministe. Les ´etats “utiles” sont cr´ees quand on en a besoin en suivant la m´ethode de construction ci-dessous :
Qdest initialis´e `a ∅ et soit E un ensemble d’´etats initialis´e `a E = {{q0}} Tant que E est non vide,
– choisir un ´el´ement S de E (S est donc un sous ensemble de Qn), – ajouter S `a Qd,
– pour tout symbole a∈ Σ, + calculer l’´etat S′ =S
q∈Sδn(q, a)
+ si S′ n’est pas d´ej`a dans Qd, l’ajouter `a E
+ ajouter un arc sur l’automate entre S et S′ et la valuer par a Exercice 12 D´eterminiser l’automate de l’exercice 7 (long).
4.3 Les ǫ transitions
Rappelons qu’ǫ repr´esente le mot vide. Une ǫ transition (not´ee ǫ sur l’arc d’un automate) permet de passer d’un ´etat `a l’autre d’un automate sans lire de symbole. Cette facilit´e permet de programmer facilement des automates complexes.
Une table de transition peut ˆetre associ´ee `a un automate contenant des ǫ transition. La table est identique `a celle utilis´ee pour un automate fini non-d´eterministe `a ceci pr`es qu’on la compl`ete d’une colonne associ´ee au caract`ere vide ǫ.
Exemple 4 Pour illustrer les ǫ transitions, construisons un automate fini non d´eterministe qui reconnaˆıt les nombres d´ecimaux. Rappelons qu’un nombre d´ecimal est un nombre r´eel qui est le quotient d’un entier relatif par une puissance de dix. Plus pr´ecis´ement, on souhaite pouvoir ´ecrire le nombre d´ecimal en commen¸cant par un “+” ou un “-’, suivi d’une suite de chiffres, d’une virgule et d’une suite de chiffres. Bien entendu, le “+” ou le “-” sont optionnels, la premi`ere chaˆıne de chiffres ne peut pas ˆetre vide et ne commence pas par “0” (sauf si le nombre d´ecimal est 0). La seconde chaˆıne ne se termine pas par “0”. Si seconde chaˆıne est vide, on omet la “,”.
A B C D E F ǫ, +,− 1,· · · , 9 0,· · · , 9 , 0,· · · , 9 1, 9 0
La transition de l’´etat A `a l’´etat B est r´egie par ǫ, +,−. Ainsi, on peut passer de A `a B soit en lisant +, soit en lisant − soit enfin en ne lisant rien.
La table de transition associ´ee `a cet automate est alors :
ǫ + − , 0 1 2 · · · 9 → A {B} {B} {B} ∅ ∅ ∅ ∅ · · · ∅ B ∅ ∅ ∅ ∅ {F } {C} {C} · · · {C} C ∅ ∅ ∅ {D} {C} ∅ ∅ · · · ∅ D ∅ ∅ ∅ ∅ {D} {D, E} {D, E} · · · {D, E} ∗ E ∅ ∅ ∅ ∅ ∅ ∅ ∅ · · · ∅ ∗ F ∅ ∅ ∅ ∅ ∅ ∅ ∅ · · · ∅
Exercice 13 On cherche `a construire un automate qui reconnaˆıt les mots qui se terminent par bab ou qui commencent par aba.
On sait construire un automate qui reconnaˆıt les mots qui se terminent par bab (exercice 8) :
0 1 2 3
a
b
b a b
il est facile de construire un automate qui reconnaˆıt les mots qui commencent par aba.
4 5 6 7
a, b
a b a
Il suffit alors d’assembler ces automates avec une simple ǫ transition.
0 1 2 3 a b b a b 4 5 6 7 a, b a b a i ǫ ǫ
L’introduction des ǫ transition ne change pas la nature des langages reconnus par les auto- mates. Comme pour les automates non-d´eterministes que l’on peut toujours d´eterminiser, il est toujours possible d’´eliminer les ǫ transition et d’obtenir un automate fini d´eterministe ´equivalent. Nous n’aborderons pas ici cette ´elimination.