Gramatyki są z natury obiektami rekurencyjnymi, więc odpowiedź wydaje się oczywista: przez indukcję. To powiedziawszy, specyfika często jest trudna do osiągnięcia. W dalszej części opiszę technikę, która pozwala zredukować wiele dowodów poprawności gramatycznej do kroków mechanicznych, pod warunkiem, że zostanie przeprowadzone pewne twórcze przetwarzanie wstępne.
Podstawową ideą jest nie ograniczanie się do słów gramatyki i języka; w ten sposób trudno jest pojąć strukturę gramatyki. Zamiast tego będziemy kłócić się o zestaw zdań, które gramatyka może stworzyć. Ponadto podzielimy jeden zniechęcający cel próbny na wiele małych celów, które są bardziej wykonalne.
Niech formalnym gramatyki z nie-zaciski , końcówki , Reguły i wyjściowych symboli . Oznaczamy przez zestaw zdań, które mogą pochodzić od danego , to jest . Językiem generowanym przez jest . Załóżmy, że chcemy pokazać, że dla niektórych .G=(N,T,δ,S)T δ S ∈ N ϑ ( G ) S δ α ∈ ϑ ( G )NTδS∈Nϑ(G)SδG L ( G ) = ϑ ( G ) ∩ T ∗ L = L ( G ) L ⊆ T ∗α∈ϑ(G)⟺S⇒∗αGL(G)=ϑ(G)∩T∗L=L(G)L⊆T∗
Ansatz
Oto jak to robimy. Definiujemy tak, abyM1,…,Mk⊆(N∪T)∗
- ϑ(G)=⋃i=1kMi i
- T∗∩⋃i=1kMi=L .
Podczas gdy 2. jest zwykle jasne z definicji , 1. wymaga poważnej pracy. Te dwa elementy wyraźnie oznaczają zgodnie z życzeniem.L ( G ) = L.MiL(G)=L
Dla ułatwienia notacji oznaczmy .M=⋃ki=1Mi
Kamienista droga
Istnieją dwa główne kroki do przeprowadzenia takiego dowodu.
Jak znaleźć (dobre) ? Mi
Jedną ze strategii jest badanie faz, przez które przechodzi gramatyka. Nie każda gramatyka nadaje się do tego pomysłu; ogólnie rzecz biorąc, jest to twórczy krok. Pomaga, jeśli sami możemy zdefiniować gramatykę; z pewnym doświadczeniem będziemy w stanie zdefiniować gramatyki bardziej przystępne dzięki temu podejściu.
Jak udowodnić 1.?
Podobnie jak w przypadku każdej równości, istnieją dwa kierunki.
- Gϑ(G)⊆M (strukturalnego) indukcja przez realizacjach .G
- M i SM⊆ϑ(G) : zazwyczaj jeden indukcję , począwszy od jednego, że zawiera .MiS
Jest to tak szczegółowe, jak to możliwe; szczegóły zależą od gramatyki i języka.
Przykład
Zastanów się nad językiem
L={anbncm∣n,m∈N}
a gramatyka z podanym przezδG=({S,A},{a,b,c},δ,S)δ
SA→Sc∣A→aAb∣ε
dla którego chcemy pokazać, że . Na jakich etapach działa ta gramatyka? Najpierw generuje a następnie . To natychmiast informuje nasz wybór , a mianowiciec m a n b n M iL=L(G)cmanbnMi
M0M1M2={Scm∣m∈N},={anAbncm∣m,n∈N},={anbncm∣m,n∈N}.
Ponieważ i , pozycja 2. jest już zajęta. W stronę 1. podzieliliśmy dowód na dwie części, zgodnie z zapowiedzią.M 0 ∩ T ∗ = M 1 ∩ T ∗ = ∅M2=LM0∩T∗=M1∩T∗=∅
ϑ(G)⊆M
Wykonujemy indukcja strukturalna wraz z zasadami .G
IA: Ponieważ pomyślnie zakotwiczamy.S=Sc0∈M0
IH: Załóżmy, że dla pewnego zbioru zdań że my też znamy .X ⊆ MX⊆ϑ(G)X⊆M
IS: Niech dowolnie. Musimy pokazać, że bez względu na formę ma i co reguła stosowana jest obok, nie zostawiać . Robimy to poprzez pełne rozróżnienie poszczególnych przypadków. Dzięki hipotezie indukcyjnej wiemy, że (dokładnie) ma zastosowanie jeden z następujących przypadków:α Mα∈X⊆ϑ(G)∩MαM
- w∈M0 , czyli dla niektórych .
Można zastosować dwie reguły, z których obie wyprowadzają zdanie w języku :
m ∈ N Mw=Scmm∈N
M
- Scm⇒Scm+1∈M0 i
- Scm⇒Acm=a0Ab0cm∈M1 .
- w =w∈M1 , tj. dla niektórych :
m , n ∈ Nw=anAbncmm,n∈N
- w⇒an+1Abn+1cm∈M1 i
- w⇒anbncm∈M2 .
- w ∈ T ∗w∈M3 : ponieważ , dalsze pochodne nie są możliwe.w∈T∗
Ponieważ udało nam się objąć wszystkie przypadki, indukcja jest zakończona.
ϑ(G)⊇M
Wykonujemy jeden (prosty) dowód na . Zauważ, jak łączymy dowody, aby „później” mógł zakotwiczyć za pomocą „wcześniejszego” .M i M iMiMiMi
- mM1 : Wykonujemy indukcję nad , zakotwiczając w i używając w kroku.mS → S cSc0=SS→Sc
- m n A c m S ⇒ ∗ S c mM2 : do dowolnej wartości i indukujemy ponad . Zakotwiczamy w , używając tego na podstawie poprzedniego dowodu. Krok przechodzi od .mnAcm A → a A bS⇒∗Scm⇒AcmA→aAb
- m , n ∈ N S ⇒ ∗ a n A b n c mM3 : Dla dowolnego używamy poprzedniego dowodu dla .m,n∈NS⇒∗anAbncm⇒anbncm
To kończy drugi kierunek dowodu 1. i jesteśmy skończeni.
Widzimy, że mocno wykorzystujemy gramatykę liniową . W przypadku gramatyki nieliniowej potrzebujemy z więcej niż jednym parametrem zmiennym (w dowodzie (dowodach)), które mogą stać się brzydkie. Jeśli mamy kontrolę nad gramatyką, uczy nas to prostego. Rozważ jako odstraszający przykład gramatykę równoważną : G.MiG
SAC→aAbC∣ε→aAb∣ε→cC∣ε
Ćwiczenie
Podaj gramatykę dla
L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2}
i udowodnić swoją poprawność.
Jeśli masz problemy, gramatyka:
Zastanów się z produkcjamiG=({S,Br,Bl,A,C},{a,b,c},δ,S)
SBlBrAC→bSb∣Bl∣Br→bBl∣bA→Brb∣Ab→aAaa∣C→bcC∣bcbc
i :Mi
M0M1M2M3M4M5={biSbi∣i∈N}={biBlbo∣o∈N,i≥o}={bkBrbi∣k∈N,i≥k}={bkaiAa2ibo∣k,o,i∈N,k≠o}={bkal(bc)iCa2lbo∣k,o,l,i∈N,k≠o}=L
Co z gramatykami nieliniowymi?
Cechą charakterystyczną klasy języków bezkontekstowych jest język Dyck : zasadniczo każdy język bezkontekstowy może być wyrażony jako przecięcie języka Dyck i języka zwykłego. Niestety, język Dyck nie jest liniowy, tzn. Nie możemy nadać gramatyki, która z natury byłaby odpowiednia dla tego podejścia.
Możemy, oczywiście, nadal zdefiniować i wykonać dowód, ale z pewnością będzie to trudniejsze w przypadku zagnieżdżonych indukcji, a co nie. Znam jeden ogólny sposób, który może w pewnym stopniu pomóc. Zmieniamy ansatz na wyświetlanie, że generujemy co najmniej wszystkie wymagane słowa i że generujemy odpowiednią liczbę słów (na długość). Formalnie to pokazujemyMi
- ϑ(G)⊇L i
- n∈ N|L(G)∩Tn|=|L∩Tn|dla wszystkich .n∈N
W ten sposób możemy ograniczyć się do „łatwego” kierunku z oryginalnego ansatz i wykorzystać strukturę w języku, ignorując nadmiernie skomplikowane funkcje gramatyki. Oczywiście nie ma darmowego lunchu: otrzymujemy zupełnie nowe zadanie liczenia słów generowanych przez dla każdego . Na szczęście dla nas jest to często wykonalne; zobacz tutaj i tutaj, aby uzyskać szczegółowe informacje¹. Możesz znaleźć kilka przykładów w mojej pracy licencjackiej .n ∈ NG n∈N
Jeśli chodzi o dwuznaczne i pozbawione kontekstu gramatyki, obawiam się, że wróciliśmy do ansatz one i myśląc o ograniczeniach.
- Korzystając z tej konkretnej metody liczenia, otrzymujemy jako bonus, że gramatyka jest jednoznaczna. To z kolei oznacza również, że technika musi zawieść dla dwuznacznych gramatyk, ponieważ nigdy nie możemy udowodnić 2.