W teoretycznej informatyki i teorii języka , niejednoznaczne lub niejednoznaczna gramatyki jest algebraiczne gramatyka , która przyjmuje słowo z dwóch różnych lewych indeks lub - równoważnie - dwa odrębne drzewami pochodne . Niejednoznaczność lub jednoznaczność jest właściwością gramatyki, a nie języków. Wiele języków dopuszcza zarówno gramatyki niejednoznaczne, jak i jednoznaczne, podczas gdy inne mają tylko gramatyki niejednoznaczne. Jeden język, dla którego wszystkie gramatyki są niejednoznaczne, nazywany jest z natury niejednoznacznym (lub z natury niejednoznacznym) , pozostałe nazywane są językami jednoznacznymi .
Gramatyka odniesienia języków programowania jest czasami niejednoznaczna z powodu konstrukcji, które prowadzą do problemów, takich jak problem wiszący else . Takie niejasności są zwykle rozwiązywane poprzez dodanie reguł pierwszeństwa lub innych reguł, kontekstowych, które czynią ostateczną gramatykę jednoznaczną.
Gramatyka algebraiczne zdefiniowany przez następującą zasadą
A → A + A | A - A | wjest niejednoznaczne, ponieważ słowo a + a - a ma dwie różne lewe wyprowadzenia:
A → A - A → A + A - A → a + A - A → a + a - A → a + a - ai
A → A + A → a + A → a + A - A → a + a - A → a + a - aW pierwszym kroku reguła A → A + A jest używana w drugim kroku; w drugiej, przeciwnie, stosuje się regułę A → a.
Te wyprowadzenia dają dwa różne drzewa derywacji:
Sam język jest jednoznaczny (tj. Nie jest z natury niejednoznaczny), ponieważ jest generowany na przykład przez jednoznaczną gramatykę, która następuje:
A → A + a | A - a | wJęzyk palindromów jest jednoznaczny. Jest generowany (na przykład na alfabecie a, b) przez jednoznaczną gramatykę, zdefiniowaną przez następującą regułę:
A → aAa | bAb | a | b | εPrzykład 1 - Język jest algebraiczny i z natury niejednoznaczny.
Każdy z języków i jest algebraiczny. Pierwsza jest na przykład generowana przez następującą gramatykę:
S → Sc | T T → aTb | εjest algebraiczny jako związek tych dwóch języków algebraicznych.
Słowa są problemem. Możemy udowodnić, używając lematu Ogdena (dowód jest na odpowiedniej stronie), że nie ma jednoznacznej gramatyki dla tego języka. Inne przykłady podano w książce Harrisona lub w książce Cartona. Inną metodą zademonstrowania nieodłącznej niejednoznaczności języka jest przejście przez funkcję generatora, która wylicza liczbę słów danej długości w języku. Zgodnie z twierdzeniem Chomsky'ego-Schützenbergera , ten szereg jest algebraiczny dla języka generowanego przez jednoznaczną gramatykę.
Przykład 2 - Goldstine język jest z natury niejednoznaczne.
To jest przykład zastosowania tej metody.
Przykład 3 - Język utworzony przez słowa , gdzie i są palindromami, jest z natury niejednoznaczny.
Podczas gdy sam język palindromów jest jednoznaczny.
Przykład 1 ' - Język słów składających się z trzech liter i utworzonych słów, takich jak lub, jest z natury niejednoznaczny.
Ten język jest zbliżony do pierwszego podanego przykładu.
DemonstracjaDemonstracja jest interesująca, ponieważ przechodzi przez komplementarność. Próbujemy pokazać, że generujący ciąg języka nie jest algebraiczny. Wystarczy, aby udowodnić, że szereg generujący język komplementarny
nie jest algebraiczne. Teraz ta seria jest
a według wzoru Stirlinga współczynnik asymptotycznie równa się
.Jednak zgodnie z ogólnym wynikiem Philippe'a Flajoleta , asymptotyczny odpowiednik formy jest charakterystyczny dla funkcji transcendentnej.
W deterministycznych językach algebraicznych zawsze występuje niejednoznaczna gramatyka. Stanowią ścisłą podklasę rodziny języków jednoznacznych. Powyższy język palindromów stanowi przykład niedeterministycznego języka algebraicznego, który jest jednoznaczny.
Własność - następujący problem jest nierozstrzygalny : „Czy dana gramatyka jest niejednoznaczna?” ”.
Dowód podany poniżej dotyczy problemu korespondencji Post .
DemonstracjaMożemy zmniejszyć korespondencji problemu Post mogą problemu niejednoznaczności.
Rozważmy przykład problemu korespondencji pocztowej (PCP) w alfabecie . Wprowadzamy nowy alfabet złożony z liter nienależących do . Na alfabecie definiujemy dwa języki:
.Organ PCP dopuszcza rozwiązanie wtedy i tylko wtedy, gdy . Język jest generowany przez gramatykę z następującymi zasadami:
Łatwo zauważyć, że ta gramatyka jest niejednoznaczna wtedy i tylko wtedy , gdy ; i że to skrzyżowanie jest puste wtedy i tylko wtedy, gdy dopuszcza rozwiązanie. Redukcja jest obliczeniem powyższej gramatyki z instancji PCP . Dowodzi to, że problem niejednoznaczności jest nierozstrzygalny.
Stopień dwuznaczności wyrazu w generowanego przez gramatykę jest liczba pozostawionych indeks, inne, które sprawiają, że można dojść do słowa wag . Stopień niejednoznaczności gramatyki to maksymalna (prawdopodobnie nieskończona) liczba stopni słów wygenerowanych przez tę gramatykę.
Własność - istnieją języki z natury niejednoznaczne, dla których stopień niejednoznaczności dowolnej gramatyki jest nieskończony.
Rozstrzygalność z następującym stwierdzeniem jest problemem otwartym (w roku 1977): „Biorąc pod uwagę gramatykę, jest jego stopień niejednoznaczności skończoności?” "