Lemme de pompage pour les langages réguliers - Pumping lemma for regular languages

Dans la théorie des langages formels , le lemme de pompage pour les langages réguliers est un lemme qui décrit une propriété essentielle de tous les langages réguliers . De manière informelle, il dit que toutes les chaînes suffisamment longues dans un langage régulier peuvent être pompées - c'est-à-dire avoir une section médiane de la chaîne répétée un nombre arbitraire de fois - pour produire une nouvelle chaîne qui fait également partie du langage.

Plus précisément, le lemme de pompage dit que , pour tout langage régulier il existe une constante de telle sorte que toute chaîne dans une longueur au moins peut être divisé en trois sous - chaînes , et ( avec étant non vide), de telle sorte que les cordes construites en répétant zéro ou plus de temps sont encore dedans . Ce processus de répétition est connu sous le nom de "pompage". De plus, le lemme de pompage garantit que la longueur de sera au plus , imposant une limite aux manières dont il peut être dédoublé. Les langages finis satisfont videment le lemme de pompage en ayant une longueur de chaîne égale à plus un.

Le lemme de pompage est utile pour réfuter la régularité d'une langue spécifique en question. Il a été prouvé pour la première fois par Michael Rabin et Dana Scott en 1959, et redécouvert peu de temps après par Yehoshua Bar-Hillel , Micha A. Perles et Eli Shamir en 1961, en tant que simplification de leur lemme de pompage pour les langues sans contexte .

Déclaration formelle

Soit un langage régulier. Ensuite , il existe un entier dépendant uniquement de telle sorte que chaque chaîne en longueur au moins ( est appelée la « longueur de pompage ») peut être écrit (c. -à- peut être divisé en trois sous - chaînes), satisfaisant aux conditions suivantes:

est la sous-chaîne qui peut être pompée (supprimée ou répétée un certain nombre de fois, et la chaîne résultante est toujours dans ). (1) signifie que la boucle à pomper doit avoir une longueur d'au moins un ; (2) signifie que la boucle doit se produire dans les premiers caractères. doit être plus petit que (conclusion de (1) et (2)), mais à part cela, il n'y a aucune restriction sur et .

En termes simples, pour tout langage régulier , toute chaîne suffisamment longue (en ) peut être divisée en 3 parties. c'est-à - dire de telle sorte que toutes les chaînes pour soient également dans .

Vous trouverez ci-dessous une expression formelle du lemme de pompage.

Utilisation du lemme

Le lemme de pompage est souvent utilisé pour prouver qu'un langage particulier n'est pas régulier : une preuve par contradiction peut consister à présenter une chaîne (de la longueur requise) dans le langage qui n'a pas la propriété décrite dans le lemme de pompage.

Par exemple, la langue sur l'alphabet peut être montrée comme non régulière comme suit :

Soit , et soit comme utilisé dans la déclaration formelle pour le lemme de pompage ci-dessus. Supposons qu'il existe une constante comme l'exige le lemme. Soit in donné par , qui est une chaîne plus longue que . Par le lemme de pompage, il doit exister une décomposition avec et telle que dans pour chaque . Depuis , la chaîne se compose uniquement d'instances de . De plus, parce que , il contient au moins une instance de la lettre . Cependant, a plus d'instances de la lettre que de la lettre , car certaines instances de mais aucune de n'ont été ajoutées. Par conséquent, n'est pas dans ce qui contredit le lemme de pompage. Par conséquent, ne peut pas être régulier.

La preuve que le langage des parenthèses équilibrées (c'est-à-dire correctement imbriquées) n'est pas régulier suit la même idée. Étant donné , il existe une chaîne de parenthèses équilibrées qui commence par plus que des parenthèses gauches, de sorte qu'elle sera entièrement composée de parenthèses gauches. En répétant , une chaîne peut être produite qui ne contient pas le même nombre de parenthèses gauche et droite, et donc elles ne peuvent pas être équilibrées.

Preuve du lemme de pompage

Idée de preuve : chaque fois qu'une chaîne xyz suffisamment longue est reconnue par un automate fini , elle doit avoir atteint un état ( ) deux fois. Par conséquent, après avoir répété ("pompage") la partie médiane arbitrairement souvent ( xyyz , xyyyz , ...) la chaîne sera toujours reconnue.

Pour chaque langage régulier, il existe un automate à états finis (FSA) qui accepte le langage. Le nombre d'états dans une telle FSA est compté et ce nombre est utilisé comme longueur de pompage . Pour une chaîne de longueur au moins , soit l'état de départ et soit la séquence des prochains états visités au fur et à mesure de l'émission de la chaîne. Étant donné que la FSA n'a que des états, dans cette séquence d' états visités, il doit y avoir au moins un état qui se répète. Écrivez pour un tel état. Les transitions qui amènent la machine de la première rencontre d'état à la seconde rencontre d'état correspondent à une chaîne. Cette chaîne est appelée dans le lemme, et puisque la machine trouvera une chaîne sans la portion, ou avec la chaîne répétée un nombre quelconque de fois, les conditions du lemme sont satisfaites.

Par exemple, l'image suivante montre un FSA.

Un automate acceptant le langage a(bc)*d.svg

Le FSA accepte la chaîne : abcd . Étant donné que cette chaîne a une longueur au moins aussi grande que le nombre d'états, qui est de quatre, le principe du pigeonnier indique qu'il doit y avoir au moins un état répété parmi l'état de départ et les quatre états visités suivants. Dans cet exemple, seul est un état répété. Étant donné que la sous-chaîne bc fait traverser à la machine des transitions qui commencent à l'état et se terminent à l'état , cette partie pourrait être répétée et la FSA accepterait toujours, en donnant la chaîne abcbcd . Alternativement, la partie bc pourrait être supprimée et la FSA accepterait toujours de donner la chaîne ad . En termes de lemme de pompage, la chaîne abcd est divisée en une partie a , une partie bc et une partie d .

En remarque, le problème de vérifier si une chaîne donnée peut être acceptée par un automate fini non déterministe donné sans visiter un état à plusieurs reprises, est NP difficile .

Version générale du lemme de pompage pour les langues régulières

Si une langue est régulière, alors il existe un certain nombre (la longueur de pompage) de telle sorte que chaque chaîne en avec peut être écrit sous la forme

avec des chaînes , et tel que , et

est dans pour chaque entier .

À partir de là, la version standard ci - dessus suit un cas particulier, les deux et étant la chaîne vide.

Étant donné que la version générale impose des exigences plus strictes à la langue, elle peut être utilisée pour prouver la non-régularité de nombreuses autres langues, telles que .

L'inverse du lemme n'est pas vrai

Alors que le lemme de pompage déclare que tous les langages réguliers satisfont aux conditions décrites ci-dessus, l'inverse de cette déclaration n'est pas vrai : un langage qui satisfait ces conditions peut toujours être non régulier. En d' autres termes, l'original et la version générale du pompage Lemme donner un nécessaire mais pas suffisante état d'une langue à être régulière.

Par exemple, considérons le langage suivant :

.

En d'autres termes, contient toutes les chaînes sur l'alphabet avec une sous-chaîne de longueur 3 comprenant un caractère en double, ainsi que toutes les chaînes sur cet alphabet où précisément 1/7 des caractères de la chaîne sont des 3. Ce langage n'est pas régulier mais peut toujours être "pompé" avec . Supposons qu'une chaîne s ait une longueur d'au moins 5. Ensuite, puisque l'alphabet n'a que quatre caractères, au moins deux des cinq premiers caractères de la chaîne doivent être des doublons. Ils sont séparés par au plus trois caractères.

  • Si les caractères en double sont séparés par 0 ou 1, pompez l'un des deux autres caractères de la chaîne, ce qui n'affectera pas la sous-chaîne contenant les doublons.
  • Si les caractères en double sont séparés par 2 ou 3 caractères, pompez 2 des caractères les séparant. Le pompage vers le bas ou vers le haut entraîne la création d'une sous-chaîne de taille 3 qui contient 2 caractères en double.
  • La deuxième condition de s'assure que n'est pas régulier : Considérez la chaîne . Cette chaîne est exactement quand et n'est donc pas régulière par le théorème de Myhill-Nerode .

Le théorème de Myhill-Nerode fournit un test qui caractérise exactement les langages réguliers. La méthode typique pour prouver qu'un langage est régulier consiste à construire soit une machine à états finis, soit une expression régulière pour le langage.

Voir également

Remarques

  1. ^ Rabin, Michel ; Scott, Dana (avril 1959). « Automates finis et leurs problèmes de décision » (PDF) . Revue IBM de recherche et développement . 3 (2) : 114-125. doi : 10.1147/rd.32.0114 . Archivé de l'original le 14 décembre 2010.Maintenance CS1 : URL inappropriée ( lien ) Ici : Lemme 8, p.119
  2. ^ Bar-Hillel, Y. ; Perles, M. ; Shamir, E. (1961), "Sur les propriétés formelles des grammaires de structure de phrases simples", Zeitschrift für Phonetik, Sprachwissenschaft und Kommunikationsforschung , 14 (2) : 143-172
  3. ^ John E. Hopcroft; Rajeev Motwani ; Jeffrey D. Ullman (2003). Introduction à la théorie des automates, aux langages et au calcul . Addison Wesley. Ici : Sect.4.6, p.166
  4. ^ Berstel, Jean; Lauve, Aaron; Reutenauer, Christophe ; Saliola, Franco V. (2009). Combinatoire sur les mots. Mots Christoffel et répétitions dans les mots . Série de monographies CRM. 27 . Providence, RI : Société mathématique américaine . p. 86. ISBN 978-0-8218-4480-9. Zbl  1161.68043 .
  5. ^ Savitch, Walter (1982). Machines abstraites et grammaires . p. 49 . ISBN 978-0-316-77161-0.
  6. ^ John E. Hopcroft et Jeffrey D. Ullman (1979). Introduction à la théorie des automates, aux langages et au calcul . Lecture/MA : Addison-Wesley. ISBN 978-0-201-02988-8.Ici : p. 72, Exercice 3.2 (qui donne une version un peu moins générale, nécessitant | w |= p ) et 3.3

Les références