Przypomnijmy, że na język można patrzeć jak na problem
decyzyjny.
W ramach tego wykładu zajmiemy się modelowaniem takich mechanizmów
liczących, które są przystosowane do rozstrzygania, czy dane słowo
należy do języka i są wyposażone w pomocniczą pamięć stałej
wielkości.
Takie modele to właśnie automaty skończone.
Języki, dla których takie mechanizmy istnieją,
jak się później okaże, to języki regularne.
Zacznijmy jednak od ustalenia pewnych, być może oczywistych i
intuicyjnych pojęć.
Ustalmy najpierw pewne intuicyjne pojęcia: stanu i
przejścia.
Stan jakiegokolwiek systemu (czy mechanizmu), to pełna
informacja na jego temat w danym momencie czasu.
W szczególności stan zawiera wszelką ,,pamięć'' w jaką wyposażony
jest dany system.
Również wszystko to co zdarzyło się do danego momentu
ma wpływ na przyszłość tylko o tyle, o ile wpłynęło na
stan systemu w danej chwili.
Będziemy rozpatrywać takie systemy i mechanizmy, których stan
zmienia się w sposób dyskretny (tj. skokowy), a nie ciągły.
Podejście takie ma zastosowanie np. do komputerów i urządzeń
cyfrowych.
Praca podzespołów komputerowych jest taktowana odpowiednimi
zegarami.
Ich stan może się zmieniać tylko wraz z kolejnymi taktami
odpowiednich zegarów.
Na cały komputer możemy spojrzeć jak na system, w
którym czas biegnie nie w sposób ciągły, ale drobnymi skokami.
W przypadku wielu innych systemów takie podejście też może
być poprawne, jeżeli ich stan, który będzie nas interesował,
będzie miał charakter dyskretny.
Wówczas jego zmiany będą musiały mieć charakter skokowy.
Dlatego też w naszych modelach czas będzie dyskretny,
tzn. będzie on płynął drobnymi kroczkami.
Zmianę stanu będziemy nazywać przejściem -- od stanu w
chwili poprzedniej do stanu w chwili następnej.
Zwykle przejście ma miejsce jako reakcja na pewne zdarzenie.
Założymy przy tym, że przejścia są natychmiastowe -- jest to
oczywiście uproszczenie, tak samo jak założenie, że czas jest
dyskretny.
Najlepiej powyższe intuicje zilustrować na przykładach:
Kostka Rubik'a --
jej stany to możliwe ułożenia, a przejścia zachodzą na skutek
wykonywania pojedynczych ruchów.
Zegarek cyfrowy --
Stan zegarka to aktualny czas (z dokładnością do jego pomiaru
przez zegarek) oraz cała pamięć zegarka (np. godzina, na
którą ustawiony jest budzik).
Przejścia zachodzą na skutek upływu czasu lub naciskania
przycisków zegarka.
Sterownik windy --
stany tego sterownika zawierają informację m.inn. nt. położenia
windy (z pewną dokładnością), kierunku jej jazdy,
otwarcia lub zamknięcia drzwi,
oraz tego, jakie guziki (w windzie i na zewnątrz) były
naciśnięte.
Wszechświat(?) --
pytanie czy wszechświat jest systemem dyskretnym pozostawimy
filozofom i fizykom.
Przykład
Na poniższym diagramie przedstawiono uproszczony schemat
działania bardzo prostego odtwarzacza video.
Stany zaznaczono owalami.
W momencie włączenia system znajduje się w stanie ,,Empty''.
Przejścia przedstawiono jako strzałki i umieszczono przy nich
etykiety reprezentujące zdarzenia powodujące określone
przejścia.
Powróćmy do języków.
Interesuje nas modelowanie mechanizmów obliczeniowych
odpowiadających na pytanie, czy dane słowo należy do ustalonego
języka.
Automat skończony wczytuje dane słowo znak po znaku i po
wczytaniu całego słowa udziela odpowiedzi, czy słowo to należy
do ustalonego języka.
Przejścia między stanami zachodzą w automacie skończonym na
skutek wczytywania kolejnych znaków analizowanego słowa.
W automacie deterministycznym, dla każdego znaku jaki może
się pojawić na wejściu i dla każdego stanu automatu,
ze stanu tego wychodzi dokładnie jedno przejście
odpowiadające danemu znakowi -- w każdej sytuacji działanie
automatu musi być określone jednoznacznie.
(W tym wykładzie będziemy się zajmować wyłącznie automatami
deterministycznymi.
Automaty niedeterministyczne pojawią się w kolejnym wykładzie i
dopiero wówczas będziemy je odróżniać.)
To, jaka jest odpowiedź udzielana przez automat zależy od
stanu osiąganego po wczytaniu całego słowa.
Jeżeli odpowiedź jest pozytywna, to mówimy, że automat
akceptuje słowo, a w przeciwnym przypadku mówimy, że je
odrzuca.
Stany, w których automat akceptuje nazywamy
stanami akceptującymi.
Pamiętajmy jednak, że o tym, czy automat akceptuje słowo
decyduje wyłącznie ostatni stan -- ten, w którym automat jest po
wczytaniu całego słowa.
Dodatkowo, automat skończony, jak sama nazwa wskazuje,
ma skończoną liczbę stanów.
Oznacza to, że dysponuje on stałą pamięcią dodatkową,
tzn. wielkość pamięci dodatkowej nie zależy od długości
wczytywanego słowa i jest ograniczona przez stałą.
Jeżeli do stwierdzenia, czy słowo należy do ustalonego języka
potrzebna jest pamięć pomocnicza, której nie da się ograniczyć
przez stałą, to taki język nie jest akceptowany przez żaden
automat skończony.
Przykłady takich języków, oraz techniki
dowodzenia tego poznamy w dalszych wykładach.
Przykład
Zanim podamy formalną definicję automatu skończonego
zobaczmy prosty przykład takiego automatu.
Do prezentowania automatów skończonych będziemy używać
diagramów podobnych do diagramu odtwarzacza wideo z
poprzedniego punktu.
Stany automatu oznaczamy na diagramie punktami, a przejścia
strzałkami.
Przejścia etykietujemy znakami, których wczytanie powoduje
dane przejście.
Początkowy stan automatu oznaczamy strzałką ,,znikąd''.
Stany akceptujące zaznaczamy otaczając je dodatkowym kółkiem.
Powyższy automat wczytuje słowa nad alfabetem
. Akceptuje on wszystkie słowa zawierające choć jedną literę a -- tylko takie słowa mogą spowodować przejście do stanu po prawej stronie.
Definicja
Automat skończony (deterministyczny) M, to dowolna taka piątka
, w której:
Q to skończony zbiór stanów, to (skończony) alfabet wejściowy,
to funkcja przejścia -- to stan do którego przechodzimy ze stanu q na skutek wczytania znaku a, s to stan początkowy, to zbiór stanów akceptujących.
Przedstawiając automat musimy podać informacje o wszystkich pięciu elementach. Formalne podawanie piątki, takiej jak w definicji, jest mało czytelne. Dlatego też zwykle przedstawia się automat w postaci tabelki lub diagramu.
Przykład
Następująca diagram i tabelka przedstawiają ten sam automat.
Tabelka przedstawia przede wszystkim funkcję przejścia . Wiersze są indeksowane stanami. Kolumny są indeksowane znakami z alfabetu wejściowego. Komórki tabeli zawierają stany, do których przechodzimy na skutek wczytania pojedynczych znaków. Dodatkowo, stan początkowy jest zaznaczony za pomocą strzałki , a stany akceptujące są zaznaczone literami F.
Zaletą diagramów jest ich przejrzystość oraz to, że nie ma konieczności nazywania stanów. Natomiast zaletą tabel jest ich zwarta postać.
Dane dla automatu to dowolne słowo
. Działanie automatu możemy zasymulować w następujący sposób:
Na początku automat jest w stanie początkowym.Wczytujemy kolejne znaki słowa na wejściu i zmieniamy stan zgodnie z przejściami odpowiadającymi tym znakom.Po wczytaniu całego słowa i wykonaniu wszystkich przejść sprawdzamy, czy automat jest w stanie akceptującym. Jeżeli tak, to słowo jest akceptowane przez automat, wpp. nie.
Mając automat przedstawiony w formie diagramu możemy potraktować ten diagram jak planszę. Na początku stawiamy pionek na polu / w stanie początkowym. Następnie przesuwamy pionek zgodnie z wczytywanymi znakami. Jeśli na koniec jesteśmy na polu / w stanie akceptującym, to słowo jest akceptowane.
Przykład
Czas formalnie zdefiniować działanie deterministycznych automatów skończonych. Niech
będzie ustalonym deterministycznym automatem skończonym.
Definicja
Funkcję przejścia
rozszerzamy do funkcji
w następujący sposób:
Podczas gdy funkcja określa działanie automatu dla pojedynczego znaku, funkcja określa jego działanie dla całych słów.
Definicja
Automat akceptuje słowox wtw., gdy
.
Język akceptowany przez automat M, to:
Inaczej mówiąc, język akceptowany przez automat składa się dokładnie z tych słów, które ten automat akceptuje.
Przykład
Automat akceptujący słowa nad alfabetem {a,b} zawierające podsłowo aa.
Przykład
Automat akceptujący
w układzie binarnym jest podzielne przez 3 }.
Stany reprezentują reszty modulo 3. Po wczytaniu dowolnego ciągu cyfr automat jest w stanie odpowiadającym reszcie z dzielenia wczytanej liczby przez 3. Stan początkowy (odpowiadający wczytaniu ) to 0. Budując przejścia automatu musimy się zastanowić, jak zmienia się reszta z dzielenia danej liczby przez 3, gdy do jej zapisu binarnego dopiszemy (z prawej strony) 0 lub 1. Korzystamy tu z następujących tożsamości:
Zajmiemy się teraz własnościami klasy języków akceptowanych
przez deterministyczne automaty skończone.
Jak się później okaże, jest to dokładnie klasa języków
regularnych.
Zanim się to jednak stanie, pokażemy, że automaty skończone mają
niektóre z cech wzorców, które pokazaliśmy w poprzednim
wykładzie.
Niech A będzie skończonym językiem.
Wszystkie słowa z A razem
wzięte mają skończoną liczbę prefiksów.
Stanami automatu akceptującego A będą właśnie te prefiksy,
plus jeden dodatkowy stan, który będziemy nazywać
,,śmietnikiem''.
Po wczytaniu dowolnego słowa, jeżeli jest ono prefiksem
pewnego słowa z A, nasz automat będzie dokładnie w takim
stanie jak to słowo.
Natomiast po wczytaniu słowa, które nie jest prefiksem żadnego
słowa z A automat przejdzie do śmietnika.
Stan początkowy to .
Jeśli q i qa są prefiksami pewnego słowa z A, to
, wpp. śmietnik.
Stany akceptujące to te prefiksy, które należą do A.
W oczywisty sposób, język akceptowany przez automat to A.
Natomiast dzięki temu, że słowa z A mają skończoną liczbę
prefiksów, jest to poprawny automat skończony.
Przykład
Weźmy język
A = {ab, aba, abb, baa }.
Prefiksy słów z tego języka tworzą zbiór:
.
W rezultacie otrzymujemy automat postaci:
Twierdzenie:
Niech A i B będą językami (nad tym samym alfabetem
) akceptowanymi odpowiednio przez automaty
deterministyczne
i
,
L(M1) = A, L(M2) = B.
Wówczas następujące języki są również akceptowane przez
pewne deterministyczne automaty skończone:
Automat taki nazywamy automatem produktowym.
Jego stany to stany automatów M1 i M3.
Symuluje on równocześnie działanie obydwóch tych
automatów.
Jednocześnie akceptuje tylko takie słowa, które byłyby
zaakceptowane równocześnie przez M1 i M2.
Można pokazać (przez indukcję po długości słowa x), że
.
Stąd uzyskujemy:
Tak więc jest akceptowany przez M3.
Z praw De Morgana mamy
.
Stąd jest akceptowany przez pewien
deterministyczny automat skończony.
Przykład
Oto dwa automaty, pierwszy akceptujący słowa zawierające parzystą
liczbę liter b i drugi akceptujący słowa zawierające nieparzystą
liczbę liter a, oraz ich automat produktowy
(akceptujący te słowa, które zawierają parzystą
liczbę liter b i nieparzystą liczbę liter a).
Ten wykład był poświęcony deterministycznym automatom
skończonym.
Poznaliśmy ich budowę i sposób działania.
Poznaliśmy też podstawowe operacje, na które domknięta jest
klasa języków akceptowanych przez automaty deterministyczne.
Jak się okaże w dalszej części kursu, jest to dokładnie klasa
języków regularnych.
Automat skończony, deterministyczny
to dowolna taka piątka
, w której:
Q to skończony zbiór stanów,
to (skończony) alfabet wejściowy,
to funkcja przejścia,
s to stan początkowy,
to zbiór stanów akceptujących.
Automat produktowy
to automat symulujący równocześnie działanie dwóch danych
automatów deterministycznych --
jego zbiór stanów to produkt kartezjański zbiorów stanów
danych automatów.
Język akceptowany
przez deterministyczny automat skończony
to język postaci:
Przejście
to zmiana stanu -- od stanu w
chwili poprzedniej do stanu w chwili następnej.
Zwykle przejście ma miejsce jako reakcja na pewne zdarzenie.
Stan
jakiegokolwiek systemu (czy mechanizmu), to pełna
informacja na jego temat w danym momencie czasu.
W szczególności stan zawiera wszelką ,,pamięć'' w jaką wyposażony
jest dany system.
(3p.)
Podaj deterministyczny automat skończony akceptujący te słowa nad alfabetem {0, 1},
w których kazda seria zer i każda seria jedynek jest parzystej długości.
(3p.)
Podaj deterministyczny automat skończony akceptujący
te słowa nad alfabetem {a, b}, które zawierają podsłowo
babbb.
(4p.)
Podaj deterministyczny automat skończony akceptujący
przecięcie języków akceptowanych przez automaty:
Podaj deterministyczny automat skończony akceptujący te słowa nad alfabetem {0, 1},
w których między każdymi dwoma kolejnymi jedynkami jest parzysta liczba zer.
Rozwiązanie