6. Lemme de l'étoile

Les langages rationnels sont exactement les langages reconnaissables par les automates finis (qui sont présentés plus loin) et donc, pour montrer qu'un langage est rationnel, la méthode la plus courante consiste à produire soit une expression rationnelle standard qui lui correspond, soit un automate fini qui le reconnaît.

De manière générale, par contre, il n'est pas toujours facile de montrer qu'un langage n'est pas rationnel. Pour cela, on utilise souvent le théorème suivant :


Lemme de l'étoile
Lemme de la pompe
Lemme d'itération
Lemme d'Ogden pour les rationnels

Soit L un langage rationnel sur un alphabet A. Alors il existe un entier naturel n tel que pour tout mot z de L vérifiant |z|>n, il existe u,v,w ∈ A* tels que z=uvw, v ≠ ε, |uv|≤n et pour tout i∈ N, uviw ∈ L.

Intuitivement : pour tout langage rationnel L, il existe une taille de mot n à partir de laquelle tout mot de L plus long possède au moins un facteur itérant dans ses n premières lettres.

Remarque : il existe bien d'autres formulations de ce lemme avec des propriétés parfois un peu différentes. Un début de discussion à ce propos se trouve dans [Séébold 99]. Il présente un lemme de l'étoile "fort" et un lemme de l'étoile "faible". Celui présenté dans ce cours est le second.

En fait, ce lemme peut s'appliquer à des langages qui ne sont pas rationnels mais tout langage rationnel vérifie ce lemme. Autrement dit, Rat(A*) ⊂ Etoile(A*) ⊂ P(A*)

Ce théorème permet souvent de démontrer par l'absurde qu'un langage L n'est pas rationnel : il suffit de montrer que, pour tout n de N, il existe un mot z de L qui ne vérifie pas la condition pour un i donné. Mais attention, un mot peut ne pas fonctionner parce que trop court ! Généralement, il n'est pas nécessaire de trouver le n. C'est vrai pour tout n'>n, il n'est donc pas nécessaire de trouver le n optimal. En effet, si le facteur itérant est dans le n premières lettres alors il est aussi dans les n' premières.

Par contre, montrer qu'un langage vérifie le lemme de l'étoile ne prouve pas qu'il est rationnel. Si le lemme de l'étoile ne permet pas de prouver qu'un langage est rationnel, une piste possible est de faire une démonstration par l'absurde en cherchant à démontrer qu'il est rationnel.

Un exemple, si l'on reprend l'exemple de {ambm | m ∈ N} (un grand classique !), la démonstration prend la forme suivante :

Hypothèses : Il existe un entier positif n ∈ N, tel que ∀ z ∈ L, |z| > n, (H1)∃ u,v,w, tels que z=uvw, (H2) v ≠ ε, (H3) |uv| ≤ n, (H4) ∀i ∈ N, uviw ∈ {ambm | m ∈ N}
Le mot qui va poser problème : Considérons le mot z=anbn (|z|=2n, donc |z|>n). Soient u,v et w tels z=uvw (H1) et vérifiant H2, H3 et H4 (z est plus long que n et par hypothèse, u,v et w existent).
La contradiction :

Tout préfixe de z de longueur l ≤ n est nécessairement composé uniquement de a. Comme uv est un préfixe de z (H1 : z=uvw) et |uv|<n (H3), ceci est vrai en particulier de uv. Donc il existe k,p ∈ N (p ≠ 0) tels que u=ak, v=ap (H2 : v ≠ ε) et k+p ≤ n.

Et on a z=uvw=akapw, avec w=an-(k+p)bn (car z=anbn).

H4 s'écrit alors
∀ i∈N, ak(ap)ian-(k+p)bn ∈ {ambm | m ∈ N},

or ceci est faux :
ak(ap)ian-(k+p)bn= akap(ap)i-1an-(k+p)bn= akapan-(k+p)(ap)i-1bn=an(ap)i-1bn

et, comme p ≠ 0, pour n'importe quel i > 1,
an(ap)i-1bn ∉ L.

Conclusion : Donc l'hypothèse est fausse.
Donc, par le théorème de l'étoile, {ambm | m ∈ N} n'est pas un langage rationnel.

Remarquons à nouveau que ce lemme ne peut pas servir à démontrer qu'un langage est rationnel : il existe en effet des langages non rationnels qui le vérifient (par exemple L = {ambpcp | m,p ∈ N et m > p} : il suffit de considérer n=2, car tout mot de L plus long que 2 commence nécessairement par 2 a et l'on peut itérer à volonté le deuxième a, par exemple, sans sortir du langage L).

Notons aussi que, assez souvent, lorsqu'il y a "relation" entre les éléments de l'expression, le langage n'est pas rationnel. Mais attention, ceci est un indice et non une règle universelle.

Exercices et tests :

Exercice 6.1. Montrer que les langages suivants ne sont pas rationnels Aide :

  1. {anbp : n < p} Aide
  2. {ann} Aide Aide
  3. {anbp : n ≠ p} Aide Aide

Solution

Exercice 6.2. Les langages suivants sont-ils rationnels ? Le prouver.

  1. {ap : p premier} Aide
  2. {anbp : n ≡ p (mod 2)} Aide
  3. {anbp : n ≥ p} Aide
  4. {a3bna3 : n mod 3 = 0} Aide
  5. L'ensemble des mots sur {a,b} de longueur impaire, dont la lettre médiane (la n-ième si le mot est de longueur 2n-1) est un a ; Aide
  6. {ambn : n + m ≤ 1024} Aide

Solution


mardi, 25/11/03 10:27