Jak udowodnić, że język nie jest regularny?


75

Dowiedzieliśmy się o klasie języków zwykłych . Charakteryzuje go dowolna koncepcja wśród wyrażeń regularnych, automatów skończonych i gramatyk lewostronnych, więc łatwo jest wykazać, że dany język jest regularny.REG

Jak jednak pokazać coś przeciwnego? Moja TA była nieugięta, że ​​aby to zrobić, musielibyśmy wykazać dla wszystkich wyrażeń regularnych (lub dla wszystkich automatów skończonych lub dla wszystkich gramatyk lewostronnych), że nie potrafią opisać języka, który jest pod ręką. To wydaje się dużym zadaniem!

Czytałem o lemie pompującym, ale wygląda to na bardzo skomplikowane.

To ma być pytanie referencyjne gromadzące zwykłe metody dowodowe i przykłady zastosowań. Zobacz tutaj to samo pytanie dotyczące języków bezkontekstowych.

Odpowiedzi:


60

Dowód sprzeczności jest często używany do wykazania, że ​​język nie jest regularny: niech jest właściwością prawdziwą dla wszystkich zwykłych języków, jeśli twój konkretny język nie weryfikuje , to nie jest on regularny. Można użyć następujących właściwości:PPP

  1. Tłoczący się lemat, czego przykładem jest odpowiedź Dave'a ;
  2. Właściwości zamknięcia zwykłych języków (operacje na zestawach, konkatenacja, gwiazda Kleene, lustro, homomorfizmy);
  3. Zwykły język ma skończoną liczbę klas równoważności prefiksów, twierdzenie Myhill – Nerode .

Aby udowodnić, że język nie jest regularny przy użyciu właściwości zamknięcia, technika polega na połączeniu języka L ze zwykłymi językami za pomocą operacji, które zachowują prawidłowość w celu uzyskania języka znanego jako nieregularny, np. Język archetypiczny I = { a n b n | n N } . Na przykład, niech L = { a p b q | p q } . Załóżmy, że L jest regularny, ponieważ zwykłe języki są zamknięte pod uzupełnieniem, podobnie jak L jest uzupełnieniem L.LLI={anbn|nN}L={apbq|pq}LL . Teraz podjąć przecięcie L C i do b który jest regularny, otrzymujemy ja , który nie jest regularny.LcLcabI

Twierdzenie Myhill – Nerode można wykorzystać do udowodnienia, że ​​nie regularny. Dla p 0 , I / P = { R b R b p | R N } = I . { b p } . Wszystkie klasy są różne i istnieje policzalna nieskończoność takich klas. Ponieważ zwykły język musi mieć skończoną liczbę zajęć , nie jestem regularny.Ip0I/ap={arbrbp|rN}=I.{bp}I


3
Nie wiedziałem o twierdzeniu Myhill-Nerode, spoko!
Daniil

Wikipedia ma również sekcję o liczbie słów w zwykłym języku: jeśli możesz udowodnić, że twój język nie pasuje do charakterystyki, to twój język nie jest regularny: en.wikipedia.org/wiki/…
Alex ten Brink

@Daniil, wyrażenia regularne nie mogą się liczyć, wydaje mi się popularnym nieformalnym sformułowaniem twierdzenia Myhill-Nerode.
AProgrammer

@AlextenBrink: To jest miłe. Sądzę, że stałe w zestawieniu są wartościami własnymi Laplaciana automatu? Byłby to miły dodatek do odpowiedzi tutaj.
Louis

@Louis: w rzeczywistości nie znaleźliśmy żadnego odniesienia do tego twierdzenia, więc jeśli wiesz więcej na ten temat ... Zobacz także: cs.stackexchange.com/questions/1045/…
Alex ten Brink

37

W oparciu o odpowiedź Dave'a, oto „instrukcja” krok po kroku jak używać lematu pompującego.

Przypomnijmy sobie pompujący lemat (wzięty z odpowiedzi Dave'a, wzięty z Wikipedii):

Niech L będzie zwykłym językiem. Następnie istnieje liczba całkowita n1 (w zależności tylko L ) taką, że każdy łańcuch w w L o długości co najmniej n ( n jest nazywany „długość pompowania”) może być zapisane jako w=xyz (to jest w puszce podzielić na trzy podciągi), spełniając następujące warunki:

  1. |y|1
  2. |xy|n i
  3. Określenie "pompowana" w jeszcze w L wszystka i0 , xyizL .

Załóżmy, że znasz język L i chcesz pokazać, że nie jest on regularny poprzez lemat pompowania. Dowód wygląda następująco:

  1. Załóżmy, że L jest regularne.
  2. Jeśli jest regularny, to lemat pompowania mówi, że istnieje pewna liczba n która jest długością pompowania.
  3. Wybierz konkretne słowo wL o długości większej niż n . Trudność polega na tym, aby wiedzieć, które słowo wybrać.
  4. Rozważ WSZYSTKIE sposoby podzielenia w na 3 części, w=xyz , za pomocą |xy|n i y niepuste. Dla każdego z tych sposobów, pokazują, że nie mogą być pompowane: istnieje zawsze pewne i0 taka, że xyizL .
  5. Wniosek: słowa w nie można „pompować” (bez względu na to, jak podzielimy je na xyz ) w przeciwieństwie do lematu pompowania, tzn. Nasze założenie (krok 1) jest błędne: L nie jest regularne.

Zanim przejdziemy do przykładu, powtórzę krok 3 i krok 4 (w tym miejscu większość ludzi się myli). W punkcie 3 należy wybrać jeden konkretny wyraz w L . zapisz to wprost, np. „00001111” lub „ anbn ”. Przykłady rzeczy, które nie są konkretnym słowem: „ w ” lub „słowo, które ma 000 jako przedrostek”.

Z drugiej strony w kroku 4 należy rozważyć więcej niż jedną sprawę. Na przykład, jeśli w=000111 nie wystarczy powiedzieć x=00,y=01,z=00 , a następnie dojść do sprzeczności. Musisz również sprawdzić x=0,y=0,z=0111 i x=ϵ,y=000,z=111 i wszystkie inne możliwe opcje.


Teraz wykonajmy następujące kroki i udowodnij, że L={0k12kk>0} nie jest regularne.

  1. Załóżmy, że L jest regularny.
  2. Niech n będzie długością pompowania podaną przez lemat pompowania.
  3. Niech w=0n12n .
    (kontrola poczytalności: |w|>n w razie potrzeby. Dlaczego to słowo? inne słowa też mogą działać .. potrzeba trochę doświadczenia, aby znaleźć właściwe w ). Ponownie zwróć uwagę, że w jest specyficznym słowem: 0000n times11112n times .
  4. Teraz zacznijmy rozważać różne przypadki podzielenia w na xyz pomocą |xy|n oraz |y|>0 . Ponieważ |xy|<n bez względu na to, jak podzielimy w , x będzie składać się tylko z zer, a więc y . Załóżmy |x|=s i |y|=k . Musimy rozważyć WSZYSTKIE opcje, czyli wszystkie możliwe s,k takie, żes0,k1 orazs+kn . W TYML dowód na wszystkie te przypadki jest taki sam, ale ogólnie może być inny.
    weźi=0 i rozważxyiz=xz . to słowo NIE jest wL ponieważ ma postać0nk12n (bez względu nas ikbyły), a ponieważ k1 , tego słowa nie ma w L i dochodzimy do sprzeczności.
  5. Zatem nasze założenie jest błędne, a L nie jest regularne.

Klip youtube, który wyjaśnia, jak używać lematu pompującego według tych samych linii, można znaleźć tutaj


1
W tej definicji jest to długość pompowania!
saadtaame

28

Z Wikipedii język pompowania dla zwykłych języków jest następujący:

Niech będzie zwykłym językiem. Następnie istnieje całkowita P 1 (w zależności tylko L ) taką, że każdy łańcuch wagowych w L o długości co najmniej p ( p nazywany jest „długość pompowania”) może być zapisane jako W = x y Z (czyli w puszce podzielić na trzy podciągi), spełniając następujące warunki:Lp1LwLppw=xyzw

  1. |y|1
  2. i |xy|p
  3. dla wszystkich , x y i z l . y jest podciągiem, który można pompować (usuwać lub powtarzać dowolną liczbę razy, a wynikowy ciąg jest zawsze w L ). i0xyizL
    yL

(1) oznacza, że ​​pętla y, która ma być pompowana, musi mieć co najmniej jedną długość; (2) oznacza, że ​​pętla musi wystąpić w obrębie pierwszych p znaków. Nie ma ograniczeń dla xiz.

W prostych słowach: Dla każdego języka regularnego L każde wystarczająco długie słowo można podzielić na 3 części. tj W = X Y z , tak, że wszystkie struny x y k oo o k 0 jest także L .wLw=xyzxykzk0L

Rozważmy teraz przykład . Niech .L={(01)n2nn0}

Aby pokazać, że nie jest to regularne, należy rozważyć, jak wyglądają wszystkie dekompozycje , więc jakie są wszystkie możliwe rzeczy x, y i z, że x y z = ( 01 ) p 2 p (decydujemy się przyjrzeć temu słowu o długości 3 p , gdzie p jest długością pompowania). Musimy rozważyć, gdzie występuje część y ciągu. Może pokrywać się z pierwszą częścią, a zatem będzie równa albo ( 01 ) k + 1 , ( 10 )w=xyzxyz=(01)p2p3ppy(01)k+1 ,1(01 ) k lub0(10 ) k , dla niektórychk0(nie zapomnij, że | y |1). Może się pokrywać z drugą częścią, co oznacza, żey= 2 k , dla niektórychk>0. Lub może nakładać się na dwie części słowa i będzie mieć postać(01 ) k + 1 2 l ,(10 ) k(10)k+11(01)k0(10)kk0|y|1y=2kk>0(01)k+12l ,1(01 ) k 2 l lub0(10 ) k 2 l , dlak0il1.(10)k+12l1(01)k2l0(10)k2lk0l1

Teraz pompuj każdy, aby uzyskać sprzeczność, która będzie słowem nie w twoim języku. Na przykład, jeśli weźmiemy , lemat pompowania mówi na przykład, że x y 2 z = x 0 ( 10 ) k 2 l 0 ( 10 ) k 2 l z musi znajdować się w język, przez odpowiedni dobór X i z . Ale to słowo nie może być w języku, ponieważ 2 pojawia się przed 1 .y=0(10)k2lxy2z=x0(10)k2l0(10)k2lzxz21

Inne przypadki spowodują, że liczba będzie większa niż liczba 2 lub odwrotnie, lub spowoduje, że słowa, które nie będą miały struktury ( 01 ) n 2 n , na przykład przez dwa zera z rzędu.(01)2(01)n2n0

Nie zapominaj, że . Przydatne jest tutaj skrócenie dowodu: wiele powyższych rozkładów jest niemożliwych, ponieważ spowodowałyby, że część Z byłaby zbyt długa.|xy|pz

Każdy z powyższych przypadków musi prowadzić do takiej sprzeczności, która byłaby wówczas sprzecznością z pompującym lematem. Voila! Język nie byłby regularny.


Przykład, w którym hipoteza jest potrzebne byłoby miło. |xy|p
Gilles

@Gilles: Nie jestem nawet pewien, co oznacza dodane zdanie.
Dave Clarke

@Gilles: Myślę, że wszystkie dekompozycje są możliwe, tylko że będzie ograniczone. Nie jestem pewien, co to ma wspólnego z długością z . kz
Dave Clarke

Hه! Teraz to widzę. Dzięki. Nie wyklucza to jednak żadnej z form rozkładu wymienionych w odpowiedzi; ogranicza tylko to, jakie wartości i l mogę przyjąć. kl
Dave Clarke

1
Ilość edycji, która została wykonana, aby odpowiedzieć na tak łatwe pytanie, sprawia, że ​​zastanawiam się, dlaczego wszyscy uczą pompowania lematu jako „sposobu” udowodnienia nieregularności. Z ciekawości, dlaczego nie wziąć swojego sznurka za coś w stylu ? Pompowanie lemat mówi, że Y ma 2 s w nim, z których sprzeczność jest bardziej proste. (01)2p22py2
Louis

14

Dla danego języka pozwólLΣ

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

The (zwykłe) generowania funkcji z , czyli jego sekwencję liczbę słów na długości.L

Następująca instrukcja zawiera [ FlSe09 , p52]:

LREGSL rational

Oznacza to, że zwielomianamiP,Q.SL(z)=P(z)Q(z)P,Q

SL

Przykład: Weź pod uwagę język poprawnie zagnieżdżonych nawiasów, tj . Język Dyck . Jest generowany przez jednoznaczną gramatykę

S[S]Sε

co można przełożyć na równanie

S(z)=z2S2(z)+1

jednym rozwiązaniem (tym ze wszystkimi dodatnimi współczynnikami) jest

S(z)=114z22z2

SL=SS


  1. Dowód stwierdzenia dla zwykłych języków działa przez gramatykę i natychmiast przenosi do gramatyki liniowej (przemienność mnożenia).

  [FlSe09] Analytic Combinatorics autorstwa P. Flajolet i R. Sedgewick (2009) [Kuic70] O entropii języków bezkontekstowych W. Kuich (1970)
  


13

L={(01)m2mm0}

Myślisz, że pompowanie lematu wygląda na skomplikowane? Nie martw się Oto nieco inne podejście, ukryte również w odpowiedzi @ Romualda. (Quiz: gdzie?)

Zacznijmy od przypomnienia, że ​​każdy język regularny jest akceptowany przez deterministyczny automat skończony (DFA). DFA to skończony wykres, w którym każdy wierzchołek ma dokładnie jedną krawędź na każdą literę alfabetu. Ciągi umożliwiają przejście na wykresie opartym na wierzchołku oznaczonym „początek”, a DFA akceptuje, jeśli ten spacer kończy się na wierzchołku oznaczonym „zaakceptuj”. (Wierzchołki nazywane są „stanami”, ponieważ różne obszary matematyki lubią tworzyć własną terminologię dla tego samego.)

abcacbc

LabcacbcL

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

Zaletą jest to, że przykład jest tak naprawdę szablonem do udowodnienia, że ​​języki nie są regularne:

  • {ai:iN}tiaitiaitjij
  • ai

Istnieją inne sztuczki, ale ta z łatwością sprawdzi się w przypadku większości problemów domowych.

Edycja: Wcześniejsza wersja omawiała, w jaki sposób ten pomysł odnosi się do Pumping Lemma.


Nie sądzę, że powielanie dowodu Pumping Lemma jest ogólnie przydatne, ale YMMV. Zrozumienie dowodu jest dobre w każdym przypadku; jest to natychmiast związane z szeregiem zamknięcia i innymi interesującymi właściwościami automatów skończonych i zwykłych języków. Jednak zdecydowanie nie zgadzam się z ostatnim zdaniem: teoria automatów wcale nie jest nudna i na pewno nie jest to najbardziej nudna część zajęć teoretycznych.
Raphael

@Louis W swojej odpowiedzi, jak wymyśliłeś to stwierdzenie we see that a2p is in the language and b2p is not, so this language can't be regular.w ostatnim. Proszę podać przykład
Himanshu,

abq12pq2ab

7

Po odpowiedzi tutaj opiszę metodę udowodnienia nieregularności opartą na złożoności Kołmogorwa.

Podejście to omówiono w „Nowym podejściu do formalnej teorii języka przez złożoność Kołmogorowa” , autorstwa Ming Li i Paula MB Vitanyi (patrz sekcja 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. Jeśli to jest skończone.Aρ=0A

  3. Jeśli to jest cofinite (to znaczy jest skończone).A ¯ Aρ=1AA¯

Na przykład język nie jest regularny, ponieważ zbiór ma zanikającą gęstość asymptotyczną, ale jest nieskończony.L({2n:n0})


4

Klasa języków zwykłych jest zamykana w ramach różnych operacji zamykania, takich jak łączenie, przecinanie, uzupełnianie, homomorfizm, regularne podstawianie, odwrotny homomorfizm i inne. Można to wykorzystać do udowodnienia, że ​​dany język nie jest regularny, poprzez redukcję do języka, który jest już znany jako nieregularny.

Jako bardzo prosty przykład, załóżmy, że wiemy, że język nie jest regularny. Wtedy możemy udowodnić, że język (język wszystkich słów z równie wiele s i s) nie jest regularny, jak następuje:{anbn:n0}{w{a,b}:#a(w)=#b(w)}ab

Załóżmy, że były regularne. Wtedy również będzie normalny. Ale , o którym wiadomo, że nie jest regularny.L={w{a,b}:#a(w)=#b(w)}LabLab={anbn:n0}

Oto bardziej skomplikowany przykład. Pokażmy, że język nie jest regularny.L={(0+1)n2(0+1)n:n0}

Niech będzie mapowaniem homomorfizmu podanym przez , , . Gdyby były regularne, to następujący język to: . Wiemy jednak, że to ostatnie nie jest regularne.hh(0)=0h(1)=1h(2)=ϵLh(L021)={0n1n:n0}

Wreszcie, oto przykład wykorzystujący odwrotny homomorfizm. Pokażmy, że język nie jest regularny.L={0n10n:n0}

Niech będzie homomorfizmem określonym przez , , . Gdyby były regularne, to byłoby, ale to tylko język z poprzedniego przykładu.kk(0)=0k(1)=0k(2)=1Lk1(L)L


3

Użyj teorii Myhill – Nerode.

Niech będzie językiem. Mówimy, że dwa słowa są inequivalent modulo (czyli w odniesieniu do ) jeśli istnieje słowo takiego, że dokładnie jeden jest w . W dowolnym DFA dla , (ćwiczenie). To implikuje następujące kryterium:Lx,yLLzxz,yzLLδ(q0,x)δ(q0,y)

Niech będzie językiem. Załóżmy, że istnieje nieskończony zestaw par nierównomiernych słów (to znaczy nieskończony zestaw tak że dowolne dwa nierównomierne są nierównomiernym modułem ). Wtedy nie jest regularny.LSx,ySLL

Oto prosty przykład zastosowania tego kryterium:

Język nie jest regularny.L={anbn:n0}

Dowód. Niech . Stwierdzamy, że dwie różne słowa są inequivalent modulo . Rzeczywiście, niech , gdzie . Następnie a .S={an:n0}SLai,ajSijaibiLaibjL

Ważną cechą tej metody jest to, że gwarantuje sukces: jeśli nie jest regularne, istnieje nieskończony zestaw par nierównomiernych słów. Jest to konsekwencja twierdzenia Myhill – Nerode . W skrócie, moduł równoważności (negacja nierówności modułu zdefiniowany powyżej) jest relacją równoważności, a język jest regularny, jeżeli liczba klas równoważności modułu równoważności jest skończona. Jeśli nie jest regularne, pobranie jednego słowa z każdej klasy równoważności stanowiłoby nieskończony zestaw nierównych słów.LLLLLL


1

Biorąc pod uwagę język , każdy ciąg jest zbiorem ciągów takie, że . Każdy taki zestaw może być używany jako stan w maszynie stanu.LxyxyL

Wszystko, co musisz zrobić, to pokazać, że liczba takich zestawów nie jest skończona.

Jako przykład niech . Biorąc pod uwagę dla niektórych , jedynym ciągiem takim, że jest . Więc dla każdego mamy inny zestaw, co oznacza, że nie jest regularny.L=anbn:n0x=anbn1yxyLy=bn1nL

Ogólnie rzecz biorąc, jeśli znajdziesz nieskończony zestaw ciągów taki, że każdy daje inny zestaw wówczas język nie może zostać rozpoznany przez maszynę skończoną i dlatego nie jest regularny.xx{y:xyL}


Czy to nie tylko Myhill-Nerode?
David Richerby
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.