Comment prouver qu'une langue n'est pas régulière?


76

Nous avons appris à propos de la classe des langages normaux . Il se caractérise par un concept unique parmi les expressions régulières, les automates finis et les grammaires linéaires à gauche; il est donc facile de montrer qu'une langue donnée est régulière.REG

Comment puis-je montrer le contraire, cependant? Mon assistante professionnelle a insisté sur le fait que, pour ce faire, nous devions montrer à toutes les expressions régulières (ou à tous les automates finis, ou à toutes les grammaires linéaires à gauche) qu'ils ne pouvaient pas décrire le langage utilisé. Cela semble être une grosse tâche!

J'ai lu sur certains lemmes de pompage, mais cela semble vraiment compliqué.

Il s’agit d’une question de référence regroupant les méthodes de preuve usuelles et des exemples d’application. Voir ici pour la même question sur les langues sans contexte.

Réponses:


60

La preuve par contradiction est souvent utilisée pour montrer qu'une langue n'est pas régulière: si une propriété vraie pour toutes les langues normales, si votre langue spécifique ne vérifie pas , alors ce n'est pas régulier. Les propriétés suivantes peuvent être utilisées:PP

  1. Le lemme de pompage, comme illustré dans la réponse de Dave ;
  2. Propriétés de fermeture des langages normaux (opérations sur les ensembles, concaténation, étoile de Kleene, miroir, homomorphismes);
  3. Une langue ordinaire a un nombre fini de classes d'équivalence de préfixes, le théorème de Myhill – Nerode .

Pour prouver qu'un langage n'est pas régulier à l'aide de propriétés de fermeture, la technique consiste à combiner avec des langages normaux par des opérations préservant la régularité afin d'obtenir un langage réputé non régulier, par exemple le langage archétypique . Par exemple, prenons . On suppose est régulière, comme des langues sont fermées sous complémentation est si complément de . Maintenant, prenons l'intersection de et d' qui est régulière, nous obtenons un qui n'est pas régulier.LLI={anbnnN}L={apbqpq}LLLcLcabI

Le théorème de Myhill – Nerode peut être utilisé pour prouver que n'est pas régulier. Pour , . Toutes les classes sont différentes et il existe une infinité dénombrable de telles classes. Comme une langue régulière doit avoir un nombre fini de classes, ne pas régulier.Ip0I/ap={arbrbprN}=I.{bp}I


3
Je ne connaissais pas le théorème de Myhill-Nerode, cool!
Daniil

Wikipedia a aussi une section sur le nombre de mots dans une langue courante: si vous pouvez prouver que votre langue ne correspond pas à la caractérisation, votre langue n’est pas régulière: fr.wikipedia.org/wiki/…
Alex ten Brink

@ Daniel, les expressions régulières ne peuvent pas compter me semble une formulation informelle populaire du théorème de Myhill-Nerode.
AProgrammer

@ AlextenBrink: C'est chouette. Je suppose que les constantes dans la déclaration sont les valeurs propres du laplacien de l'automate? Cela ferait une belle addition aux réponses ici.
Louis

@Louis: en fait, nous n'avons trouvé aucune référence pour ce théorème, alors si vous en savez plus à ce sujet ... Voir aussi: cs.stackexchange.com/questions/1045/…
Alex ten Brink

37

Basé sur la réponse de Dave, voici un "manuel" étape par étape pour utiliser le lemme de pompage.

Rappelez-vous le lemme de pompage (tiré de la réponse de Dave, prise sous forme de Wikipedia):

Soit une langue régulière. Il existe alors un entier (dépendant uniquement de ) tel que toute chaîne en de longueur au moins ( est appelée "longueur de pompage") peut être écrite sous la forme (c.-à-d. peut être divisées en trois sous-chaînes), répondant aux conditions suivantes:Ln1LwLnnw=xyzw

  1. |y|1
  2. |xy|n et
  3. un "pompage" est toujours en : pour tout , . wLi0xyizL

Supposons que l'on vous donne un langage et que vous voulez montrer que ce n'est pas régulier via le lemme de pompage. La preuve ressemble à ceci:L

  1. Supposons que est régulier.L
  2. Si c'est régulier, alors le lemme de pompage dit qu'il existe un nombre qui est la longueur de pompage.n
  3. Choisir un spécifique mot d' une longueur supérieure à . La partie difficile est de savoir quel mot prendre.wLn
  4. Considérez TOUS les moyens de partitionner en 3 parties, , avec et non vide. Pour chacun de ces moyens, montrent qu'il ne peut pas être pompé: il existe toujours un tel que .ww=xyz|xy|nyi0xyizL
  5. Conclure: le mot ne peut pas être "pompé" (quelle que soit la façon dont nous l'avons divisé en ) contrairement au lemme de pompage, c'est-à-dire que notre hypothèse (étape 1) est fausse: n'est pas régulier.wxyzL

Avant de donner un exemple, laissez-moi répéter les étapes 3 et 4 (c’est là que la plupart des gens se trompent). À l' étape 3 , vous devez choisir un mot spécifique dans . écrivez-le explicitement, comme "00001111" ou " ". Exemples de choses qui ne sont pas un mot spécifique: " " ou "un mot dont le préfixe est 000".Lanbnw

En revanche, à l'étape 4, vous devez prendre en compte plusieurs cas. Par exemple, si il ne suffit pas de dire , puis d'atteindre une contradiction. Vous devez également vérifier et et toutes les autres options possibles.w=000111x=00,y=01,z=00x=0,y=0,z=0111x=ϵ,y=000,z=111


Maintenant, suivons les étapes et prouvons que n'est pas régulier.L={0k12kk>0}

  1. Supposons que est régulier.L
  2. Soit la longueur de pompage donnée par le lemme de pompage.n
  3. Soit . (contrôle de santé: selon les besoins. Pourquoi ce mot? d’autres mots peuvent également fonctionner .. il faut un peu d’expérience pour trouver le bon ). De nouveau, notez que est un mot spécifique: .w=0n12n
    |w|>nww0000n times11112n times
  4. Maintenant, commençons par examiner les différents cas pour scinder en avecwxyz|xy|n et |y|>0 . Depuis |xy|<n peu importe la façon dont nous avons divisé w , x sera composé uniquement de 0 et y . Supposons |x|=s et |y|=k . Nous devons considérer TOUTES les options, c’est-à-dire tout le s,k possible , k tel que s0,k1 ets+kn . POUR CELAL la preuve pour tous ces cas est la même, mais en général elle pourrait être différente.
    prenonsi=0 et considéronsxyiz=xz . ce mot n'est PAS dansL puisqu'il est de la forme0nk12n (peu importe ce ques etk étaient), et puisquek1 , ce mot n'est pas dansL et nous atteignons une contradiction.
  5. Ainsi, notre hypothèse est incorrecte et L n'est pas régulier.

Un clip sur youtube qui explique comment utiliser le lemme de pompage dans le même sens se trouve ici


1
C'est la longueur de pompage dans cette définition!
Saadtaame

Le principe de base est qu'une chaîne suffisamment longue doit avoir traversé un cycle dans la machine à états. Si vous parcourez ce cycle une fois, vous pouvez le parcourir autant de fois que vous le souhaitez.
gnasher729

28

D'après Wikipedia, la langue de pompage pour les langues ordinaires est la suivante:

Soit une langue régulière. Il existe alors un entier p 1 (dépendant uniquement de L ) tel que toute chaîne w en L de longueur au moins p ( p est appelée "longueur de pompage") puisse être écrite sous la forme w = x y z (c'est-à-dire, w peut être divisée en trois sous-chaînes), répondant aux conditions suivantes:Lp1LwLppw=xyzw

  1. |y|1
  2. et |xy|p
  3. pour tout , x y i z L . y est la sous-chaîne qui peut être pompée (supprimée ou répétée autant de fois que nécessaire et la chaîne résultante est toujours en L ). i0xyizL
    yL

(1) signifie que la boucle à pomper doit avoir une longueur d'au moins un; (2) signifie que la boucle doit se situer dans les p premiers caractères. Il n'y a pas de restriction sur x et z.

wLw=xyzxykzk0L

L={(01)n2nn0}

w=xyzxyz=(01)p2p3ppy(01)k+1(10)k+11(01)k0(10)kk0|y|1y=2kk>0(01)k+12l(10)k+12l1(01)k2l0(10)k2lk0l1

y=0(10)k2lxy2z=x0(10)k2l0(10)k2lzxz21

(01)2(01)n2n0

|xy|pz

Chacun des cas ci-dessus doit conduire à une telle contradiction, qui serait alors une contradiction du lemme de pompage. Voila! La langue ne serait pas régulière.


|xy|p

@ Gilles: Je ne sais même pas ce que signifie la phrase que vous avez ajoutée.
Dave Clarke

kz

kl

1
(01)2p22py2

14

LΣ

SL(z)=n0|LΣn|zn

L

L'instruction suivante est valable [ FlSe09 , p52]:

LREGSL rational

SL(z)=P(z)Q(z)P,Q

SL

Exemple: considérons le langage des mots correctement imbriqués, c'est-à-dire le langage Dyck . Il est généré par la grammaire non ambiguë

S[S]Sε

qui peut être traduit dans l'équation

S(z)=z2S2(z)+1

une solution (celle avec tous les coefficients positifs) dont

S(z)=114z22z2

SL=SS


  1. La preuve de l'énoncé pour les langues normales fonctionne via les grammaires et les transferts aux grammaires linéaires immédiatement (commutativité de la multiplication).

  [FlSe09] Combinatoire analytique de P. Flajolet et R. Sedgewick (2009) [Kuic70] De l'entropie des langues sans contexte de W. Kuich (1970)
  


13

L={(01)m2mm0}

Alors, vous pensez que le lemme de pompage a l'air compliqué? Ne t'inquiète pas. Voici une approche légèrement différente, qui est également cachée dans la réponse de @ Romuald. (Quiz: où?)

Commençons par rappeler que chaque langage courant est accepté par un automate à états finis déterministe (DFA). Un DFA est un graphe orienté fini où chaque sommet a exactement un bord extérieur pour chaque lettre de l'alphabet. Les chaînes vous donnent une marche dans le graphique basé sur un sommet étiqueté "début", et le DFA accepte si cette promenade se termine à un sommet intitulé "accepter". (Les sommets sont appelés "états" car différents domaines des mathématiques aiment créer leur propre terminologie pour la même chose.)

abcacbc

LabcacbcL

abcacbcm{(01)i:0im+1}a=(01)pb=(01)qpqa2pb2p

La bonne chose est que l'exemple est vraiment un modèle pour prouver que les langues ne sont pas régulières:

  • {ai:iN}tiaitiaitjij
  • ai

Il existe d'autres astuces, mais celle-ci résoudra facilement vos problèmes de devoirs.

Edit: Une version précédente avait des discussions sur le lien entre cette idée et le lemme de pompage.


Je ne pense pas que reproduire la preuve de Pumping Lemma soit utile en général, mais YMMV. Comprendre la preuve est bon dans tous les cas; il est immédiatement lié à un certain nombre de fermetures et à d’autres propriétés intéressantes des automates finis et des langages normaux. Cependant, je suis tout à fait en désaccord avec la dernière phrase: la théorie des automates n’est pas du tout ennuyeuse, et ce n’est certainement pas la partie la plus ennuyeuse des cours théoriques.
Raphaël

@Louis Dans votre réponse, comment avez-vous trouvé cette déclaration we see that a2p is in the language and b2p is not, so this language can't be regular.dans la dernière. S'il vous plaît pouvez-vous donner un exemple
Himanshu

abq12pq2ab

7

Suite à la réponse ici , je décrirai une méthode de prouver la non-régularité basée sur la complexité de Kolmogorv.

Cette approche est discutée dans "Une nouvelle approche de la théorie des langages formels selon la complexité de Kolmogorov" , de Ming Li et Paul MB Vitanyi (voir la section 3.1).

K(x)xMM(ϵ)=x

LΣcLxΣynthLx={yΣ|xyL}K(y)O(logn)+c

xΣnthLx

  • L
  • x
  • n

xxLnlogny

LxLxΣL

L={1p|p is prime}L={0n1n|n0}

x{0,1}yixithLxy10i=1ixx=0in=1i0:K(y10i)cy10i=1i1ixx=0nnK(0n)logny1x=1nK(1n)<cn>2c


7

{σ}AN

L(A)={σn:nA}.

AN

  1. L(A)

  2. L(A)

  3. n0,m1nn0nAn+mAA

  4. ai=1iA0.a0a1a2

  5. iAxi

ρρ

ANL(A)

  1. ρ=limn|A{1,,n}|nA

  2. ρ=0A

  3. ρ=1AA¯

L({2n:n0})


4

La classe de langages réguliers est fermée lors de diverses opérations de fermeture, telles que l'union, l'intersection, le complément, l'homomorphisme, la substitution régulière, l'homomorphisme inverse, etc. Ceci peut être utilisé pour prouver qu'une langue donnée n'est pas régulière par réduction à une langue déjà connue pour être non régulière.

{anbn:n0}{w{a,b}:#a(w)=#b(w)}ab

L={w{a,b}:#a(w)=#b(w)}LabLab={anbn:n0}

L={(0+1)n2(0+1)n:n0}

hh(0)=0h(1)=1h(2)=ϵLh(L021)={0n1n:n0}

L={0n10n:n0}

Soit l'homomorphisme donné par , , . Si était régulier, alors serait, mais ce n'est que le langage de l'exemple précédent.kk(0)=0k(1)=0k(2)=1Lk1(L)L


3

Utilisez la théorie de Myhill – Nerode.

Soit une langue. On dit que deux mots sont inéquivalents modulo (ou: par rapport à ) s'il existe un mot tel que précisément l' un des est en . Dans tout DFA pour , (exercice). Cela implique le critère suivant:Lx,yLLzxz,yzLLδ(q0,x)δ(q0,y)

Soit une langue. Supposons qu'il existe un ensemble infini de mots inéquivalents deux à deux (c'est-à-dire un ensemble infini tel que deux quelconques non égaux soient inéquivalents modulo ). Alors n'est pas régulier.LSx,ySLL

Voici un exemple simple d'application de ce critère:

La langue n'est pas régulière.L={anbn:n0}

Preuve. Soit . Nous affirmons que deux mots différents en sont inéquivalents modulo . En effet, passons , où . Puis , mais .S={an:n0}SLai,ajSijaibiLaibjL

Une caractéristique importante de cette méthode est que son succès est garanti: si n'est pas régulier, il existe un ensemble infini de mots inéquivalents deux à deux. Ceci est une conséquence du théorème de Myhill – Nerode . En bref, l'équivalence modulo (la négation de l'inégivalence modulo définie ci-dessus) est une relation d'équivalence et un langage est régulier si et seulement si le nombre de classes d'équivalence modulo est fini. Si n'est pas régulier, retirer un mot de chaque classe d'équivalence constituerait un ensemble infini de mots inéquivalents.LLLLLL


1

Étant donné une langue , pour chaque chaîne il existe un ensemble de chaînes tels que . Chacun de ces ensembles pourrait être utilisé comme état dans une machine à états.LxyxyL

Tout ce que vous avez à faire est de montrer que le nombre de ces ensembles n'est pas fini.

Par exemple, prenons . Soit pour certains , la seule chaîne telle que soit . Donc, pour chaque nous avons un ensemble différent, ce qui signifie que n’est pas régulier.L=anbn:n0x=anbn1yxyLy=bn1nL

Donc, en général, si vous trouvez un ensemble infini de chaînes tel que chaque donne un ensemble différent le langage ne peut pas être reconnu par une machine à états finis et n'est donc pas régulier.xx{y:xyL}


N'est-ce pas juste Myhill-Nerode?
David Richerby
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.