Automate fini déterministe
# Automate fini déterministe

Un automate fini déterministe, parfois abrégé en AFD (en anglais deterministic finite automaton, abrégé en DFA) est un automate fini dont les transitions à partir de chaque état sont déterminées de façon unique par le symbole d'entrée. Un tel automate se distingue ainsi d'un automate fini non déterministe, où au contraire plusieurs possibilités de transitions peuvent exister simultanément pour un état et un symbole d'entrée donné.

Les automates finis déterministes ont plusieurs aspects avantageux : simplicité de leur définition, facilité de manipulation, aisance de la programmation informatique, élégance des propriétés mathématiques. Leur inconvénient majeur est la taille, mesurée en nombre d'états, qui peut dans certains cas être exponentielle par rapport à leur contre-part non déterministe. Les deux classes d'automates finis, les automates finis déterministes et non déterministes, ont la même puissance d'expression : elles reconnaissent la même famille de langages, à savoir les langages rationnels, appelés aussi langages réguliers ou langages reconnaissables.

## Langages formels

Un alphabet est, dans ce contexte, tout ensemble $\Sigma$ fini, non vide. Les éléments de $\Sigma$ sont appelés lettres.

Un mot est une suite finie d'éléments de $\Sigma$; la longueur d'un mot est le nombre d'éléments qui le composent. Un mot est noté par la juxtaposition de ses lettres. Ainsi, on écrit « oui » plutôt que « (o,u,i) ». Le mot vide, noté souvent $\varepsilon$, est l'unique mot de longueur zéro, composé d'aucune lettre. L'ensemble des mots sur $\Sigma$ est noté $\Sigma ^{*}$.

La concaténation de deux mots, notée $\cdot$ ou plus simplement par juxtaposition, est définie pour deux mots $u=a_{1}\cdots a_{n}$ et $v=b_{1}\cdots b_{n}$par $uv=a_{1}\cdots a_{n}b_{1}\cdots b_{n}$. On a $u\varepsilon =\varepsilon u=u$, la concaténation est associative : $u(vw)=(uv)w$, par conséquent $(\Sigma ^{*},\cdot )$ est un monoïde.

## Automate fini et automate fini déterministe

Un automate fini est un quintuplet ${\mathcal {A}}=\langle \Sigma ,Q,R,I,F\rangle$, où :

* $\Sigma$ est un alphabet,
* $Q$ est un ensemble fini, appelé ensemble des états,
* $R$ est une partie de $Q\times \Sigma \times Q$ appelée ensemble des transitions,
* $I$ est une partie de $Q$ appelée ensemble des états initiaux,
* $F$ est une partie de $Q$ appelée ensemble des états finaux.

Un automate est déterministe si, d'une part, il a un et un seul état initial et si, d'autre part, la relation $R$ est fonctionnelle au sens suivant :

    si $(p,a,q)\in R$ et $(p,a,q')\in R$, alors $q=q'$.

S'il en est ainsi, on définit une fonction, appelée fonction de transition et notée traditionnellement $\delta$, par :

    $\delta (p,a)=q$ si $(p,a,q)\in R$.

C'est une fonction partielle ; son domaine de définition est l'ensemble des couples $(p,a)\in Q\times \Sigma$ tel qu'il existe $q\in Q$ avec $(p,a,q)\in R$. Dans les manuels, on rencontre aussi la définition suivante d'un automate fini déterministe qui est directe et n’est pas dérivée d'une définition plus générale :

Un automate fini déterministe est un quintuplet ${\mathcal {A}}=\langle \Sigma ,Q,\delta ,q_{0},F\rangle$, où :

* $\Sigma$ est un alphabet,
* $Q$ est un ensemble fini, appelé ensemble d'états,
* $\delta$ est une fonction (partielle) de $Q\times \Sigma$ dans $Q$ appelée fonction de transitions,
* $q_{0}$ est un élément de $Q$ appelé état initial,
* $F$ est une partie de $Q$ appelée ensemble des états finaux.

La fonction de transition $\delta$ est étendue en une application (partielle) $Q\times \Sigma ^{*}\to Q$ en posant

* $\delta (q,\varepsilon )=q$ pour tout état $q$. Ici $\varepsilon$ dénote le mot vide.
* $\delta (q,wa)=\delta (\delta (q,w),a)$ pour tout état $q$, tout mot $w$ et toute lettre $a$.

On rencontre — notamment dans la littérature francophone — une notation élégante introduite pas Samuel Eilenberg dans son traité : la fonction de transition est notée par un simple point $\cdot$. Ainsi, au lieu d'écrire $\delta (q,w)$, on écrit $q\cdot w$. On a alors les formules :

* $q\cdot \varepsilon =q$;
* $q\cdot wa=(q\cdot w)\cdot a$.

Plus généralement, on a la formule

* $q\cdot uv=(q\cdot u)\cdot v$

pour des mots $u$ et $v$ qui se démontre traditionnellement par récurrence sur la longueur du mont $v$; le cas où $v$ est le mot vide ou est une lettre est vérifié par les formules précédent, et plus généralement, si $v=za$ pour une lettre $a$, on a

* $q\cdot uv=q\cdot uza=(q\cdot uz)\cdot a=((q\cdot u)\cdot z)\cdot a=(q\cdot u)\cdot za=(q\cdot u)\cdot v$.

Algébriquement, la dernière formule exprime que le monoïde libre $\Sigma ^{*}$ opère à droite sur l'ensemble d'états de l’automate.

## Représentation graphique

Un automate fini, déterministe ou non, est représenté par un graphe dont les sommets sont les états, et les arcs sont les transitions. C'est donc un graphe orienté, étiqueté aux arcs par des lettres de l’alphabet. Une symbolique spéciale distingue les états initiaux et terminaux : un état initial est marqué par une flèche entrante, un état terminal par une flèche sortante ou par un double cercle.

Une transition $(p,a,q)\in R$ est souvent écrite sous la forme $p{\overset {a}{\longrightarrow }}q$, empruntée à la représentation graphique. Un chemin est une suite de flèches consécutives, notée

    $q_{0}{\xrightarrow {a_{1}}}q_{1}{\xrightarrow {a_{2}}}q_{2}\rightarrow \cdots {\xrightarrow {a_{n}}}q_{n}$.

Sa longueur est le nombre $n$ de ses transitions, son étiquette (ou trace) est le mot $a_{1}a_{2}\cdots a_{n}$ formé des étiquettes de ses arcs.

On dit qu'un chemin est réussi lorsque $q_{0}\in I$ et $q_{k}\in F$. Un mot est reconnu lorsqu'il est l'étiquette d'un chemin réussi. Le langage accepté ou reconnu par l’automate est l’ensemble des mots qu'il reconnaît.

## Langage reconnu

Dans le cas d'un automate fini déterministe, il n'y a, pour un mot $w$ et pour un état $q$, au plus un chemin partant de $q$ et d'étiquette $w$; s'il existe, ce chemin a pour sommet d'arrivée $\delta (q,w)$. Dire qu'un mot $w$ est reconnu s'exprime donc par le fait que $\delta (q_{0},w)$ est un état final lorsque $q_{0}$ est l'état initial. En d'autres termes, le langage accepté ou reconnu par l’automate ${\mathcal {A}}$ est

    $L({\mathcal {A}})=\{w\in \Sigma ^{*}\mid \delta (q_{0},w)\in F\}$.

Avec la notation par point, cette expression s'écrit

    $L({\mathcal {A}})=\{w\in \Sigma ^{*}\mid q_{0}\cdot w\in F\}$.

Si on utilise la notation par point, on omet le symbole $\delta$ dans la définition de l’automate.

## Exemple

Table de transitions :

| | a | b |
| - | - | - |
| 1 | 2 | - |
| 2 | - | 3 |
| 3 | 3 | 3 |

L'automate ci-contre est composé de trois états; l'état 1 est le seul état initial, distingué par une flèche entrante, l'état 3 est le seul état terminal, distingué par une flèche sortante. C'est un automate déterministe. Il reconnaît les mots, sur deux lettres a et b, qui commencent par ab. La fonction de transition est donnée par sa table de transitions. L'absence de flèche est représentée par un tiret : la présence d'un tiret montre que la fonction de transition est partielle.

## Propriétés

### Accessibilité

Un état $q\in Q$ est dit :

* accessible s'il existe un chemin partant d'un état initial et allant jusqu'à $q$ ;
* coaccessible s'il existe un chemin partant de l'état $q$ et allant jusqu'à un état final.

Un automate est dit :

* accessible si tous ses états sont accessibles ;
* coaccessible si tous ses états sont coaccessibles ;
* émondé s'il est à la fois accessible et coaccessible.

Une fois l'automate rendu accessible, on peut tester si le langage reconnu est vide ou non : pour qu'il soit vide, il faut et il suffit qu'aucun état final ne soit accessible.

### Complétude

Un automate est complet s'il possède au moins un état initial et si, pour chaque état et pour chaque lettre, il existe au moins une flèche sortante, c’est-à-dire si, pour tout état $p$ et toute lettre $a$, il existe un état $q$ tel que $p{\xrightarrow {a}}q$. On reconnaît la complétude sur la table de transition d'un automate déterministe par le fait qu'aucune case du tableau n'est vide.

### Émondage et complétion

Étant donné un automate fini déterministe (les mêmes algorithmes s'appliquent aux automates non déterministes) ${\mathcal {A}}=\langle \Sigma ,Q,\delta ,q_{0},F\rangle$, les algorithmes de parcours usuels en théorie des graphes permettent d'émonder et de compléter un automate :

* on détermine les états accessibles par un calcul des descendants de l’état initial, donc par un parcours du graphe à partir du sommet qui est l'état initial; un algorithme linéaire en $|Q|\times |\Sigma |$ permet de les calculer. Le graphe de l’automate, et sa fonction de transition, est alors réduit aux sommets accessibles;
* on détermine ensuite les sommets coaccessibles par un calcul des ascendants des sommets terminaux. Les mêmes algorithmes de parcours permettent de réaliser cette opération en temps linéaire;
* la complétion d'un automate, s'il est incomplet, se fait par l’adjonction d'un nouvel état, disons $s$ (souvent appelé « état puits », « sink state » en anglais) forcément non final. La fonction de transition $\delta$ est étendu en $\Delta$ posant
   * $\Delta (q,a)=s$ si $\delta (q,a)$ est indéfinie;
   * $\Delta (s,a)=s$ pour toute lettre $a$.

### Opérations booléennes

Pour ces opérations, on considère un automate déterministe et complet : la fonction de transition sera représentée par un point.

**Complémentation**

Soit ${\mathcal {A}}=\langle \Sigma ,Q,q_{0},F\rangle$ un automate fini déterministe et complet et soit $L=L({\mathcal {A}})$ le langage reconnu par ${\mathcal {A}}$. Le langage complémentaire ${\bar {L}}=\Sigma ^{*}\setminus L$ est reconnu par le même automate, où on a échangé les états terminaux et non terminaux, soit par l'automate ${\bar {\mathcal {A}}}=\langle \Sigma ,Q,q_{0},Q\setminus F\rangle$.

**Produit direct d'automates**

Soient ${\mathcal {A}}=\langle \Sigma ,Q,q_{0},F\rangle$ et Soit ${\mathcal {B}}=\langle \Sigma ,P,p_{0},G\rangle$ deux automates finis déterministes complets, reconnaissant des langages notées respectivement L et M. Le produit direct des deux automates est l’automate

    ${\mathcal {C}}={\mathcal {A}}\times {\mathcal {B}}=\langle \Sigma ,Q\times P,(q_{0},p_{0}),H\rangle$

avec la fonction de transition définie par

    $(q,p)\cdot a=(q\cdot a,p\cdot a)$.

Cette fonction s'étend aux mots et on a

    $(q,p)\cdot w=(q\cdot w,p\cdot w)$

et $H=F\times G$. Comme

    $(q_{0},p_{0})\cdot w\in H\iff q_{0}\cdot w\in F,p_{0}\cdot w\in G$

le langage reconnu par ${\mathcal {C}}$ est l’intersection des langages $L$ et $M$. C'est pourquoi on rencontre aussi la notation ${\mathcal {A}}\cap {\mathcal {B}}$ à la place ${\mathcal {A}}\times {\mathcal {B}}$

**Union, intersection, complément relatif**

On peut modifier la définition du produit direct en choisissant d'autres états terminaux. Ainsi, selon l'ensemble d'états terminaux $H$ choisi, l'automate ${\mathcal {C}}$ reconnait la réunion $L\cup M$ ou $L\cap M$. Le langage réunion $L\cup M$ est reconnu pour $H=F\times P\cup Q\times G$, le langage $L\setminus M=L\cap (A^{*}\setminus M)$, complément de $M$ dans $L$ est reconnu avec $H=F\times (P\setminus G)$.

**Inclusion et équivalence**

L'inclusion $L\subset M$ est donc facilement testable : il suffit de tester si $L\setminus M$ est vide. De même, l'équivalence des automates, donc la question si $L$ et $M$ sont égaux, est facile à tester puisqu'elle se ramène à deux inclusions.

## Complexité des opérations booléennes

La complexité d’un langage rationnel L peut se mesurer de diverses façons ; dans le cadre des automates finis déterministes, il est nature de la définir comme le nombre d’états de l’automate déterministe complet minimal reconnaissant ce langage. Par le théorème de Myhill-Nerode, c'est aussi le nombre de résiduels ou quotients gauches du langage. On note ce nombre $\kappa (L)$ avec Brzozowski.

La complexité d'une opération binaire $\odot$ sur des langages L et M est notée $\kappa (L\odot M)$. C'est une fonction de $\kappa (L)$ et de $\kappa (M)$. Les opérations booléennes et leurs composées à considérer sont notamment

* complémentation ${\overline {L}}$
* union $L\cup M$
* intersection $L\cap M$
* différence symétrique $L\oplus M$
* différence $L\setminus M$

On a par exemple $\kappa ({\overline {L}})=\kappa (L)$ puisque les automates minimaux ne diffèrent que par les états terminaux dont les ensembles sont complémentaire. La complexité d’autres opérations peut s’en déduire, par exemple :

    $\kappa ({\overline {L}}\cup M)=\kappa ({\overline {{\bar {L}}\cup M}})=\kappa (L\cap {\overline {M}})=\kappa (L\setminus M)$.

Quand on évalue la complexité des opérations, il faut préciser si les langages sont donnés sur le même alphabet ou non. Soient L et M deux langages rationnels de complexité $\kappa (L)=m$ et $\kappa (M)=n$ respectivement, pas nécessairement sur le même alphabet. Les résultats sont les suivants :

* La complexité de l’union et de la différence symétrique de L et M est au plus $(m+1)(n+1)$ La complexité de l’union de langages L et M sur le même alphabet est au plus mn.
* La complexité de la différence est au plus $(m+1)n$.
* La complexité de l’intersection est au plus $mn$.
* La complexité du produit LM est au plus $m2^{n}-2^{n-1}$.

Toutes ces bornes peuvent être atteintes. Pour illustrer l'importance de l'alphabet, on considère les langages $L=a^{*}$ et $M=b^{*}$ formés des mots sur une seule lettre $a$ respectivement $b$, avec $a\neq b$. Chacun des deux langages est reconnu par un automate à un seul état. La réunion $a^{*}\cup b^{*}$ est de complexité 4=(1+1)(1+1). Si les langages $L=a^{*}$ et $M=b^{*}$ sont considérés comme étant l'un et l'autre sur l'alphabet $\{a,b\}$, leurs automates minimaux ont chacun 2 états et l'automate de leur union a bien $4=2\cdot 2$ états.

## Produit et étoile

Les algorithmes pour le calcul de l'automate reconnaissant le produit ou l’étoile d'un langage décrits pour les automates non déterministes sont bien entendu applicables aussi quand on part d'un automate déterministe, mais le résultat est un automate non déterministe, et même avec des ε-transitions. Autant le non déterminisme ne s'élimine que dans une deuxième étape, autant on peut, avec un peu de soin, éviter l'introduction des ε-transitions dont l'élimination ultérieure constitue une phase supplémentaire dans la construction.

### Automate pour le produit

Soient ${\mathcal {A}}=\langle \Sigma ,Q,q_{0},F\rangle$ et ${\mathcal {B}}=\langle \Sigma ,P,p_{0},T\rangle$ deux automates finis déterministes reconnaissant des langages $L$ et $M$ respectivement. Un automate non déterministe ${\mathcal {C}}$ reconnaissant le langage produit $LM$ est défini comme suit : l'ensemble de ses états est $Q\cup P$ (on suppose ces deux ensembles disjoints), l'état initial est $q_{0}$ (l'état initial de ${\mathcal {A}}$, l'ensemble des états terminaux est $T$ (états terminaux de ${\mathcal {B}}$). Les transitions sont celles définies par les fonctions de transitions de ${\mathcal {A}}$ et ${\mathcal {B}}$, avec en plus des transitions $(q,a,p_{0})$ pour toute paire $(q,a)$ formée d'un état de ${\mathcal {A}}$ et d'une lettre telle que $q\cdot a\in F$. Ainsi, chaque fois que l’automate ${\mathcal {A}}$ arrive dans un état qui peut déboucher sur in de ses états finaux, la transition ajoutée permet aussi d'anticiper le début d'un calcul dans l’automate ${\mathcal {B}}$.

### Automate pour l'étoile

La construction est analogue. Partant d'un automate ${\mathcal {A}}=\langle \Sigma ,Q,q_{0},F\rangle$, on construit un automate

    ${\mathcal {B}}=\langle \Sigma ,Q\cup p_{0},p_{0},F\cup p_{0}\rangle$,

où $p_{0}$ est un nouvel état qui est son état initial et aussi un état final. La fonction de transition de ${\mathcal {A}}$ est étendue à $p_{0}$ par

    $p_{0}\cdot a=q_{0}\cdot a$ pour toute lettre $a$;

de plus, on ajoute les transitions $(q,a,q_{0})$ pour quand $q\cdot a\in F$, et la transition $(p_{0},a,q_{0})$ si $q_{0}\cdot a\in F$.

## Automate minimal

Deux automates finis déterministes sont équivalents s'ils reconnaissent le même langage. C'est un résultat remarquable de la théorie qu'il existe, pour tout automate fini, un seul automate fini déterministe minimal (c'est-à-dire ayant un nombre minimal d'état) qui est équivalent à l'automate donné. De plus, cet automate, appelé automate minimal, possède une description algébrique simple et élégante. Par ailleurs, l'automate se calcule efficacement par l'algorithme de Moore ou l'algorithme de Hopcroft. L'unicité de l'automate ayant un nombre minimal d'état n'est plus vraie pour les automates non déterministes.

### Définition algébrique

Soit $L$ un langage formel sur un alphabet fini $A$. Pour tout mot $x$, le quotient gauche ou résiduel de $L$ par $x$ de $L$ par $x$, est l'ensemble noté $x^{-1}L$ et défini par

    $x^{-1}L=\{z\in A^{*}\mid xz\in L\}$.

On a

    $\varepsilon ^{-1}L=L$ et $(xy)^{-1}L=y^{-1}(x^{-1}L)$

pour tout $x,y$.

L'automate fini déterministe minimal reconnaissant $L$, aussi appelé automate des quotients et noté parfois ${\mathcal {A}}(L)$, est défini comme suit :

* son ensemble d'états est l'ensemble $\{x^{-1}L\mid x\in A^{*}\}$ des quotients gauche de $L$ ;
* son état initial est $i_{L}=\varepsilon ^{-1}L=L$ ;
* les états terminaux $T_{L}$ sont les états contenant le mot vide ;
* la fonction de transition est définie, pour tout état $M$ et $a\in A$ par $M\cdot a=a^{-1}M$.

On a $M\cdot x=x^{-1}M$ pour tout mot $x$. Il en résulte que

    $i_{L}\cdot x\in T_{L}\iff x^{-1}L\in T_{L}\iff \varepsilon \in x^{-1}L\iff x\in L$.

Ceci prouve que l'automate ${\mathcal {A}}(L)$, reconnaît bien le langage $L$.

### Relation de Myhill-Nerode et résiduels

On définit une relation $\sim _{L}$ sur le mots, appelée relation de Myhill-Nerode, par la règle : $x\sim _{L}y$ si et seulement si $x^{-1}L=y^{-1}L$. inséparables. La relation $\sim _{L}$ est une relation d'équivalence sur les mots, et donc partitionne l'ensemble de tous les mots en classes d'équivalences. Les classes de l'équivalence de Myhill-Nerode sont donc en bijection avec les résiduels de $L$. Il en résulte qu'un langage est rationnel si et seulement si l'ensemble de ses résiduels est fini.

### Minimalité

La minimalité de l'automate ${\mathcal {A}}(L)$ peut être établie de plusieurs façons équivalentes. Soit ${\mathcal {A}}=(Q,i,T)$ un automate déterministe complet accessible reconnaissant le langage $L$. Pour tout état $q$, on note $L_{q}=\{w\in A^{*}\mid q\cdot w\in T\}$. C'est donc l'ensemble des mots w qui étiquettent un chemin de q vers un état final. Soit $x$ un mot tel que $i\cdot x=q$. Un tel mot existe parce que tout état de l'automate est accessible. On a alors $L_{q}=x^{-1}L$ puisque

    $w\in L_{q}\iff q\cdot w\in T\iff i\cdot x\cdot w\in T=\iff i\cdot xw\in T\iff xw\in L\iff w\in x^{-1}L$.

En d'autres termes, les états de tout automate ${\mathcal {A}}$ déterministe complet accessible reconnaissant le langage $L$ s'identifient aux quotients gauches, deux états qui sont équivalents dans l'automate ${\mathcal {A}}$ sont les mêmes dans l'automate minimal.

### Morphisme d'automates

Selon le degré de généralité recherché, il y a des variations dans la définition d'un morphisme d'automate. Soient ${\mathcal {A}}=(Q,i,T)$ et ${\mathcal {A'}}=(Q',i',T')$ deux automates finis déterministes accessibles et complets. Un morphisme de ${\mathcal {A}}$ dans ${\mathcal {A'}}$ est une application $f:Q\to Q'$ telle que :

* $f(i)=i'$
* $f(q\cdot a)=f(q)\cdot a$, pour tout lettre $a$,
* $f(T)\subset T'$.

La deuxième propriété s'étend aux mots par récurrence : on a $f(q\cdot x)=f(q)\cdot x$ pour tout mot $x$. Le langage $L({\mathcal {A}})$ reconnu par ${\mathcal {A}}$ est contenu dans le langage $L({\mathcal {A'}})$ reconnu par ${\mathcal {A'}}$ puisque pour un mot $x$ de $L({\mathcal {A}})$, on a $i\cdot x\in T$, et $f(i\cdot x)=f(i)\cdot x=i'\cdot x\in T'$.

Si de plus $f(T)=T'$, on dit que le morphisme est surjectif, et alors $L({\mathcal {A}})=L({\mathcal {A'}})$ ; en effet, soit $x\in L({\mathcal {A'}})$, et soit $t'\in T'$ l'état terminal tel que $i'\cdot x=t'$. Soit $t\in Q$ l'état tel que $i\cdot x=t$. Alors $f(t)=t'$, et donc $t\in T$.

Soit maintenant ${\mathcal {A}}=(Q,i,T)$ un automate reconnaissant un langage $L=L({\mathcal {A}})$ et soit ${\mathcal {A}}(L)$ l'automate minimal de $L$ défini ci-dessus. On définit un morphisme d'automate

    $f:{\mathcal {A}}\to {\mathcal {A}}(L)$

comme suit : pour tout état $q\in Q$, soit $w$ un mot tel que $i\cdot w=q$. Alors

    $f(q)=w^{-1}L$.

La définition est indépendante du mot $w$ choisi, et c'est bien un morphisme surjectif.

Il résulte de cette construction que

* l'automate minimal, image homomorphe de tout automate équivalent, a bien le plus petit nombre possible d'états;
* l'automate minimal est unique à un renommage des états près puis qu'étant donné deux tels automates, il existe un morphisme de l’un sur l'autre, donc un isomorphisme entre les deux.

Cette propriété remarquable des automates finis déterministes n'est plus vraie pour des automates finis non déterministes.

