1. Lemat o pompowaniu dla języków bezkontekstowych
Niech L będzie dowolnym językiem bezkontekstowym. Wówczas istnieje stała pompowania n, zależna tylko od L, taka, że jeśli słowo z należy do języka L oraz ∣z∣≥n, to z=uvwxy, oraz
- ∣vx∣≥1
- ∣vwx∣≤n
- dla każdego i≥0 mamy uviwxiy∈L
(ten lemat rozszerza ten poprzedni lemat o pompowaniu dodając jeszcze pole x)
1.1. D-d
Mamy gramatykę G(L) w postaci normalnej Chomsky’ego (czyli mamy produkcje typu A→BC lub A→a; drzewo wyprowadzenia jest binarne patrząc na węzły wewnętrzne).
Niech ta nasza gramatyka G=(N,T,P,S) gdzie ∣N∣=k.
Ustalmy n=2k (stałą pompowania).
Bierzemy z∈L, z=z1,…,zn (składa się z n symboli).
Drzewo wyprowadzenia:
Bierzemy najdłuższą ścieżkę, która jest długości co najmniej długości lgn=k. Ścieżka zawiera co najmniej k+1 węzłów wewnętrznych, ale mamy tylko k nieterminali — czyli (pigeonhole principle) musimy mieć gdzieś powtórkę (oznaczmy przez A). Patrząc od dołu zaznaczamy poddrzewa, których korzeniami są te dwie instancje A:
Stosujemy podział słowa z=uvwxy:
I możemy je teraz „pompować”:
- uv0wx0y
- yv2wx2y
Dlatego lemat jest spełniony.
Chociaż jeszcze należy pokazać, że:
Wynika to z tego, że szukaliśmy pierwszych powtarzających się symboli od dołu, stąd poddrzewo (czerwone, większe) nie może być wyższe niż k. Co daje nam liczbę liści ≤2k.
1.2. Przykład
Mamy język L={aibici:i≥1}.
Używamy lematu w celu udowodnienia, że język L nie jest bezkontekstowy.
Weźmy n (stałą pompowania) i słowo z=anbncn.
- Zgodnie z lematem możemy pompować w obrębie jednego bloku znaków (a lub b lub c) ale wtedy zmienia się liczba tych znaków, a nie zmienia się liczba pozostałych, czyli wychodzimy z języka.
- Możemy pompować też znaki z dwóch sąsiednich bloków (a i b lub b i c) utrzymując ich równoliczność, ale wtedy zostaje problem z trzecim blokiem i także wypadamy z języka.
- Innych możliwości nie ma więc L nie jest bezkontekstowy.
1.3. Przykład
Mamy język L={aibjck:i=j∧j=k}.
Bierzemy słowo anbn+1cn+2. Ale pompując w sposób anbn−1(b2)i(c2)icn dostajemy słowa należące do języka.
Musimy wzmocnić ten lemat.
2. Lemat Ogdena — silniejsza wersja lematu o pompowaniu
Niech L będzie językiem bezkontekstowym. Wówczas istnieje stała pompowania n taka, że jeśli w słowie z∈L oznaczymy co najmniej n liter to możemy słowo z zapisać jako uvwxy i
- v oraz x mają łącznie co najmniej jedną oznaczoną literę
- vwx ma co najwyżej n oznaczonych liter
- dla każdego i≥0 mamy uviwxiy∈L.
2.1. D-d
Weźmy m>n, gdzie n=2∣N∣ i nasze słowo z=z1z2…zn…zm. Oznaczamy co najmniej n liter.
Znowu, tak jak wcześniej, budujemy drzewo wyprowadzenia i najdłuższą ścieżkę czyli od korzenia do liścia, tylko tym razem w następujący sposób:
jeśli jestem w danym wierzchołku to idę do poddrzewa, które ma „więcej” symboli oznaczonych w liściach.
Wyznaczona ścieżka ma co najmniej długość lgn=k. Co więcej jeśli zignorujemy wierzchołki, w których tylko jedno poddrzewo miało wierzchołki oznaczone to dalej mamy długość k.
Znowu, tak samo jak w poprzednim dowodzie mamy powtórki gdzieś wierzchołka A.
Więc analogicznie bierzemy poddrzewa:
Analiza podobna jak w poprzednim dowodzie, ale liczymy tylko symbole oznaczone.
W obu połówkach były symbole oznaczone, to v i x muszą mieć jakiś symbol oznaczony.
- Analogicznie, skoro liczyliśmy od dołu to wysokość (różowego) poddrzewa jest nie większa niż k wierzchołków dzielących symbole oznaczone, stąd vwx nie ma więcej niż 2k=n symboli.
2.2. Przykład
Kontynuacja przykładu
Mamy język L={aibjck:i=j∧j=k}.
Mamy m>n, gdzie n to stała pompowania.
Bierzemy słowo z=am+m!bmcm+m! — powinniśmy pompować najrzadziej występujący symbol.
Oznaczamy wszystkie litery b.
Zgodnie z lematem możemy:
- Pompować tylko litery b; jeśli pompujemy k liter to dla i=km!+1 czyli mamy równość b i a.
- Pompować tylko a i b (b i c) — znowu wypadamy z języka bo b zrównają się z c (b z a).
- Czy możemy równocześnie pompować a, b i c? — nie, bo to by nam już nie zapewniło wypadnięcia z języka.
3. Twierdzenie o zamkniętności operacji na j. bezkontekstowych
Języki bezkontekstowe są zamknięte na sumę, złożenie i domknięcie Kleene’ego.
3.1. D-d
Niech
- G1=(N1,T1,S1,P1)
- G2=(N2,T2,S2,P2)
przy czym N1∩N2=∅ i S∈/N1∪N2.
- G3=({S}∪N1∪N2,T1∪T2,S,P1∪P2∪{S→S1∣S2}) i L(G3)=L(G1)∪L(G2)
- G4=({S}∪N1∪N2,T1∪T2,S,P1∪P2∪{S→S1S2}) i L(G4)=L(G1)L(G2)
- G5=({S}∪N1,T1,S,P1∪{S→S1S∣ϵ}) i L(G5)=L(G1)∗
Twierdzenie o nie-zamkniętności operacji przecięcia na j. bezkontekstowych
Języki bezkontekstowe nie są zamknięte na przecięcie.
D-d
Niech
- A={aibici}
- B={aibicj} jest j. bezkontekstowym bo S→AB,A→ϵ∣aAbB→ϵ∣cB
- C={ajbici} (podobnie jak B)
Wówczas zauważmy, że
A=B∩C nie jest bezkontekstowy (przykład).