Download as pdf or txt
Download as pdf or txt
You are on page 1of 43

WYKŁAD 2, 2024

JĘZYKI, AUTOMATY, OBLICZENIA

Urszula Bentkowska
Gramatyka jako model obliczeń. Hierarchia Chomsky'ego

DEFINICJA. System przepisujący (ang. Rewriting system) jest to para , gdzie jest
dowolnym skończonym zbiorem (alfabetem), - skończoną relacją (zbiorem praw).

Fakt, że para zapisujemy, i nazywamy prawem przepisywania lub produkcją


w systemie .

DEFINICJA. Niech będzie dowolnym systemem przepisującym, a


dowolnymi słowami.

System przepisuje słowo na słowo (generuje z ) bezpośrednio, co oznacza się symbolem


,

jeśli istnieją słowa oraz prawo takie, że


DEFINICJA. System przepisuje słowo na słowo (generuje z ), co oznacza się symbolem
,
jeśli istnieją słowa oraz takie, że

Bezpośrednie wyprowadzenie jest relacją na wolnym monoidzie , a wyprowadzenie zwrotnym


i przechodnim domknięciem tej relacji.

Uwaga. Domknięcie przechodnie relacji dwuargumentowej jest to najmniejsza (w sensie inkluzji) relacja
przechodnia, która zawiera daną relację. Dla każdej relacji istnieje jej domknięcie przechodnie.

Ciąg nazywamy wyprowadzeniem lub wywodem w systemie .


Liczba określa długość wyprowadzenia. Wyprowadzenie oznacza się także następująco
Rozważa się systemy przepisujące generujące lub rozpoznające język.

DEFINICJA. Niech będzie dowolnym systemem przepisującym, a dowolnym, ustalonym


podzbiorem .

• językiem generowanym przez nazywamy zbiór

• językiem rozpoznawanym przez nazywamy zbiór:

• Gramatyka to jedno z najważniejszych pojęć teorii języków formalnych.

• Używany dalej, dla i , symbol oznacza liczbę wystąpień liter z alfabetu w


słowie .
DEFINICJA. Gramatyka jest to system , w którym

- skończony zbiór symboli nieterminalnych (alfabet nieterminalny),

- skończony zbiór symboli terminalnych (alfabet terminalny),

- skończona relacja, zbiór produkcji (praw),

- symbol początkowy (startowy).

Ponadto zakładamy, że i dla każdego .

A zatem w gramatyce alfabety terminalny i nieterminalny są rozłącznymi zbiorami, a słowo występujące


po lewej stronie produkcji zawiera co najmniej jeden symbol nieterminalny.

Fakt, że para zapisujemy

Wykorzystujemy też zdefiniowane dla systemów przepisujących pojęcia generowania bezpośredniego

i generowania .
DEFINICJA. Językiem generowanym przez gramatykę nazywamy zbiór

Łatwo zauważyć, że pomiędzy językiem a generującą go gramatyką nie ma odpowiedniości wzajemnie


jednoznacznej.

Dany język może być generowany przez wiele gramatyk, czasem o bardzo różnej strukturze
i własnościach.

Stąd potrzeba wprowadzenia pojęcia równoważności językowej dla gramatyk.

DEFINICJA. Gramatyki i są równoważne (językowo), gdy .


PRZYKŁAD.

(1) Gramatyka , w której

generuje język

(2) Gramatyka , w której

generuje język

Gramatyki i są równoważne.
(3) Gramatyka , w której
,

generuje język

(4) Gramatyka , w której ,

generuje język

Gramatyki i są równoważne.
Klasyfikacja Chomsky'ego
Wprowadzimy teraz cztery typy gramatyk określonych przez Noama Chomsky'ego.

Definicja. Gramatyka jest typu dla , gdy spełnia następujące


warunki:

Typ (0): każda gramatyka, czyli system spełniający warunki podane w definicji gramatyki.

Typ (1): kontekstowa, czyli gramatyka, w której każde prawo (produkcja) ze zbioru ma postać

gdzie lub

przy czym, jeśli , to nie występuje po prawej stronie w żadnym prawie z .


Typ (2): bezkontekstowa, czyli gramatyka, w której każde prawo ze zbioru ma postać

gdzie .

Typ (3): regularna, czyli gramatyka, w której każde prawo ze zbioru ma postać

gdzie .
Przykład. Gramatyki z poprzedniego przykładu są odpowiednio:

(1) - typu (3)


(2) - typu (2)
(3) - typu (1)
(4) - typu (0)

Natomiast język jest typu (3), język jest typu (1).


W oparciu o wprowadzone typy gramatyk określamy odpowiadające im rodziny (klasy) języków, oznaczając
przez:

: - rodzinę wszystkich języków typu 0,


: - rodzinę wszystkich języków typu 1, czyli języków kontekstowych,
: - rodzinę wszystkich języków typu 2, czyli języków bezkontekstowych,
: - rodzinę wszystkich języków typu 3, czyli języków regularnych.

Pomiędzy wprowadzonymi rodzinami języków zachodzą następujące zależności:

➢ Inkluzje pierwsza i trzecia wynikają bezpośrednio z definicji odpowiednich klas języków, a więc z
definicji gramatyk regularnej i bezkontekstowej oraz kontekstowej i typu (0).

➢ Natomiast fakt, że udowodniony zostanie później.

➢ Podobnie z dalszych rozważań wynika, że powyższe inkluzje są właściwe.


➢ Gramatyki spełniają warunek efektywności syntetycznej (efektywność syntetyczna daje w
rezultacie algorytm, który umożliwia wygenerowanie wszystkich słów danego języka).
➢ Systemami, które realizują warunek efektywności analitycznej, są automaty (efektywność
analityczna oznacza, że system opisu prowadzi do algorytmu, który w skończonej liczbie kroków
rozstrzyga, czy dowolne słowo należy, czy też nie należy do tego języka).

➢ Automaty działają w ten sposób, iż pod wpływem zewnętrznego sygnału zmieniają swój stan.
W efekcie tej zmiany rozpoznają bądź nie ciągi takich sygnałów reprezentowane przez słowa.
➢ Zatem działanie automatu polega na testowaniu kolejno słów z i określaniu, które z nich są
rozpoznawane (spełniają określone kryteria), a które nie są rozpoznawane.
➢ Ogół słów rozpoznanych przez automat tworzy język rozpoznawany przez ten automat. Dla każdej
z określonych powyżej rodzin języków, w sensie Chomsky'ego określa się odpowiadającą jej rodzinę
automatów.
➢ Język jest typu (i) dla , gdy jest rozpoznawany przez jakiś automat z odpowiedniej
rodziny.
➢ Definicje automatów i ich własności wprowadzane będą sukcesywnie przy prezentowaniu
poszczególnych rodzin języków.
Automat skończenie stanowy

Określimy język rozpoznawany przez automat i podamy warunki równoważne na to, by język był
rozpoznawany.

• Automat to drugi, obok gramatyki, model obliczeń będący przedmiotem badań teorii języków
i automatów.
• Automat, to model realizujący warunek efektywności analitycznej, czyli taki na podstawie którego
możliwe jest sformułowanie algorytmu rozstrzygającego w skończonej liczbie kroków, czy dowolne
słowo należy, czy też nie należy do języka rozpoznawanego przez ten automat.
• Inaczej można powiedzieć, że taki automat daje algorytm efektywnie rozstrzygający, czy dowolne
obliczenie sformułowane nad alfabetem automatu jest poprawne.
• Wprowadzony zostanie na początek automat, zwany automatem skończenie stanowym, który jest
jednym z najprostszych modeli obliczeń.
✓ Jest to model z bardzo istotnie ograniczoną pamięcią.
✓ Działanie takiego automatu sprowadza się do zmiany stanu pod wpływem określonego
zewnętrznego sygnału czy impulsu.
✓ Pomimo tych ograniczeń urządzenia techniczne oparte o modele takich automatów spotkać
możemy dość często, np. automatyczne drzwi, automaty sprzedające napoje, winda, czy też
urządzenia sterujące taśmą produkcyjną.
Przykład. Rozważmy drzwi automatycznie otwierane są sterowane automatem, którego działanie opisać
można, przyjmując następujące oznaczenia:

• Fakt, że osoba chce wejść do pomieszczenia zamykanego przez takie drzwi, identyfikowany przez
odpowiedni czujnik, opiszemy symbolem .
• Zamiar wyjścia symbolem .
• Symbol będzie związany z równoczesnym zamiarem wejścia jakiejś osoby i wyjścia innej.
• Symbol oznaczał będzie brak osób, które chcą wejść lub wyjść.

Zatem zbiór , to alfabet nad którym określimy automat o dwóch


stanach: poniższym grafem.
Uwaga. Animacja działania powyższego automatu jest dostępna na stronie
https://wazniak.mimuw.edu.pl/index.php?title=J%C4%99zyki,_automaty_i_obliczenia/Wyk%C5%82a
d_3:_Automat_sko%C5%84czenie_stanowy

• Automaty reagują więc na określone sygnały zewnętrzne reprezentowane przez litery alfabetu ,
zmieniając swój stan.
• Jeśli ustalimy stan początkowy automatu oraz dopuszczalne stany końcowe, to automat będzie testował
dowolne słowo z , startując ze stanu początkowego.
• Jeśli rezultatem finalnym działania automatu (obliczenia) będzie stan końcowy, to słowo będzie
rozpoznawane przez automat, a obliczenie określone takim słowem poprawne.
• Automaty można graficznie reprezentować jako etykietowane grafy skierowane.
• W takim grafie każdy wierzchołek odpowiada stanowi automatu, a każda strzałka pomiędzy
wierzchołkami i , etykietowana symbolem , oznacza przejście automatu ze stanu do stanu
pod wpływem litery .

Podamy teraz formalną definicję automatu.

Niech oznacza dowolny alfabet.

Od tego momentu wykładu zakładamy, że alfabet jest zbiorem skończonym.


Definicja. Automatem nad alfabetem nazywamy system , w którym

- jest dowolnym skończonym zbiorem zwanym zbiorem stanów (automat nazywamy skończonym lub
skończenie stanowym),

- jest funkcją przejść.

Automat będąc w stanie po przeczytaniu litery zmienia stan na zgodnie z funkcją przejścia
.

Funkcję przejść rozszerzamy na cały wolny monoid do postaci

przyjmując:

dla każdego oraz

dla każdego i dla dowolnego


Uwaga. Animacja działania automatu jest dostępna na stronie

https://wazniak.mimuw.edu.pl/index.php?title=J%C4%99zyki,_automaty_i_obliczenia/Wyk%C5%82a
d_3:_Automat_sko%C5%84czenie_stanowy

Przykład. Niech będzie alfabetem, a automatem takim, że

, a funkcja przejść zadana jest przy pomocy tabelki

Automat możemy również jednoznacznie określić przy pomocy grafu.


Przykład (praktyczny) zastosowania automatów skończonych – tzw. automat synchronizujący
w przemyśle.

Automat synchronizujący nad alfabetem to automat o następującej własności:

istnieje stan oraz słowo takie, że dla każdego stanu tego automatu .

Istnieje więc pewne uniwersalne słowo , pod wpływem którego wszystkie stany przechodzą w jeden,
ustalony stan automatu . Mówimy, że następuje wtedy synchronizacja wszystkich stanów automatu.

Poniżej zaprezentowany jest przykład zaczerpnięty z pracy Ananicheva i Volkova (D. S. Ananichev, M. V.
Volkov, Synchronizing Monotonic Automata, Lecture Notes in Computer Science, 2710(2003), 111-121),
ukazujący ideę użycia automatów synchronizujących w tej dziedzinie.
Przykład. Załóżmy, że pewna fabryka produkuje detale w kształcie kwadratu z "wypustką" na jednym boku

Załóżmy ponadto dla uproszczenia, że detale mogą przyjmować jedną z czterech orientacji:

"wypustką" w górę, w dół, w lewo lub w prawo.

Należy zatem skonstruować takie urządzenie (orienter), które będzie ustawiało wszystkie detale w żądanej
orientacji.

Istnieje wiele metod rozwiązania tego problemu, ale z praktycznego punktu widzenia potrzebne jest
rozwiązanie najprostsze i najtańsze.
• Jednym z takich sposobów jest umieszczanie detali na pasie transmisyjnym z zamontowaną wzdłuż
niego pewną ilością przeszkód dwojakiego rodzaju: niskich (low) oraz wysokich (HIGH).
• Wysoka przeszkoda ma tę własność, że każdy detal, który ją napotka, zostanie obrócony o 90 stopni w
prawo (zakładamy, że elementy jadą od lewej do prawej strony).
• Przeszkoda niska obróci o 90 stopni w prawo tylko te detale, które są ułożone "wypustką" w dół.
• Na poniższym rysunku przedstawione zostały przejścia pomiędzy orientacjami detali w zależności od
napotkania odpowiedniej przeszkody.

Można zauważyć, że automat ten jest automatem synchronizującym.

Słowem, które go synchronizuje, jest następująca sekwencja przeszkód:


low-HIGH-HIGH-HIGH-low-HIGH-HIGH-HIGH-low.

Niezależnie od tego, w jakiej orientacji początkowej znajduje się detal, po przejściu przez powyższą
sekwencję przeszkód zawsze będzie ułożony "wypustką" w lewo.

Uwaga. Animacja działania powyższego automatu jest dostępna na stronie

https://wazniak.mimuw.edu.pl/index.php?title=J%C4%99zyki,_automaty_i_obliczenia/Wyk%C5%82a
d_3:_Automat_sko%C5%84czenie_stanowy
Rozszerzymy teraz wprowadzone pojęcie automatu w ten sposób, by uzyskać możliwość efektywnego
rozstrzygania, czy dowolne słowo utworzone nad alfabetem reprezentuje poprawne obliczenie, czyli
spełnia kryteria określone przez rozszerzony automat.

Definicja. Język jest rozpoznawany (akceptowany), gdy istnieje automat skończony


stan oraz zbiór taki, że

Stan nazywamy stanem początkowym, a zbiorem stanów końcowych automatu .

Rozszerzony w powyższy sposób automat, poprzez dodanie stanu początkowgo i zbioru stanów końcowych,
w dalszym ciągu nazywamy automatem i oznaczamy jako piątkę lub czwórkę
, jeśli wiadomo, nad jakim alfabetem rozważamy działanie automatu.

Fakt, że język jest rozpoznawany przez automat zapisujemy jako


Rodzinę wszystkich języków rozpoznawalnych nad alfabetem oznaczamy przez .

Podobnie jak w przypadku gramatyk nie ma jednoznacznej odpowiedniości pomiędzy językami


rozpoznawalnymi a automatami. Wprowadza się więc relację, która identyfikuje automaty rozpoznające ten
sam język.

Definicja. Automaty i są równoważne, gdy rozpoznają ten sam język, czyli

W dalszych rozważaniach języków rozpoznawanych ograniczymy się do automatów

, które spełniają warunek


Nie zawęża to naszych rozważań. Jeśli bowiem język jest rozpoznawany przez pewien automat
, to jest również rozpoznawany przez automat

który spełnia powyższy warunek.

Zauważmy, że przyjmując to założenie, upraszczamy strukturę automatu.

Z punktu widzenia grafu automatu można powiedzieć, że nie występują w nim wierzchołki (stany)
nieosiągalne z .
Poniżej przedstawiamy algorytm usuwający z automatu stany nieosiągalne ze stanu początkowego.

Algorytm UsuńStanyNieosiągalne - usuwa z automatu stany nieosiągalne

1 Wejście: - automat.
2 Wyjście: - automat równoważny automatowi bez
stanów nieosiągalnych.
3 for each do
4 zaznaczone ;
5 end for
6 zaznaczone ;
7 OZNACZ ;
8 zaznaczone ;
9 ;
10 flag false jeśli nie dodamy stanu to na końcu pętli nadal flag=false
11 ;
12 for each do
13 for each do
14 if NULL then

15 ; była nieokreślona
16 flag true;
17 end if
18 end for
19 end for
20 if flag=true then

21 ;
22 end if
23 return ;
Algorytm Procedure Oznacz

1 procedure OZNACZ

2 for each

3 flag false
4 for each do
5 if then
6 flag true
7 end if
8 end for
9 if flag=true and zaznaczone then
10 zaznaczone ;
11 OZNACZ ;
12 end if
13 end for
14 end procedurę
Powyższy algorytm, dla ustalonego alfabetu , posiada złożoność , czyli liniową względem
liczby stanów.
Przykład. Jeśli w przykładzie, gdzie było alfabetem, a automatem takim, że

, a funkcja przejść zadana była przy pomocy tabelki

przyjmiemy stan jako stan początkowy, jako zbiór stanów końcowych, to automat
rozpoznaje język

złożony ze słów, kończących się na .

Zatem przykładowo, słowo nie jest akceptowane. Słowo jest akceptowane.


W dalszym ciągu wykładu przedstawiając automat przy pomocy grafu przyjmujemy następującą
konwencje:

• Jeśli w automacie występuje stan początkowy, oznaczać go będziemy strzałką wchodzącą do tego
stanu.
• Jeśli w automacie występują stany końcowe, oznaczać je będziemy podwójną obwódką.
Każdy automat wyznacza w wolnym monoidzie prawą kongruencję,
nazywaną prawą kongruencją automatową, określoną w następujący sposób:

Dla automatu skończonego (o skończonym zbiorze stanów), a takie rozważamy, relacja ma skończony
indeks, czyli skończoną liczbę klas równoważności.

Przykład. Automat z poprzedniego przykładu ze stanem jako początkowym wyznacza relację


równoważności o trzech klasach:

, ,
Na odwrót, każda prawa kongruencja wyznacza automat, zwany ilorazowym, w następujący
sposób:

jest automatem ze stanem początkowym .

jest automatem skończonym wtedy i tylko wtedy, gdy relacja ma skończony indeks.

Z definicji prawej kongruencji wynika, że funkcja przejść jest określona poprawnie.


Definicja. Niech i będą dowolnymi automatami.

Odwzorowanie nazywamy homomorfizmem automatów, gdy

Homomorfizm automatów oznaczamy .

Twierdzenie. Prawdziwe są następujące fakty:

(1) Dla dowolnej prawej kongruencji

(2) Dowolny automat jest izomorficzny z automatem ,


Symbolem oznaczamy rodzinę wszystkich funkcji określonych w zbiorze i przyjmujących wartości

w .

Rodzina wraz ze składaniem odwzorowań jest monoidem .

Definicja. Niech będzie dowolnym automatem. Reprezentacją automatu nazywamy


funkcję , określoną dla dowolnych i równością

Reprezentacja automatu jest homomorfizmem monoidu w monoid , bowiem dla dowolnych


spełnione są warunki
Definicja. Niech będzie dowolnym automatem. Monoidem przejść automatu nazywamy
monoid

Następujące wnioski są konsekwencjami rozważań przeprowadzonych powyżej.

(1) Monoid przejść automatu jest podmonoidem monoidu i zbiór jest zbiorem

generatorów tego monoidu

(2) Monoid przejść automatu skończonego jest skończony.

(3) Monoid przejść automatu jest izomorficzny z monoidem ilorazowym .


Przykład. Określimy monoid przejść dla automatu rozważanego już wcześniej, mianowicie

było alfabetem, a automatem takim, że

, a funkcja przejść zadana była przy pomocy tabelki

przyjmiemy stan jako stan początkowy, jako zbiór stanów końcowych.

Wypisujemy kolejne funkcje dla .

Zauważmy, że ze względu na występujące w tabelce powtórzenia, będące wynikiem równości, np.


nie ma potrzeby określać funkcji dla . Podobna obserwacja ma
miejsce w innych przypadkach, co sprawia, że tabelka zawiera skończoną liczbę różnych funkcji.
Poniżej zamieszczony jest algorytm obliczający monoid przejść dla automatu skończenie stanowego.

Algorytm WyznaczMonoidPrzejść - wyznacza monoid przejść dla automatu

1 Wejście: - automat
2 Wyjście: - monoid przejść dla
3 ; jest listą
4 ;
5 for each do
6 insert ; gdzie dla każdego
7 end for
8 while ; do
9 first ;
10 ;
11 for each do
12 for each do

13 ;
14 end for

15 if

16 insert ;
17 end if
18 end for
19 end while
20 return ;
Procedura insert wkłada na koniec listy element . Funkcja first wyjmuje pierwszy element
znajdujący się na liście i zwraca go.

Algorytm działa w następujący sposób: najpierw na listę wkładane są elementy monoidu przejść
dla każdej litery . Te funkcje można obliczyć bezpośrednio z tabelki reprezentującej funkcję
przejścia automatu . Następnie z listy po kolei ściągane są poszczególne funkcje . Każda z nich
dodawana jest do zbioru , a następnie algorytm sprawdza dla każdej litery , czy funkcja
istnieje już na liście lub w zbiorze . Jeśli nie, to funkcja ta dodawana jest do listy. Procedura
powyższa trwa do czasu, gdy lista zostanie pusta. Wtedy wszystkie elementy monoidu przejść znajdą się
w zbiorze .
Analiza działania algorytmu dla automatu z ostatniego przykładu

Na początku na listę włożone zostaną funkcje , oraz . Z listy zdejmujemy funkcję


i dodajemy ją do zbioru .

Ponieważ , a funkcje oraz znajdują się już na liście, zatem nie


dodajemy ich do .

Bierzemy kolejny element listy, , dodajemy go do i obliczamy funkcje oraz .


Ponieważ nie jest tożsama z żadną funkcją ze zbioru , dodajemy ją do listy.

Funkcja również nie jest równa żadnej z funkcji należących do zbioru , zatem wstawiamy
ją na koniec listy. Na liście mamy zatem teraz następujące elementy: , oraz .
Zdejmujemy z listy funkcję , dodajemy ją do i obliczamy oraz .

Pierwsza z tych funkcji jest nowa, tzn. nie jest tożsama z żadną funkcją ze zbioru więc dodajemy ją
na koniec listy. Druga z nich równa jest funkcji , więc nie dodajemy jej do listy.
W tym momencie zbiór zawiera następujące elementy: , , , natomiast lista zawiera

elementy , , .

Zdejmujemy z funkcję , dodajemy ja do i ponieważ i

, nic nie dodajemy do .

Zdejmujemy teraz z listy funkcję , dodajemy ją do i ponieważ nie należy do


dodajemy ją do listy. , więc tej funkcji nie dodajemy do .

Z ściągamy , dodajemy ją do i widzimy, że oraz


, więc nic nie dodajemy do . Na liście pozostała funkcja . Ściągamy ją z

listy i dodajemy do . Widzimy, że i , zatem nic nie


dodajemy do listy .

Lista jest w tym momencie pusta i działanie algorytmu zakończyło się. Ostatecznie mamy

co zgadza się z wynikiem otrzymanym w przykładzie.


Poniższe twierdzenie podsumowuje dotychczas uzyskane charakteryzacje języków rozpoznawanych.

Twierdzenie.

Niech będzie dowolnym językiem. Równoważne są następujące warunki:

(1) Język jest rozpoznawalny,


(2) Język jest sumą wybranych klas równoważności pewnej prawej kongruencji na
o skończonym indeksie, czyli

(3) Język jest sumą wybranych klas równoważności pewnej kongruencji na o skończonym
indeksie, czyli

(4) Istnieje skończony monoid i istnieje epimorfizm taki, że

You might also like