Skip to main content

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

Comment comparer deux automates finis ? Par exemple, comment décider que les deux AFD de la figure suivantes 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"

Nous avons également vu au chapite 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éugliers. 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 pour chaque langage régulier. Ceci va nous permettre de parler de représentation canonique de langages réuliers 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 ww' sont congrus (à droite modulo LL, noté wLww \sim_L w', si pour tout mot xΣ,w.xLx \in \Sigma^\ast, w.x \in L si et seulement si w.xLw'.x \in L. ww et ww' sont dit indistinguables pour LL. La congruence L\sim_L induit une relation d'équivalence. Nous notons [w]L={wwLw}[w]_{\sim_L} = \{w' | 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.xLu.x \in L et v.xLv.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 automete 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 lecteur 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 qQq \in Q est défini par

L(A,q)={wΣqwq  avec  qF} \mathcal{L}(A,q)=\{w \in \Sigma^\ast | q \stackrel{w}{\rightarrow} q' \; \text{avec} \; q' \in F\}

Le co-langage de l'état qQq \in Q est défini par

coL(A,q)={wΣq0I,q0wq} co\mathcal{L}(A,q)=\{w \in \Sigma^\ast | \exists q_0 \in I, q_0 \stackrel{w}{\rightarrow} q\}

Théorème (Congruence droite et régularité)

Un langage LL est régulier si et seulement si la congruence L\sim_L est d'index fini.

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'un 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={wLwΣ}Q=\{|w|_{\sim_L} | w \in \Sigma^\ast\}
  • δ={(wL,s,[w.s]L)sΣ}\delta=\{(|w|_{\sim_L},s,[w.s]_{\sim_L}) | s \in \Sigma^\ast\}
  • q0=[ϵ]Lq_0=[\epsilon]_{\sim_L}
  • F={[w]LwΣ  et  [w]LL}F=\{[w]_{\sim_L} | 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

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 mminimalité en considérant les langages acceptés depuis chacun des états de AA. Deux états q,qQq,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 q0wqq_0 \stackrel{w}{\rightarrow} q et q0wqq_0 \stackrel{w'}{\rightarrow} q' pour deux mots w,wΣw,w' \in \Sigma^\ast. Alors, puisque L(A,q)=L(A,q)\mathcal{L}(A,q) = \mathcal{L}(A,q'), pour tout mot xΣ,w.xx \in \Sigma^\ast, w.x est accepté par AA si et seulement w.xw'.x est accepté par AA. Il vient alors wL(A)ww \sim_{\mathcal{L}(A)}w'. L'équivalence entre Q\equiv_Q et K\sim_K est prouvée plus tard. Un automate fini AA n'est donc pas minimal si et seulement si

  • il possède (au moins) un état inaccessible : il existe qQq\in Q tel que pour tout wΣ,q0wqw \in \Sigma^\ast, q_0 \stackrel{w}{\nrightarrow} q
  • ou il possède deux états distincts q,qQq,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"

Elimination 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)={qQq0I,wΣ.q0wq}access(A)=\{q \in Q | \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=FQF'=F \cap Q'

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

La supression 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 de la fonction Acc:XX{qQqX.sΣ.(q,s,q)δ}Acc : X \rightarrow X \cup \{q' \in Q | \exists q \in X.\exists s \in \Sigma.(q,s,q') \in \delta \} contenant les états initiaux II. On peut calculer par itérations successives

\begin{align*} Acc(0) &= I \\ Acc(n+1) &= Acc(n) \cup \{q' \in Q | \exists q \in Acc(n). \exists s \in \Sigma. (q,s,q') \in \delta\} \end{align*}

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(n1)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' u {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 temps O(Card(Q))\mathcal{O}(Card(Q))

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étude 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 qq' 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={qQqQ}Q'=\{|q|_{\equiv_Q} | q \in Q\}
  • δ={qQ,s,[q]Q(q,s,q)δ}\delta'=\{|q|_{\equiv_Q},s,[q']_{\equiv_Q} | (q,s,q') \in \delta\}
  • q0=[q0]Qq'_0=[q_0]_{\equiv_Q}

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)).

Les relations L\sim_L et Q\equiv_Q sont équivalentes pour A=(Q,Σ,elta,q0,F)A=(Q,\Sigma,\Êelta,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 de 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\notequivQqq \notequiv_Q q'
  • et si (q,q)P(q,q') \in P, on fait l'hypothèse que pQqp \equiv_Q q'
Entree: A=(Q,Sigma,delta,q_0,F) AFD complet sans états inacssibles
Sortie: P telle que (q,q') dans P si et seulement si q equiv 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 P') faire
P' <- P
pour tout (q,q') dans P faire
pour tout s dans Sigma 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 qQqq \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,qQq,q' \in Q tels que qFq \in F et qF,q\notequivQqq' \notin F, q \notequiv_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,pQp,p' \in Q tels que qspq \stackrel{s}{\rightarrow} p et qspq' \stackrel{s}{\rightarrow} p' avec (p,p)P(p,p') \notin P. Alors nous avons la certitude q\notequivQqq \notequiv_Q q' puisque L(A,p)L(A,p)\mathcal{L}(A,p) \notin \mathcal{L}(A,p') implique que s.L(A,p)s.L(A,p)s . \mathcal{L}(A,p) \notin s . \mathcal{L}(A,p') et AA est déterministe. De tels couples (q,q)(q,q') sont détectés et éliminés de PP dans la boucle tant ue.

Le point fixe est atteint lorsque P=PP=P', PP' conservant la valeur de PP au raffinement précédent, donc lorsque OO ne contient plus que des couples (q,q)(q,q') tels que qQqq \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édant calcule Q\equiv_Q en temps O(Card(Σ)×Card(Q)4)\mathcal{O}(Card(\Sigma) \times Card(Q)^4)