Lemat o pompowaniu dla języków regularnych

Z testwiki
Wersja z dnia 02:58, 15 cze 2023 autorstwa imported>Nux (WP:SK, stare interwiki)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania
Przykład automatu akceptującego język spełniający lemat o pompowaniu – a(bc)*d

Lemat o pompowaniu dla języków regularnych – twierdzenie najczęściej używane do dowodzenia, że dany język formalny nie jest językiem regularnym. Lemat brzmi[1]:

Jeśli L jest językiem regularnym, to istnieje takie n1, że wL,|w|n istnieje podział w na podsłowa x,y,zΣ* (w=xyz), t.że:
  • yϵ
  • |xy|n
  • k0 xykzL.

Nieformalnie lemat orzeka, że każde dostatecznie długie słowo w języku regularnym może być „pompowane”, tj. jego pewna środkowa część może zostać powielona dowolną liczbę razy, a powstałe słowo nadal będzie należeć do danego języka.

Przykład zastosowania

Udowodnijmy, że język słów postaci akbk dla k>0 nie jest regularny.

Załóżmy, że jest on regularny. Niech n będzie stałą z lematu o pompowaniu. Weźmy teraz słowo anbn i jego podział spełniający warunki lematu. xy musi leżeć w całości w części an słowa. Inne podziały nie są możliwe, ponieważ |xy|n, więc sytuacja, w której xy=anbp dla pewnego p>0, nie może mieć miejsca. Mamy więc podział x=aq, y=ap, z=anqpbn. Zgodnie z lematem do języka należeć musiałoby też słowo xy2z=aqapapanpqbn=an+pbn, które ma jednak więcej a niż b i do języka nie należy.

Pokazaliśmy, że dla każdego podziału spełniającego warunki lematu istnieje k, wyprowadzające słowo poza język. Stąd badany język nie jest regularny.

Dowód

Niech L będzie językiem regularnym. Istnieje wtedy deterministyczny automat skończony A, t.że L(A)=L[2]. Załóżmy, że A ma n stanów. Niech wL będzie dowolnym słowem o długości co najmniej n. Wczytanie w wymaga wykonania co najmniej n przejść w automacie, co oznacza, że ścieżka odpowiadająca w odwiedzi co najmniej n+1 stanów (wliczając stan startowy). Z zasady szufladkowej wynika, że co najmniej jeden stan A pojawi się na ścieżce dwukrotnie.

Niech w=wi,wi+1,,wj dla i<j będzie podsłowem w takim, że w trakcie wczytywania w po wczytaniu wi i wj A znalazł się w tym samym stanie P, dla najmniejszego możliwego j. Zauważmy, że jn; gdyby tak nie było, moglibyśmy zastosować powyższy argument do początkowego fragmentu w długości n, dostając w kończące się wcześniej niż w, co byłoby sprzeczne z minimalnością j. w wyznacza podział w:

  • w1,w2,,wi1,wi oznaczmy jako x
  • wi+1,wi+2,,wj (w bez pierwszej litery) oznaczmy jako y
  • wj+1,wj+2,,w|w| oznaczmy jako z,

przy czym:

  • |y|1, ponieważ i<j|w|2|y|1
  • |xy|n, ponieważ jn.

Po wczytaniu x automat znajdzie się w stanie P. Wiemy, że po wczytaniu y ten stan się nie zmieni, oraz że z czytane od stanu P doprowadzi automat do stanu akceptującego. Możemy wobec tego powielić y tworząc w'k=xykz, k0. Po wczytaniu w'k A znajdzie się w stanie akceptującym, a więc k0 w'kL, co kończy dowód.

Zobacz też

Przypisy

Szablon:Przypisy