Langages non réguliers
Au chapitre précédent, nous avons étudié les langages réguliers. Nous avons particulièrement montré que les langages réguliers. Ainsi donc, le problème de décision peut être résolu par un automate fini uniquement si est un langage régulier. Il se pose donc la question de l'existence de langages non réguliers. Nous allons tout d'abord montrer l'existence de tels langages, puis nous donnons une condition nécessaire pour qu'un langage soit régulier. La négation de cette condition nécessaire donne une condition suffisante pour qu'un langage ne soit pas régulier, et donc pour prouver l'irrégularité.
Existence de langages non réguliers
Nous montrons maintenant qu'il existe strictement plus de langages qu'il n'existe de langages réguliers. L'ensemble des langages et l'ensemble des langages réguliers sont tous deux infinis. Nous introduisons donc dans un premier temps les outils permettant de comparer la taille de deux ensembles infinis.
Soit deux ensemble et et une fonction de dans . La fonction est une bijection si et seulement si
- quels que soient avec (injection)
- que que soit , il existe tel que (surjection)
Une bijection définit une correspondance (association) entre les éléments de et de , de telle façon que chaque élément de identifie un unique élément de , et vice versa
Un ensemble est dénombrable si et seulement s'il existe une bijection entre et l'ensemble des entiers naturels
Un ensemble est donc dénombrable s'il est possible d'attribuer un numéro à chacun de ses éléments. Intuitivement on peut énumérer les éléments d'un ensemble dénombrable, bien qu'il soit infini. Il y a donc un premier élément, et tout élément admet un élément suivant. Ainsi ces ensemble peuvent être définis par des fonctions récursives.
Lemme
L'ensemble des mots sur un alphabet est dénombrable. Preuve page 33
Puisque l'ensemble des mots sur un alphabet fixé est dénombrable, l'ensemble des expressions régulières sur est lui aussi dénombrable. En effet une expression régulière sur est un mot sur .
Lemme
L'ensemble des parties d'un ensemble dénombrable n'est pas dénombrable
Nous déduisons alors des deux lemmes précédent qu'il existe des langages non réguliers. Ils ne sont donc pas acceptés par des automates finis, mais par des machines plus complexes. Ils ne sont pas non plus représentables par des expressions régulières.
Théorème
Il existe des langages qui ne sont pas réguliers
Par le premier lemme, nous savons qu'il existe un nombre dénombrable d'expressions régulières puisqu'une expression régulière peut être vue comme un mot sur l'alphabet où est un alphabet de symboles. De plus nous savons qu'il y a autant de langages réguliers que d'expressions régulières, et donc que l'ensemble des langages réguliers est dénombrable. Par le deuxième lemme, l'ensemble des langages étant l'ensemble des ensembles de mots, nous savons que l'ensemble des langages est non dénombrable. Par conséquent, certains langages ne sont pas réguliers.
Lemme de l'étoile
Il existe donc des langages qui ne sont pas réguliers. Il n'est pas possible de déterminer si un langage est régulier. Cependant, nous exhibons maintenant une condition suffisante pour qu'un langage ne soit pas régulier
- Remarquons tout d'abord qu'un langage non régulier est nécessairement infini
- Puisqu'un alphabet est fini, un langage infini contient des mots de longueur non bornée.
- Tout langage régulier est accepté par un automate fini . Soit le nombre d'états de .
- Tout mot appartenant à , et tel que , est reconnu par une exécution de qui passe au moins deux fois par le même état ![etoile]
- Par conséquent, le langage est inclus dans : il est possible de boucler autant de fois que souhaité sur l'état avec de se diriger vers
Ceci nous donne donc une condition nécessaire pour qu'un langage soit régulier : tout mot suffisamment long doit contenir un sous mot qui peut être répété un nombre arbitrairement grand de fois. Ceci n'est pas un moyen de prouver qu'un langage est régulier : il faudrait considérer un nombre infini de mots (cette condition est nécessaire mais non suffisante). Par contre cette méthode permet de prouver qu'un langage n'est pas régulier en montrant qu'il comporte (au moins) un mot qui ne respecte pas ce principe.