Aller au contenu principal

Automate minimal et minimisation

Nous avons vu au chapitre précédent que tout langage régulier est accepté par un automate fini déterministe. Cependant, il n'y a pas un unique automate fini (déterministe) qui accepte un langage régulier donné.

Comment comparer deux automates finis ? Par exemple, comment décider que les deux AFD de la figure suivante acceptent le même langage ? Nous avons vu au chapitre 2 comment calculer une expression régulière pour le langage accepté par un automate fini. Mais il n'y a pas de représentation canonique d'un langage régulier par une expression régulière, et la comparaison d'expressions régulières est au moins aussi difficile que la comparaison d'automates finis.

Deux AFD acceptant les encodages binaires des entiers naturels pairs

Deux AFD acceptant les encodages binaires des entiers naturels pairs.

Nous avons également vu aux chapitres 1 et 2 qu'un automate fini est un algorithme pour résoudre les problèmes de décision représentés par des langages réguliers. Pour un problème de décision régulier donné, il existe une infinité d'automates finis qui l'acceptent. D'un point de vue pratique, il est pourtant important de choisir un petit automate, c'est-à-dire un algorithme avec aussi peu d'instructions que possible.

Tout d'abord, nous montrons qu'il existe un automate minimal unique (à renommage des états près) pour chaque langage régulier. Ceci va nous permettre de parler de représentation canonique des langages réguliers, ou encore d'algorithmes minimaux pour les problèmes de décision réguliers. Puis nous présentons un algorithme qui calcule, à partir d'un automate fini déterministe AA donné, l'automate minimal qui accepte L(A)\mathcal{L}(A).

Représentation canonique des langages réguliers​

Congruence associée à un langage​

Nous montrons maintenant que l'existence d'une représentation canonique pour les langages réguliers est une propriété intrinsèque à ces langages.

Soit LL un langage sur Σ\Sigma. Deux mots ww et w′w' sont congrus (à droite) modulo LL, noté w∼Lw′w \sim_L w', si pour tout mot x∈Σ∗x \in \Sigma^\ast, w.x∈Lw.x \in L si et seulement si w′.x∈Lw'.x \in L. ww et w′w' sont dits indistinguables pour LL. La relation ∼L\sim_L est une relation d'équivalence, compatible avec la concaténation à droite (w∼Lw′w \sim_L w' implique w.s∼Lw′.sw.s \sim_L w'.s). Nous notons [w]∼L={w′∣w∼Lw′}[w]_{\sim_L} = \{w' \mid w \sim_L w'\} la classe d'équivalence de ww pour ∼L\sim_L.

Intuitivement, si deux mots uu et vv ne sont pas congrus modulo LL, alors il existe un mot xx tel que u.x∈Lu.x \in L et v.x∉Lv.x \notin L (ou inversement). Ainsi, un automate fini qui accepte LL doit, lorsqu'il lit u.xu.x, mémoriser une information suffisante pour ne pas confondre uu et vv, et in fine accepter u.xu.x. A contrario, si uu et vv sont congrus modulo LL, un automate fini qui accepte LL n'est plus obligé de distinguer uu et vv puisque u.xu.x et v.xv.x conduisent au même verdict. Un automate fini mémorise l'information au moyen de ses états. Ainsi, dans le cas où uu et vv ne sont pas congrus modulo LL, afin de distinguer uu et vv, la lecture de ces mots doit conduire l'automate dans deux états distincts. Et inversement, lorsque uu et vv sont congrus modulo LL, leur lecture peut conduire dans le même état puisqu'il n'est pas nécessaire de les distinguer. Sachant qu'un automate fini possède un nombre fini d'états, et que tout langage régulier est accepté par un automate fini, nous pouvons en déduire une nouvelle caractérisation des langages réguliers.

Soit A=(Q,Σ,δ,I,F)A=(Q,\Sigma,\delta,I,F) un automate fini. Le langage de l'état q∈Qq \in Q est défini par :

L(A,q)={w∈Σ∗∣q→wq′  avec  q′∈F}\mathcal{L}(A,q)=\{w \in \Sigma^\ast \mid q \stackrel{w}{\rightarrow} q' \; \text{avec} \; q' \in F\}

Le co-langage de l'état q∈Qq \in Q est défini par :

coL(A,q)={w∈Σ∗∣∃q0∈I,q0→wq}co\mathcal{L}(A,q)=\{w \in \Sigma^\ast \mid \exists q_0 \in I, q_0 \stackrel{w}{\rightarrow} q\}

Théorème (congruence à droite et régularité, Myhill-Nerode)​

Un langage LL est régulier si et seulement si la congruence ∼L\sim_L est d'index fini (elle possède un nombre fini de classes d'équivalence).

Automate minimal​

Nous nous intéressons maintenant à une notion d'automate minimal reconnaissant un langage régulier donné. Nous montrons que chaque état de cet automate correspond à une des classes d'équivalence de ∼L\sim_L. Ses transitions correspondent au passage d'une classe à l'autre : depuis la classe d'équivalence de ww, la lecture d'un symbole ss conduit à la classe d'équivalence de w.sw.s.

Soit LL un langage régulier sur un alphabet Σ\Sigma. L'automate fini minimal afmin(L)=(Q,Σ,δ,q0,F)afmin(L)=(Q,\Sigma,\delta,q_0,F) qui accepte LL est défini par :

  • Q={[w]∼L∣w∈Σ∗}Q=\{[w]_{\sim_L} \mid w \in \Sigma^\ast\}
  • δ={([w]∼L,s,[w.s]∼L)∣w∈Σ∗,s∈Σ}\delta=\{([w]_{\sim_L},s,[w.s]_{\sim_L}) \mid w \in \Sigma^\ast, s \in \Sigma\}
  • q0=[ϵ]∼Lq_0=[\epsilon]_{\sim_L}
  • F={[w]∼L∣w∈Σ∗  et  [w]∼L⊆L}F=\{[w]_{\sim_L} \mid w \in \Sigma^\ast \; \text{et} \; [w]_{\sim_L}\subseteq L\}

Notons que afmin(L)afmin(L) est un automate déterministe et complet.

Théorème​

Pour tout langage régulier LL, afmin(L)afmin(L) est le plus petit automate fini déterministe et complet tel que L(afmin(L))=L\mathcal{L}(afmin(L))=L. Il est unique à renommage des états près.

Minimisation des automates finis​

La définition d'un automate minimal nous permet de prouver l'existence et l'unicité de l'automate minimal qui accepte un langage LL donné. Cependant, elle ne permet pas de construire afmin(L)afmin(L) : il faudrait énumérer tous les mots de Σ∗\Sigma^\ast pour connaître l'ensemble de ses états. Nous présentons maintenant un algorithme qui permet de calculer afmin(L)afmin(L) à partir d'un automate AA connu qui accepte LL.

Soit A=(Q,Σ,δ,q0,F)A=(Q,\Sigma,\delta,q_0,F) un AFD supposé non minimal. Nous pouvons maintenant caractériser la non-minimalité en considérant les langages acceptés depuis chacun des états de AA. Deux états q,q′∈Qq,q' \in Q sont dits équivalents si L(A,q)=L(A,q′)\mathcal{L}(A,q)=\mathcal{L}(A,q'). On note ≡Q\equiv_Q la relation d'équivalence ainsi définie.

L'équivalence entre états doit être rapprochée de la congruence de L(A)\mathcal{L}(A). En effet, supposons que q0→wqq_0 \stackrel{w}{\rightarrow} q et q0→w′q′q_0 \stackrel{w'}{\rightarrow} q' pour deux mots w,w′∈Σ∗w,w' \in \Sigma^\ast et que q≡Qq′q \equiv_Q q'. Alors, puisque L(A,q)=L(A,q′)\mathcal{L}(A,q) = \mathcal{L}(A,q'), pour tout mot x∈Σ∗x \in \Sigma^\ast, w.xw.x est accepté par AA si et seulement si w′.xw'.x est accepté par AA. Il vient alors w∼L(A)w′w \sim_{\mathcal{L}(A)}w'. L'équivalence entre ≡Q\equiv_Q et ∼L(A)\sim_{\mathcal{L}(A)} est prouvée plus loin. Un automate fini déterministe et complet AA n'est donc pas minimal si et seulement si :

  • il possède (au moins) un état inaccessible : il existe q∈Qq\in Q tel que pour tout w∈Σ∗w \in \Sigma^\ast, q0↛wqq_0 \stackrel{w}{\nrightarrow} q ;
  • ou il possède deux états distincts q,q′∈Qq,q' \in Q qui sont équivalents : L(A,q)=L(A,q′)\mathcal{L}(A,q)=\mathcal{L}(A,q').

L'algorithme de minimisation d'un automate AA procède donc en deux étapes : tout d'abord la suppression des états inaccessibles de AA, puis la fusion de ses états équivalents.

Automate fini déterministe et sa partie accessible

Automate fini déterministe et sa partie accessible.

Élimination des états inaccessibles​

L'ensemble des états accessibles d'un automate fini A=(Q,Σ,δ,I,F)A=(Q,\Sigma,\delta,I,F) est défini par :

access(A)={q∈Q∣∃q0∈I,∃w∈Σ∗,q0→wq}access(A)=\{q \in Q \mid \exists q_0 \in I, \exists w \in \Sigma^\ast, q_0 \stackrel{w}{\rightarrow} q\}

Intuitivement, les états accessibles d'un automate fini A=(Q,Σ,δ,I,F)A=(Q,\Sigma,\delta,I,F) sont les états qq pour lesquels il existe une séquence de transitions partant d'un état initial et menant jusqu'à qq.

La restriction d'un automate fini A=(Q,Σ,δ,I,F)A=(Q,\Sigma,\delta,I,F) à sa partie accessible est l'automate fini eqacc(A)=(Q′,Σ,δ′,I,F′)eqacc(A)=(Q',\Sigma,\delta',I,F') défini par :

  • premièrement Q′=access(A)Q'=access(A) ;
  • de plus δ′=δ∩(Q′×Σ×Q′)\delta'=\delta \cap (Q' \times \Sigma \times Q') ;
  • et F′=F∩Q′F'=F \cap Q'.

Remarquons que si AA est déterministe (resp. complet), alors eqacc(A)eqacc(A) est déterministe (resp. complet).

La suppression des états inaccessibles d'un automate fini ne modifie pas le langage accepté par celui-ci. Cela vient du fait que, par définition, aucun état inaccessible ne peut être rencontré sur une exécution (acceptante) de l'automate.

Théorème​

Pour tout automate fini AA, L(eqacc(A))=L(A)\mathcal{L}(eqacc(A))=\mathcal{L}(A).

Le calcul de access(A)access(A) correspond au plus petit point fixe contenant les états initiaux II de la fonction Acc:X↦X∪{q′∈Q∣∃q∈X,∃s∈Σ,(q,s,q′)∈δ}Acc : X \mapsto X \cup \{q' \in Q \mid \exists q \in X, \exists s \in \Sigma, (q,s,q') \in \delta \}. On peut le calculer par itérations successives :

Acc(0)=IAcc(n+1)=Acc(n)∪{q′∈Q∣∃q∈Acc(n),∃s∈Σ,(q,s,q′)∈δ}\begin{aligned} Acc(0) &= I \\ Acc(n+1) &= Acc(n) \cup \{q' \in Q \mid \exists q \in Acc(n), \exists s \in \Sigma, (q,s,q') \in \delta\} \end{aligned}

Intuitivement, Acc(n)Acc(n) est l'ensemble des états pour lesquels il existe une séquence d'au plus nn transitions menant d'un état initial jusqu'à eux. Nous calculons donc successivement Acc(0)Acc(0), puis Acc(1)Acc(1) en utilisant Acc(0)Acc(0), puis Acc(2)Acc(2) à partir de Acc(1)Acc(1), et ainsi de suite jusqu'au point fixe obtenu lorsque Acc(n)=Acc(n−1)Acc(n)=Acc(n-1) pour une valeur donnée de nn. L'algorithme EtatsAccessibles calcule le plus petit point fixe de AccAcc.

Entrée : Un automate fini A=(Q,Σ,δ,I,F)
Sortie : access(A) l'ensemble des états accessibles de A

EtatsAccessibles(A):
debut
Acc <- I
Acc' <- ∅
tant que (Acc != Acc') faire
Acc' <- Acc
Acc <- Acc' ∪ {q' ∈ Q | ∃ q ∈ Acc', ∃ s ∈ Σ, (q,s,q') ∈ δ}
fin tant que

retourner Acc
fin

Théorème​

Pour tout automate A=(Q,Σ,δ,I,F)A=(Q,\Sigma,\delta,I,F), l'algorithme EtatsAccessibles calcule access(A)access(A) en au plus Card(Q)Card(Q) itérations de la boucle (chaque itération qui ne termine pas ajoute au moins un état), soit un temps O(Card(Q)×Card(δ))\mathcal{O}(Card(Q) \times Card(\delta)) pour cette version naïve. Un parcours en largeur depuis II ramène ce coût à O(Card(Q)+Card(δ))\mathcal{O}(Card(Q) + Card(\delta)).

Fusion des états équivalents​

Nous considérons maintenant des automates finis déterministes et complets, sans états inaccessibles. Nous avons vu au chapitre 5 comment déterminiser tout AFN. Tout automate peut être rendu complet par la procédure de complétion vue au chapitre 1. Enfin, la section précédente décrit comment calculer l'ensemble des états accessibles d'un automate fini, puis comment le restreindre à sa partie accessible.

Il nous reste maintenant à fusionner les états équivalents de l'automate AA, c'est-à-dire les états qq et q′q' tels que L(A,q)=L(A,q′)\mathcal{L}(A,q)=\mathcal{L}(A,q'). Pour cela, il faut donc calculer quels états de AA acceptent le même langage, c'est-à-dire la relation ≡Q\equiv_Q.

Une fois connue la relation ≡Q\equiv_Q, nous pouvons définir l'automate fini minimal qui accepte le même langage que l'automate AA donné.

Soit A=(Q,Σ,δ,q0,F)A=(Q,\Sigma,\delta,q_0,F) un automate fini déterministe, complet et sans états inaccessibles. L'automate minimal équivalent à AA est eqmin(A)=(Q′,Σ,δ′,q0′,F′)eqmin(A)=(Q',\Sigma,\delta',q'_0,F') défini par :

  • Q′={[q]≡Q∣q∈Q}Q'=\{[q]_{\equiv_Q} \mid q \in Q\}
  • δ′={([q]≡Q,s,[q′]≡Q)∣(q,s,q′)∈δ}\delta'=\{([q]_{\equiv_Q},s,[q']_{\equiv_Q}) \mid (q,s,q') \in \delta\}
  • q0′=[q0]≡Qq'_0=[q_0]_{\equiv_Q}
  • F′={[q]≡Q∣q∈F}F'=\{[q]_{\equiv_Q} \mid q \in F\}

Nous montrons maintenant que l'automate minimal équivalent à AA correspond à afmin(L(A))afmin(\mathcal{L}(A)), l'automate minimal qui accepte le langage accepté par AA.

Théorème​

Pour tout automate fini A=(Q,Σ,δ,q0,F)A=(Q,\Sigma,\delta,q_0,F) déterministe, complet et sans états inaccessibles, eqmin(A)=afmin(L(A))eqmin(A)=afmin(\mathcal{L}(A)) (à renommage des états près).

Les relations ∼L\sim_L et ≡Q\equiv_Q sont équivalentes pour A=(Q,Σ,δ,q0,F)A=(Q,\Sigma,\delta,q_0,F) tel que L(A)=L\mathcal{L}(A)=L. Mais en pratique, pour calculer ∼L\sim_L ou ≡Q\equiv_Q, il est nécessaire de travailler sur une structure finie. LL est en général infini, mais nous pouvons travailler soit sur une expression régulière du langage LL, soit sur un automate fini qui accepte LL. Nous présentons donc l'algorithme Partition de calcul de ≡Q\equiv_Q pour un automate fini déterministe complet et sans états inaccessibles A=(Q,Σ,δ,q0,F)A=(Q,\Sigma,\delta,q_0,F). L'algorithme Partition maintient un ensemble PP de couples d'états (q,q′)(q,q') tels que :

  • si (q,q′)∉P(q,q') \notin P, alors q̸≡Qq′q \not\equiv_Q q' ;
  • et si (q,q′)∈P(q,q') \in P, on fait l'hypothèse que q≡Qq′q \equiv_Q q'.
Entrée : A=(Q,Σ,δ,q_0,F) AFD complet sans états inaccessibles
Sortie : P tel que (q,q') ∈ P si et seulement si q ≡ q'

Partition(A)
debut
P' <- Q × Q
P <- Q × Q
pour tout q dans F et q' pas dans F faire
retirer (q,q') et (q',q) de P
tant que (P différent de P') faire
P' <- P
pour tout (q,q') dans P faire
pour tout s dans Σ faire
si (succ(q,s),succ(q',s)) pas dans P' alors
retirer (q,q') et (q',q) de P
fin si
fin pour
fin pour
fin tant que
retourner P
fin

Le principe de l'algorithme est de faire tendre la relation PP vers ≡Q\equiv_Q par raffinements successifs, en retirant les couples (q,q′)(q,q') de PP dès que l'hypothèse q≡Qq′q \equiv_Q q' est invalidée.

  1. Partition fait l'hypothèse initiale que tous les états sont équivalents pour ≡Q\equiv_Q.
  2. Nous savons que pour tous états q,q′∈Qq,q' \in Q tels que q∈Fq \in F et q′∉Fq' \notin F, q̸≡Qq′q \not\equiv_Q q' puisque ϵ∈L(A,q)\epsilon \in \mathcal{L}(A,q) alors que ϵ∉L(A,q′)\epsilon \notin \mathcal{L}(A,q'). La première boucle retire donc de PP toutes les paires d'états distinguables selon ce critère.
  3. Enfin, supposons que (q,q′)∈P(q,q') \in P et qu'il existe un symbole s∈Σs \in \Sigma et deux états p,p′∈Qp,p' \in Q tels que q→spq \stackrel{s}{\rightarrow} p et q′→sp′q' \stackrel{s}{\rightarrow} p' avec (p,p′)∉P(p,p') \notin P. Alors nous avons la certitude que q̸≡Qq′q \not\equiv_Q q' puisque L(A,p)≠L(A,p′)\mathcal{L}(A,p) \neq \mathcal{L}(A,p') implique que s.L(A,p)≠s.L(A,p′)s . \mathcal{L}(A,p) \neq s . \mathcal{L}(A,p') et que AA est déterministe. De tels couples (q,q′)(q,q') sont détectés et éliminés de PP dans la boucle tant que.

Le point fixe est atteint lorsque P=P′P=P', P′P' conservant la valeur de PP au raffinement précédent, donc lorsque PP ne contient plus que des couples (q,q′)(q,q') tels que q≡Qq′q \equiv_Q q'.

Théorème​

Pour tout AFD complet sans états inaccessibles A=(Q,Σ,δ,q0,F)A=(Q,\Sigma,\delta,q_0,F), l'algorithme précédent calcule ≡Q\equiv_Q en temps O(Card(Σ)×Card(Q)4)\mathcal{O}(Card(\Sigma) \times Card(Q)^4) : au plus Card(Q)2Card(Q)^2 itérations de la boucle tant que, chacune examinant Card(Q)2Card(Q)^2 couples pour Card(Σ)Card(\Sigma) symboles. L'algorithme de Hopcroft réalise la même minimisation en O(Card(Σ)×Card(Q)log⁡Card(Q))\mathcal{O}(Card(\Sigma) \times Card(Q) \log Card(Q)).