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 donné, l'automate minimal qui accepte .
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 un langage sur . Deux mots et sont congrus (à droite modulo , noté , si pour tout mot si et seulement si . et sont dit indistinguables pour . La congruence induit une relation d'équivalence. Nous notons la classe d'équivalence de pour .
Intuitivement, si deux mots et ne sont pas congrus modulo , alors il existe un mot tel que et (ou inversement). Ainsi, un automate fini qui accepte , doit, lorsqu'il lit mémoriser une information suffisante pour ne pas confondre et , et in fine accepter . A contrario, si et sont congrus modulo , un automete fini qui accepte n'est plus obligé de distinguer et puisque et conduisent au même verdict. Un automate fini mémorise l'information au moyen de ses états. Ainsi, dans le cas où et ne sont pas congrus modulo , afin de distinguer et , la lecture de ces mots doit conduire l'automate dans deux états distincts. Et inversement, lorsque et sont congrus modulo , 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