Aller au contenu principal

Langages non réguliers

Au chapitre précédent, nous avons étudié les langages réguliers. Nous avons en particulier montré que les langages réguliers sont exactement les langages acceptés par les automates finis. Ainsi, le problème de décision ω∈L\omega \in L peut être résolu par un automate fini uniquement si LL est un langage régulier. 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 donnerons 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 un moyen de 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.

Soient deux ensembles AA et BB et f:A→Bf:A \rightarrow B une fonction de AA dans BB. La fonction ff est une bijection si et seulement si :

  • quels que soient a,a′∈Aa,a' \in A avec a≠a′a\neq a', f(a)≠f(a′)f(a) \neq f(a') (injection) ;
  • quel que soit b∈Bb \in B, il existe a∈Aa \in A tel que b=f(a)b=f(a) (surjection).

Une bijection définit une correspondance (association) entre les éléments de AA et de BB, de telle façon que chaque élément de AA identifie un unique élément de BB, et vice versa.

Un ensemble infini AA est dénombrable si et seulement s'il existe une bijection f:A→Nf:A\rightarrow \mathbb{N} entre AA et l'ensemble des entiers naturels N\mathbb{N}.

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.

Lemme​

L'ensemble Σ∗\Sigma^\ast des mots sur un alphabet Σ\Sigma est dénombrable (preuve page 33 du polycopié).

Puisque l'ensemble des mots sur un alphabet fixé est dénombrable, l'ensemble des expressions régulières sur Σ\Sigma est lui aussi dénombrable. En effet, une expression régulière sur Σ\Sigma est un mot sur l'alphabet fini Σ∪{∅,ϵ,+,⋆,(,)}\Sigma \cup \{\varnothing, \epsilon,+,\star,(,)\}.

Lemme​

L'ensemble des parties d'un ensemble dénombrable n'est pas dénombrable.

Nous déduisons alors des deux lemmes précédents qu'il existe des langages non réguliers. Ils ne sont donc pas acceptés par des automates finis (mais éventuellement par des machines plus puissantes). 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 Σ∪{∅,ϵ,+,⋆,(,)}\Sigma \cup \{\varnothing,\epsilon,+,\star,(,)\}, où Σ\Sigma est un alphabet de symboles. De plus, nous savons qu'il y a au plus 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 parties de Σ∗\Sigma^\ast, 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, et il n'existe pas de méthode générale pour décider si un langage quelconque est régulier. Cependant, nous exhibons maintenant une condition suffisante pour qu'un langage ne soit pas régulier.

  1. Remarquons tout d'abord qu'un langage non régulier est nécessairement infini (tout langage fini est régulier).
  2. Puisqu'un alphabet est fini, un langage infini contient des mots de longueur non bornée.
  3. Tout langage régulier est accepté par un automate fini AA. Soit NN le nombre d'états de AA.
  4. Tout mot ω\omega appartenant à L(A)\mathcal{L}(A) et tel que ∣ω∣≥N|\omega| \geq N est reconnu par une exécution de AA qui passe au moins deux fois par le même état qq (elle visite ∣ω∣+1>N|\omega|+1 > N états). Le mot se décompose alors en ω=x.u.y\omega = x.u.y, où u≠ϵu \neq \epsilon est lu sur la boucle de qq à qq.
  5. Par conséquent, le langage x.u∗.yx.u^\ast.y est inclus dans L(A)\mathcal{L}(A) : il est possible de boucler autant de fois que souhaité sur l'état qq avant de se diriger vers qFq_F.

Boucle sur un état dans une exécution acceptante

Ceci nous donne donc une condition nécessaire pour qu'un langage soit régulier : tout mot suffisamment long doit contenir un facteur qui peut être répété un nombre arbitrairement grand de fois. Ce n'est pas un moyen de prouver qu'un langage est régulier : la condition est nécessaire mais non suffisante. En revanche, 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.

Théorème (lemme de l'étoile, pumping lemma)​

Soient LL un langage régulier infini et A=(Q,Σ,δ,q0,F)A=(Q,\Sigma,\delta,q_0,F) un automate fini déterministe tel que L=L(A)L=\mathcal{L}(A). Pour tout mot ω∈L\omega \in L tel que ∣ω∣≥card(Q)|\omega| \geq card(Q), il existe x,u,y∈Σ∗x,u,y \in \Sigma^\ast, tels que u≠ϵu \neq \epsilon et ∣x.u∣≤card(Q)|x.u| \leq card(Q), vérifiant : x.u.y=ωx.u.y=\omega et ∀k≥0,x.uk.y∈L\forall k \geq 0 , x.u^k.y \in L.

Contraposée du théorème​

Si pour tout entier N>0N>0 il existe un mot ω∈L\omega \in L de longueur ∣ω∣≥N|\omega| \geq N tel que, pour toute décomposition ω=xuy\omega = x u y avec ∣xu∣≤N|xu| \leq N et u≠ϵu \neq \epsilon, il existe i≥0i \geq 0 tel que xuiy∉Lxu^iy \notin L, alors LL n'est pas régulier.

Afin de prouver qu'un langage n'est pas régulier, nous falsifions le lemme de l'étoile. Intuitivement, il s'agit de prouver que, quel que soit l'automate fini AA considéré, celui-ci ne peut pas accepter LL. Il n'est bien entendu pas possible d'examiner tous les automates finis, mais nous quantifions de la façon suivante :

  • la taille de l'automate AA devient un paramètre de la preuve, et nous choisissons ω\omega de telle sorte qu'il soit plus long que ce nombre d'états, afin de faire apparaître un cycle sur tout chemin acceptant ω\omega dans AA ;
  • d'autre part, la décomposition ω=x.u.y\omega = x.u.y devient le second paramètre de la preuve. Nous considérons donc toutes les décompositions satisfaisant les contraintes sur xx, uu et yy, et nous exhibons un kk tel que x.uk.y∉Lx . u^k . y \notin L.

Le lemme de l'étoile, tel qu'énoncé ici, permet de montrer qu'il n'existe pas d'automate fini déterministe qui accepte un langage LL donné. Ceci ne suffit pas à prouver que LL n'est pas régulier. En effet, il pourrait exister un automate non déterministe qui accepte LL. Nous verrons au chapitre 5 que ce n'est pas le cas : à tout automate non déterministe correspond un automate déterministe qui accepte le même langage.