Jȩzyki, automaty, zlożoność obliczeniowa

Podobne dokumenty
Imię, nazwisko, nr indeksu

Przykład: Σ = {0, 1} Σ - zbiór wszystkich skończonych ciagów binarnych. L 1 = {0, 00, 000,...,1, 11, 111,... } L 2 = {01, 1010, 001, 11}

Jaki język zrozumie automat?

Hierarchia Chomsky ego Maszyna Turinga

Języki, automaty i obliczenia

Maszyna Turinga języki

Dopełnienie to można wyrazić w następujący sposób:

Języki formalne i automaty Ćwiczenia 1

Języki, automaty i obliczenia

Hierarchia Chomsky ego

Rozwiązania około dwustu łatwych zadań z języków formalnych i złożoności obliczeniowej i być może jednego chyba trudnego (w trakcie tworzenia)

Matematyczna wieża Babel. 4. Ograniczone maszyny Turinga o językach kontekstowych materiały do ćwiczeń

Matematyczne Podstawy Informatyki

Języki formalne i automaty Ćwiczenia 9

Maszyna Turinga. Algorytm. czy program???? Problem Hilberta: Przykłady algorytmów. Cechy algorytmu: Pojęcie algorytmu

Zadanie 1. Czy prawdziwa jest następująca implikacja? Jeśli L A jest językiem regularnym, to regularnym językiem jest też. A = (A, Q, q I, F, δ)

złożony ze słów zerojedynkowych o długości co najmniej 3, w których druga i trzecia litera od końca sa

Języki formalne i automaty Ćwiczenia 7

Obliczenia inspirowane Naturą

Automat ze stosem. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

10110 =

1 Automaty niedeterministyczne

(j, k) jeśli k j w przeciwnym przypadku.

Języki, automaty i obliczenia

Języki, automaty i obliczenia

2.2. Gramatyki, wyprowadzenia, hierarchia Chomsky'ego

Zadanie 1. (6 punktów) Słowo w nazwiemy anagramem słowa v jeśli w można otrzymać z v poprzez zamianę kolejności liter. Niech

Wyrażenia regularne.

Teoretyczne podstawy informatyki

Symbol, alfabet, łańcuch

JAO - Wprowadzenie do Gramatyk bezkontekstowych

Gramatyki, wyprowadzenia, hierarchia Chomsky ego. Gramatyka

Wprowadzenie: języki, symbole, alfabety, łańcuchy Języki formalne i automaty. Literatura

JAO - Języki, Automaty i Obliczenia - Wykład 2. JAO - Języki, Automaty i Obliczenia - Wykład 2

Języki i operacje na językach. Teoria automatów i języków formalnych. Definicja języka

Obliczenia inspirowane Naturą

JAO - lematy o pompowaniu dla jezykow bezkontekstowy

Języki formalne i automaty Ćwiczenia 2

AUTOMATY SKOŃCZONE. Automat skończony przedstawiamy formalnie jako uporządkowaną piątkę:

Matematyczne Podstawy Informatyki

Matematyka Dyskretna 2/2008 rozwiązania. x 2 = 5x 6 (1) s 1 = Aα 1 + Bβ 1. A + B = c 2 A + 3 B = d

Automaty Büchi ego i równoważne modele obliczeń

Lista zadań - Relacje

Elementy Teorii Obliczeń

KATEDRA INFORMATYKI TECHNICZNEJ. Ćwiczenia laboratoryjne z Logiki Układów Cyfrowych. ćwiczenie 204

Modele Obliczeń. Wykład 1 - Wprowadzenie. Marcin Szczuka. Instytut Matematyki, Uniwersytet Warszawski

ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW

Monoidy wolne. alfabetem. słowem długością słowa monoidem wolnym z alfabetem Twierdzenie 1.

Matematyczna wieża Babel. 3. Gramatyki o językach bezkontekstowych materiały do ćwiczeń

Obliczanie. dr hab. inż. Joanna Józefowska, prof. PP 1

Wprowadzenie do maszyny Turinga

Języki regularne, rozpoznawanie wzorców regularnych, automaty skończone, wyrażenia regularne

domykanie relacji, relacja równoważności, rozkłady zbiorów

Definiowanie języka przez wyrażenie regularne(wr)

Minimalizacja automatów niedeterministycznych na słowach skończonych i nieskończonych

- Dla danego zbioru S zbiór wszystkich jego podzbiorów oznaczany symbolem 2 S.

wstęp do informatyki i programowania część testowa (25 pyt. / 60 min.)

ZŁOŻONOŚĆ OBLICZENIOWA ALGORYTMÓW

Złożoność obliczeniowa zadania, zestaw 2

0 + 0 = 0, = 1, = 1, = 0.

Część wspólna (przekrój) A B składa się z wszystkich elementów, które należą jednocześnie do zbioru A i do zbioru B:

Matematyczne podstawy informatyki Mathematical Foundations of Computational Sciences. Matematyka Poziom kwalifikacji: II stopnia

Języki formalne i automaty Ćwiczenia 6

Wyrażenie nawiasowe. Wyrażenie puste jest poprawnym wyrażeniem nawiasowym.

Logika Stosowana. Wykład 1 - Logika zdaniowa. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2016/2017

Indukcja matematyczna

1 Działania na zbiorach

Zadanie 1. Potęgi (14 pkt)

Maszyna Turinga (Algorytmy Część III)

Efektywność Procedur Obliczeniowych. wykład 5

Języki formalne i automaty Ćwiczenia 3

0.1. Logika podstawowe pojęcia: zdania i funktory, reguły wnioskowania, zmienne zdaniowe, rachunek zdań.

1. Synteza automatów Moore a i Mealy realizujących zadane przekształcenie 2. Transformacja automatu Moore a w automat Mealy i odwrotnie

Temat: Zastosowanie wyrażeń regularnych do syntezy i analizy automatów skończonych

Wprowadzenie do programowania języki i gramatyki formalne. dr hab. inż. Mikołaj Morzy

ZADANIA Z AUTOMATU SKOŃCZONEGO SPRAWOZDANIE NR 4

Teoretyczne podstawy informatyki

Języki formalne i automaty Ćwiczenia 4

Klasyczne i kwantowe podejście do teorii automatów i języków formalnych p.1/33

Turing i jego maszyny

Złożoność obliczeniowa. wykład 1

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Algebrą nazywamy strukturę A = (A, {F i : i I }), gdzie A jest zbiorem zwanym uniwersum algebry, zaś F i : A F i

Lista 4. Kamil Matuszewski 22 marca 2016

Matematyczne Podstawy Informatyki

Rozdział 7 Relacje równoważności

LOGIKA I TEORIA ZBIORÓW

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

Przykładowe zadania z teorii liczb

JĘZYKI FORMALNE I METODY KOMPILACJI

Indukcja. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

ZLOŻONOŚĆ OBLICZENIOWA - WYK. 2

DEFINICJA. Definicja 1 Niech A i B będą zbiorami. Relacja R pomiędzy A i B jest podzbiorem iloczynu kartezjańskiego tych zbiorów, R A B.

Odmiany maszyny Turinga. dr hab. inż. Joanna Józefowska, prof. PP 1

Podstawy Informatyki Maszyna Turinga

Nierówność Krafta-McMillana, Kodowanie Huffmana

PROBLEMY NIEROZSTRZYGALNE

Jak należy się spodziewać, mamy. Zauważmy jednak, że nie zachodzi równość

Języki formalne i automaty Ćwiczenia 8

Zakładamy, że maszyna ma jeden stan akceptujacy.

Transkrypt:

Jȩzyki, automaty, zlożoność obliczeniowa Joanna Jȩdrzejowicz Andrzej Szepietowski 23 października 2007

Przedmowa Podręcznik niniejszy jest przeznaczony dla studentów drugiego roku kierunku informatyki i zawiera materiał wykładu z lingwistyki matematycznej, prowadzonego przez autorów na Uniwersytecie Gdańskim i na Politechnice Gdańskiej. Chcemy serdecznie podziękować słuchaczom naszych kursów za cenne uwagi i żywe reakcje. Myślimy, że pomogły nam one napisać lepszy podręcznik. Głównym celem wykładu jest zapoznanie słuchaczy z teoretycznymi podstawami informatyki. Chcemy wyjaśnić co to jest algorytm, oraz przekazać intuicję na temat tego, co jest a co nie jest obliczalne, co ma łatwe rozwiązanie algorytmiczne a co jest trudne. Podręcznik zawiera podstawowe wiadomości z lingwistyki matematycznej, teorii obliczalności oraz teorii złożoności obliczeniowej. Zawiera wiele przykładów, zadań oraz zagadnień do samodzielnego rozwiązania. Nie wymaga się od czytelnika specjalnego przygotowania, poza znajomością matematyki na poziomie szkoły średniej oraz pewnych podstawowych umiejętności programistycznych. Gdańsk, 7 maja 2007 autorzy

4

Spis treści Przedmowa 3 1 Alfabety, słowa, języki 9 1.1 Języki.................................... 10 1.2 Operacje na językach............................ 11 1.3 Zadania................................... 13 2 Klasa REG języków regularnych 15 2.1 Wyrażenia regularne............................ 15 2.2 Automat skończony (deterministyczny).................. 19 2.3 Automat niedeterministyczny........................ 27 2.4 Determinizacja automatu skończonego................... 30 2.5 Automaty z λ przejściami.......................... 33 2.6 Twierdzenia Kleene ego.......................... 36 2.7 Iloczyn kartezjański dwóch pełnych automatów.............. 43 2.8 Operacje na językach regularnych..................... 45 2.9 Operacja podstawienia........................... 47 2.10 Języki nieregularne............................. 49 2.11 Twierdzenie Myhilla-Nerode a....................... 51 2.12 Automat dwukierunkowy.......................... 52 2.13 Wyrażenia regularne w narzędziach programistycznych.......... 58 2.14 Zagadnienia................................. 61 2.14.1 Operacja przeplotu......................... 61 2.14.2 Skończone języki regularne.................... 61 2.14.3 Zagnieżdżenie -Kleene ego w wyrażeniu regularnym...... 62 2.14.4 Automat minimalny........................ 62 2.14.5 Funkcje rozróżniające....................... 63 2.14.6 Tożsamości............................. 63 5

6 Spis treści 3 Klasa CF języków bezkontekstowych 65 3.1 Gramatyka bezkontekstowa......................... 66 3.2 Postacie normalne.............................. 75 3.3 Automat ze stosem............................. 79 3.4 Lemat o pompowaniu............................ 85 3.5 Operacje na językach bezkontekstowych.................. 87 3.6 Parsery................................... 88 3.7 Języki liniowe................................ 90 3.8 Zagadnienia................................. 91 3.8.1 Języki jednoliterowe........................ 91 3.8.2 Lemat Ogdena........................... 91 3.8.3 Lemat o pompowaniu dla języków liniowych........... 92 3.8.4 Języki Dyck a............................ 92 3.8.5 Języki z przeplotem......................... 92 4 Maszyny Turinga 93 4.1 Deterministyczna maszyna Turinga..................... 93 4.2 Maszyna z taśmą wielościeżkową..................... 99 4.3 Maszyna z k taśmami............................ 100 4.4 Maszyna Turinga obliczająca funkcję................... 103 4.5 Niedeterministyczne maszyny Turinga................... 104 4.6 Problemy grafowe.............................. 106 4.6.1 Listy sąsiedztwa.......................... 107 4.6.2 Macierz sąsiedztwa......................... 107 4.6.3 Osiągalność w grafie........................ 108 4.7 Formuły boolowskie............................ 110 4.8 Determinizacja maszyny Turinga...................... 111 4.9 Zagadnienia................................. 111 4.9.1 Automat z dwoma stosami..................... 111 4.9.2 Automat z k licznikami....................... 112 4.9.3 Maszyna Turinga z taśmą dwustronnie nieskończoną....... 113 5 Czasowa złożoność obliczeniowa 115 5.1 Klasa P................................... 115 5.2 Algorytm CYK sprawdzania czy słowo należy do języka generowanego przez gramatykę bezkontekstową...................... 116 5.3 Złożoność problemu osiągalności w grafie................. 118 5.4 Klasa N P.................................. 119

Spis treści 7 5.5 Certyfikaty................................. 119 5.6 Koszt determinizacji............................ 121 5.7 Problemy N P zupełne........................... 122 5.8 Problem k-sat............................... 126 5.9 Pokrycie wierzchołkowe.......................... 126 5.10 Zagadnienia................................. 128 5.10.1 Problem kliki............................ 128 5.10.2 Problem podziału.......................... 128 5.10.3 Złożoność języka powtórzeń.................... 128 5.10.4 Języki regularne.......................... 128 6 Pamięciowa złożoność obliczeniowa 129 6.1 Konfiguracje................................. 129 6.2 Osiągalność w grafie skierowanym, problem GAP............. 131 6.3 Maszyny k taśmowe............................ 132 6.4 Mnożenie pamięci przez stałą........................ 132 6.5 Koszt determinizacji, twierdzenie Savitcha................. 133 6.6 Klasa PSPACE............................... 134 6.7 Uzupełnienie................................ 134 6.8 Zadania................................... 136 6.9 Zagadnienia................................. 136 6.9.1 Języki regularne.......................... 136 6.9.2 Zamkniętość na operacje...................... 137 6.9.3 Zamkniętość na uzupełnienie.................... 137 6.9.4 Automaty z kamieniami...................... 137 7 Problemy rozstrzygalne i nierozstrzygalne 141 7.1 Teza Turinga-Churcha........................... 141 7.2 Problemy rozstrzygalne........................... 141 7.2.1 Problemy rozstrzygalne dla automatów skończonych i wyrażeń regularnych.............................. 142 7.2.2 Problemy dla języków CF..................... 146 7.3 Uzupełnienie................................ 147 7.4 Problemy nierozstrzygalne......................... 147 7.5 Kodowanie maszyn Turinga........................ 149 7.6 Język przekątniowy............................. 150 7.7 Uniwersalna maszyna Turinga....................... 151 7.8 Redukcja.................................. 152

8 Spis treści 7.8.1 Problem stopu........................... 154 7.9 Twierdzenie Rice a............................. 154 7.10 Zagadnienia................................. 156 7.10.1 Języki programowania....................... 156 7.10.2 Problem pustości przekroju dla gramatyk CF........... 157 7.10.3 Problem uniwersalności dla gramatyk CF............. 157 7.10.4 Problem równoważności dla gramatyk CF............. 158 8 Hierarchia Chomsky ego 159 8.1 Klasa CS języków kontekstowych (czułych na kontekst)......... 161 8.2 Automat liniowo ograniczony, LBA.................... 164 8.3 Gramatyki CS i automaty LBA....................... 167 8.4 Gramatyki kombinatoryczne i maszyny Turinga.............. 170 8.5 Maszyny generujące języki......................... 171 8.6 Operacje................................... 171 8.7 Problemy rozstrzygalne........................... 172 8.8 Zadania................................... 172 8.9 Zagadnienia................................. 173 8.9.1 Równoważna postać gramatyk kontekstowych.......... 173 8.9.2 Problem słowa dla gramatyk CS.................. 174 8.9.3 Problem pustości dla gramatyk CS................. 174 8.9.4 Rozszerzona notacja BNF..................... 174 8.9.5 Przedstawienie języka rekurencyjnego przy pomocy homomorfizmu i języka kontekstowego.................... 175 9 Wskazówki i odpowiedzi do zadań 177 Bibliografia 185 Skorowidz 186 Spis oznaczeń 189

Rozdział 1 Alfabety, słowa, języki Alfabet to dowolny skończony i niepusty zbiór, który najczęściej oznaczać będziemy przez Σ. Elementy σ Σ nazywać będziemy symbolami lub literami. Dowolny ciąg symboli nazywamy słowem lub łańcuchem. Przez Σ oznaczamy zbiór wszystkich słów nad alfabetem Σ, λ lub ɛ oznacza słowo puste, czyli słowo nie zawierające żadnego symbolu. W naszym skrypcie alfabet najczęściej będzie miał tylko kilka liter. Przykład 1.1 a) Σ = {a, b}, do Σ należy λ, a, b, aa, ab, ba, bb, aaa, aab itd. b) Σ = {a, b, c}. c) Σ = {0, 1}. Możemy także rozważać inne alfabety: 1. Zbiór 26 liter alfabetu łacinskiego Σ = {a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w,x, y,z}. Wówczas do Σ należą słowa języka angielskiego, ale także ciągi, które nie należą do języka, na przykład abcc. 2. Zbiór 34 liter alfabetu polskiego. Wówczas Σ zawiera słownik języka polskiego. 3. Zbiór wszystkich znaków z klawiatury. Wtedy programy w języku PASCAL lub C mogą być traktowane jako elementy Σ. Oczywiście Σ zawiera także wiele słów, które nie są poprawnymi programami. 4. Wszystkie słowa z jakiegoś słownika (na przykład słownika ortograficznego języka polskiego). Wówczas słowa z Σ można traktować jako zdania. 9

10 Rozdział 1. Alfabety, słowa, języki Dla słów definiujemy dwuargumentową operację konkatenacji lub zespolenia. Niech u, v Σ, u = u 1...u k, v = v 1...v m wtedy konkatenacją słów u i v jest słowo u v = u 1...u k v 1...v m. Na przykład, jeżeli u = aba oraz v = bba, to u v = ababba oraz v u = bbaaba. Jak widać konkatenacja nie jest przemienna. Ponadto przyjmujemy, że dla dowolnego słowa u zachodzi λ u = u λ = u. Konkatenacja jest łączna. Symbol operacji składania często opuszczać, pisząc uv zamiast u v. Podsłowo słowa v to dowolny zwarty podciąg. Mówiąc dokładniej, u jest podsłowem słowa v Σ, jeżeli istnieją słowa x, y Σ, takie że v = xuy (x lub y może być słowem pustym). Na przykład podsłowami słowa abbc są słowa λ, ab, bb, bc oraz całe słowo abbc, a słowo abc nie jest podsłowem abbc. Początkowe podsłowo nazywamy prefiksem, dokładniej u jest prefiksem v, jeżeli istnieje y, takie że v = uy. Na przykład słowo abbc ma 5 prefiksów λ, a, ab, abb, abbc. Końcowe podsłowo nazywamy sufiksem, dokładniej u jest sufiksem v, jeżeli istnieje x, takie że v = xu. Długościa słowa w, oznaczaną przez w, nazywamy liczbę symboli, z których składa się słowo w, na przykład aab = 3. Słowo puste ma oczywiście długość λ = 0. Liczbę wystąpień litery a w słowie w będziemy oznaczać przez w a. Na przykład aba a = 2, oraz aba b = 1. Lustrzanym (zwierciadlanym) odbiciem słowa w = w 1 w 2...w n, gdzie w i Σ, dla i = 1...n, oznaczanym przez w R, nazywamy słowo postaci: w R = w n w n 1...w 2 w 1. Na przykład (abab) R = baba, odbiciem lustrzanym słowa pustego λ jest słowo puste λ R = λ. 1.1 Języki Podstawowym pojęciem omawianym w tej książce jest język. Język, nad alfabetem Σ to dowolny podzbiór Σ. Przykład 1.2 a) Językami nad alfabetem {a, b} sa zbiory {a, aa, aaa, aaaa}, {λ, a, b, aa} lub zbiór wszystkich słów parzystej długości. b) Językiem nad alfabetem {0, 1} jest zbiór słów, które koduja w systemie dwójkowym liczby podzielne przez 3. Języki nad alfabetami kilkuliterowymi mogą wydawać się sztuczne i niepraktyczne. Będziemy ich używać, bo na prostych przykładach łatwiej można wyjaśnić o co chodzi. Należy jednak mieć na uwadze, że języki mogą być bardziej złożone. Przedstawimy teraz kilka przykładów. 1. Językiem nad alfabetem 34 polskich liter jest zbiór wszystkich poprawnych słów w języku polskim.

1.2. Operacje na językach 11 2. Jeżeli za alfabet przyjmiemy zbiór znaków z klawiatury, to językiem jest zbiór poprawnie zbudowanych programów w języku C. 3. Jeżeli za alfabet przyjmiemy zbiór wszystkich słów ze słownika, to językiem jest zbiór zdań poprawnie zbudowanych pod względem gramatycznym. 4. Językiem jest zbiór prawdziwych twierdzeń jakiejś teorii, na przykład geometrii. Tutaj alfabetem jest zbiór znaków z klawiatury. W tej książce będą nas interesowały głównie dwa problemy. Pierwszy to jak opisywać języki. Okaże się, że pewne języki można opisać łatwo, inne trochę trudniej, a dla jeszcze innych nie są znane metody dokładnego opisu. Drugi problem to konstrukcja automatów, maszyn lub programów komputerowych, które będą automatycznie sprawdzały, czy dane słowo należy do języka. Takim programem jest na przykład kompilator, który sprawdza poprawność programu. Istnieją też programy, które sprawdzają, czy w tekście nie ma błędów ortograficznych. 1.2 Operacje na językach Na językach można wykonywać operacje. Niech L 1 i L 2 będą dwoma językami nad alfabetem Σ. Wtedy L 1 L 2 lub L 1 + L 2 oznacza sumę mnogościową tych języków, L 1 L 2 oznacza przekrój (część wspólną), L 1 \ L 2 oznacza różnicę, zaś L 1 L 2 oznacza konkatenację języków, która zawiera wszystkie możliwe konkatenacje dwóch słów, z których pierwsze należy do L 1 a drugie do L 2, lub bardziej formalnie L 1 L 2 = {u v u L 1, v L 2 }. Przykład 1.3 Niech L 1 = {a, aa} oraz L 2 = {b, ab}. Wtedy: a) L 1 L 2 = {a, aa, ab, b} b) L 1 L 2 = {ab, aab, aaab} c) L 2 L 1 = {ba, baa, aba, abaa} d) L 1 L 1 = {aa, aaa, aaaa} e) L 2 L 2 = {bb, bab, abb, abab} Jeżeli konkatenujemy ze sobą ten sam język, to będziemy używać wykładników: L 2 = L L, L 3 = L L L i tak dalej, L i = L i 1 L dla każdego i 2. Ponadto, przyjmujemy L 1 = L oraz L 0 = {λ}. Przykład 1.4 Jeżeli L = {a, b}, to L 2 = {aa, ab, ba, bb} zawiera wszystkie słowa nad alfabetem {a, b} długości 2, zaś L i zawiera wszystkie słowa długości i.

12 Rozdział 1. Alfabety, słowa, języki Ostatnią operacją jest domknięcie Kleene ego (zwane gwiazdką Kleene ego), które definiujemy za pomocą sumy L = L i. Przez L + będziemy oznaczać L {λ}. i=0 Przykład 1.5 a) Jeżeli L 1 = {a, b}, to L 1 zawiera wszystkie słowa nad alfabetem {a, b}. b) Jeżeli L 2 = {aa, ab, ba, bb}, to L 2 zawiera wszystkie słowa nad alfabetem {a, b} parzystej długości. Operacje sumy, przekroju, konkatenacji oraz domknięcia Kleene ego mają pewną ważną własność, którą nazywamy monotonicznością. Lemat 1.6 Jeżeli A, B i C sa trzema językami i A B, to zachodzą zawierania: 1. A C B C 2. A C B C 3. AC BC 4. A B Dowód 4): Aby udowodnić inkluzję A B, pokażemy, że dowolne słowo w należące do A należy także do B. Rzeczywiście, jeżeli w A, to albo w = λ, i wtedy należy do B, albo w jest konkatenacją w = w 1...w k, z których każde w i A, a ponieważ A B, więc każde w i należy także do B i w należy do B. Dowody punktów 1 3 można przeprowadzić w podobny sposób, szczegóły pozostawiamy czytelnikowi. Lemat 1.7 Dla dowolnego języka A zachodzi (A ) = A. Dowód: Ponieważ A A, więc na mocy lematu 1.6 A (A ). Wystarczy, zatem udowodnić zawieranie w drugą stronę. Niech w (A ), wtedy albo w = λ i należy do A, albo w jest konkatenacją kilku słów należących do A, to znaczy w = w 1...w k i każde ze słów w i, 1 i k jest konkatenacją słów należących do A, a ponieważ konkatenacja jest łączna, więc w jest konkatenacją słów z A, czyli w A.

1.3. Zadania 13 1.3 Zadania Zadanie 1.8 Wypisz wszystkie podsłowa, prefiksy i sufiksy słowa baba. Zadanie 1.9 Znajdź słowo długości 5 nad alfabetem {a, b}, które ma możliwie jak najwięcej różnych podsłów. Zadanie 1.10 Które z następujących równości sa przwdziwe dla dowolnych słów u, v, w {a, b}? 1. uw = wu 2. (uv) R = v R u R 3. (w R ) k = (w k ) R, k > 0 4. (w R ) R = w Zadanie 1.11 Dla jakich języków L domknięcie Kleene ego L jest zbiorem jednoelementowym, a dla jakich skończonym? Zadanie 1.12 Dane sa języki A i B nad alfabetem Σ = {a, b} Znaleźć A B, AB, A, B +, A \ B, A B. 1. A = {λ, a, aa, aaa}, B = {λ, b, bb, bbb} 2. A = {a, b}, B = {bb, bbbb} Zadanie 1.13 Dane sa języki K i L nad alfabetem Σ = {a, b} Znaleźć K L, KL, K, K \ L, K L. 1. K = {a n ba n : n 0}, L = {a n b k a n : k 0, n 1} 2. K = {ba 2n : n 1}, L = {ab 2n : n 0} Zadanie 1.14 Czy następujące równości sa prawdziwe dla dowolnych języków L, K i M? Uzasadnić. 1. K(L M) = KL KM 2. L(L \ K) = K 3. (K L) = K L

14 Rozdział 1. Alfabety, słowa, języki 4. (LK) L = L(KL) 5. (K + ) = K 6. (K L) = (K L ) 7. (K L) = (K L )

Rozdział 2 Klasa REG języków regularnych W tym rozdziale zajmiemy się językami regularnymi, które są pod wieloma względami najprostsze. Po pierwsze, istnieje prosta metoda opisu tych języków za pomocą tak zwanych wyrażeń regularnych. Po drugie, istnieje prosta metoda sprawdzania, czy dane słowo należy do języka. Robi się to za pomocą automatów skończonych. 2.1 Wyrażenia regularne Jak już wspomnieliśmy wyżej, wyrażenia regularne służą do opisu języków. 1. jest wyrażeniem regu- Definicja 2.1 (Wyrażenia regularnego nad alfabetem Σ) larnym, 2. λ jest wyrażeniem regularnym, 3. dla każdego σ Σ, σ jest wyrażeniem regularnym, 4. jeżeli u i v sa wyrażeniami regularnymi, to (u + v), (uv), (u) sa wyrażeniami regularnymi. Żadne inne napisy nie sa wyrażeniami regularnymi, to znaczy wyrażeniem regularnym jest tylko taki napis, który można uzyskać z symboli wymienionych w punktach 1 3 za pomoca skończonej liczby operacji wymienionych w punkcie 4. Przykład 2.2 Wyrażeniami regularnymi nad alfabetem Σ = {a, b, c} sa na przykład: λ, a, abb, a + bc, a(b + c), a, (ab), a + (b + c). 15

16 Rozdział 2. Klasa REG języków regularnych Jak widać opuściliśmy w tych wyrażeniach zbędne nawiasy. Podobnie w przyszłości będziemy opuszczać nawiasy, jeżeli nie będzie to prowadzić do niejednoznaczności. Dla prostych wyrażeń łatwo można się domyślić co one opisują. Wyrażenie λ opisuje słowo puste, wyrażenie a opisuje pojedynczą literę a, a dokładniej słowo składające się z jednej litery a, wyrażenie abb opisuje słowo abb. Znak + służy do wyrażania wyboru: wyrażenie a+ab opisuje jednoliterowe słowo a lub słowo ab, będziemy mówić, że a+ab opisuje zbiór (język) składający się z dwóch słów {a, ab}. Wyrażenie a(b + c) opisuje słowa, w których na pierwszym miejscu stoi litera a, a na drugim litera b lub c, czyli a(b + c) opisuje język {ab, ac}. Znak służy do powtarzania dowolną liczbę razy danego fragmentu. Wyrażenie a oznacza literę a powtórzoną dowolną liczbę razy, przy czym a może nie wystąpić wcale. Innymi słowy wyrażenie a opisuje nieskończony język składający się ze słowa pustego λ oraz wszystkich słów zawierających same a, to znaczy język {λ, a, aa, aaa,...}. Wyrażenie (ab) opisuje dowolną liczbę (także zero) razy powtórzone słowo ab, lub mówiąc inaczej (ab) opisuje język {λ, ab, abab, ababab,...}. Po tych prostych przykładach przejdźmy do formalnej definicji języka opisywanego przez wyrażenie regularne, albo mówiąc inaczej i bardziej poprawnie, języka generowanego przez wyrażenie regularne. Definicja 2.3 Język L(r) generowany przez wyrażenie regularne r określony jest następujaco: 1. jeśli r =, to L(r) = (generowany język jest zbiorem pustym), 2. jeśli r = λ, to L(r) = {λ} (generowany język składa się tylko ze słowa pustego), 3. jeśli r = σ, to L(r) = {σ} (generowany język składa się tylko z jednoliterowego słowa σ), 4. jeśli u i v generuja języki U = L(u) i V = L(v), to (u + v) generuje U V (sumę mnogościowa), (uv) generuje U V (konkatenację), (u) generuje U (domknięcie Kleene ego), Przykład 2.4 1. Wyrażenie ba jest konkatenacja dwóch wyrażeń b oraz a. Wyrażenie b generuje język {b}, zaś a generuje język złożony z samych a (oraz słowa pustego λ). Tak więc wyrażenie ba generuje konkatenację tych dwóch języków, czyli słowa, które zaczynaja się literą b i potem zawieraja ciag (może być pusty) złożony z samych a.

2.1. Wyrażenia regularne 17 2. Wyrażenie (a + b) jest domknięciem Kleene ego wyrażenia a + b, które generuje język {a, b}. Tak więc (a + b) generuje {a, b}, czyli zbiór wszystkich słów nad alfabetem {a, b}. 3. Wyrażenie a(a+b) jest konkatenacja wyrażeń a oraz (a+b) i generuje słowa nad alfabetem {a, b} zaczynajace się od a. 4. Wyrażenie a(a+b) +(a+b) b jest suma dwóch wyrażeń: a(a+b) oraz (a+b) b. Pierwsze generuje słowa zaczynajace się od a, a drugie słowa kończace się na b. Razem, całe wyrażenie a(a + b) + (a + b) b generuje słowa zaczynajace się od a lub kończace na b. Chociaż bardziej poprawnie jest mówić, że wyrażenie generuje język, czasami będziemy mówić, że je opisuje. Przykład 2.5 Wyrażenie: 1. (a + b) aa(a + b) generuje wszystkie słowa, nad alfabetem {a, b}, które zawieraja podsłowo aa. 2. (a + b)(a + b) generuje wszystkie słowa długości 2. 3. ((a + b)(a + b)) generuje wszystkie słowa parzystej długości. 4. (a + b)((a + b)(a + b)) generuje wszystkie słowa nieparzystej długości. 5. (a + bc) generuje wszystkie słowa nad alfabetem {a, b, c}, w których za każdym b stoi jedno c. Definicja 2.6 Każdy język generowany przez wyrażenie regularne nazywamy językiem regularnym. Klasę języków regularnych oznaczamy REG. Zadanie 2.7 Jaki język generuje następujące wyrażenie: 1. a(a + b)c 2. (a + b)(a + b)(b + a) 3. (a + b)(a + b) 4. aa(a + b) + (a + b) bb. 5. (a + b) aaa(a + b).

18 Rozdział 2. Klasa REG języków regularnych Zadanie 2.8 Podaj wyrażenie regularne, które generuje język składajacy się ze słów nad alfabetem {a, b}: 1. zawierających podsłowa aa oraz bb. 2. zaczynajacych się litera a oraz kończacych się litera b. 3. nie kończacych się literą b. 4. w których nie występuja po sobie dwie takie same litery. 5. których długość dzieli się przez 3. 6. których długość nie dzieli się przez 3. Zadanie 2.9 Podaj wyrażenie regularne, które generuje język składajacy się ze słów nad alfabetem {a, b, c} 1. zawierających podsłowo abc. 2. nie kończacych się literą b. Zadanie 2.10 Podaj wyrażenie regularne, które opisuje stałe typu integer (w języku Pascal lub C). Zadanie 2.11 Poprawna nazwa w języku XML może zawierać litery, cyfry oraz znaki podkreślenia, dwukropek, myślnik i musi zaczynać się od litery, znaku podkreślenia lub od dwukropka. Podać wyrażenie regularne opisujące poprawne nazwy. Definicja 2.12 Mówimy, że wyrażenia regularne u i v sa tożsame (lub równoważne), co zapisujemy u v, jeżeli języki generowane przez te wyrażenia sa równe L(u) = L(v). Przykład 2.13 1. Wyrażenia (a+b)+c i a+(b+c) sa tożsame, ponieważ oba opisują język {a, b, c}. 2. Wyrażenia (a + b) i a + b nie sa tożsame, ponieważ słowo ab jest generowane przez pierwsze wyrażenie, a nie przez drugie. 3. Wyrażenia (a + b) i (a + b ) sa tożsame, oba opisują ten sam język wszystkich słów nad alfabetem {a, b}. Ponieważ L(b) L(b ), więc L((a + b) ) L((a + b ) ). Zawieranie w druga stronę wynika z faktu, że L((a + b ) ) jest podzbiorem wszystkich słów nad alfabetem {a, b}, czyli języka L((a + b) ).

2.2. Automat skończony (deterministyczny) 19 Zadanie 2.14 Czy następujace tożsamości sa prawdziwe. 1. (ab ) + aa b 2. (ab + a) a (ba + a) 3. (a + b) b (a b) 4. (a + b) (a + b ) 5. (a + b) c a c + b c 2.2 Automat skończony (deterministyczny) Dla języków regularnych istnieje prosty sposób rozpoznawania, czy słowo należy do języka. Robi się to za pomocą tak zwanych automatów skończonych. Automat skończony jest pewną matematyczną abstrakcją. Dlatego zanim podamy jego formalną definicję rozważmy działanie automatu mniej abstrakcyjnego, czyli automatu sprzedającego batony (zamiast batonów mogą być bilety, zabawki, kawa lub coś innego). Przypuśćmy, że do automatu wrzucamy monety jednozłotowe i dwuzłotowe i jak wrzucimy w sumie trzy złote to automat wydaje nam baton. Oczywiście konstrukcja automatu wymaga rozwiązania wielu szczegółów, którymi nie będziemy się tutaj zajmować. Nas interesuje jeden aspekt, mianowicie, że taki automat musi mieć pamięć. Aby dostać baton trzeba wrzucić kilka monet i automat musi móc zapamiętać ile pieniędzy już dostał. Musi móc rozróżnić (co najmniej) cztery sytuacje: 1. nie dostałem jeszcze żadnych pieniędzy, 2. dostałem 1 złoty, 3. dostałem w sumie 2 złote, 4. dostałem w sumie 3 złote, Naiwnie możemy sobie wyobrazić, że tą pamięcią automatu jest jakiś trybik (małe kółko zębate), które może się znajdować w czterech różnych położeniach, które będziemy nazywać stanami, i te stany odpowiadają czterem wspomnianym wyżej sytuacjom, nazwijmy te stany {q 0, q 1, q 2, q 3 }. Na początku automat znajduje się w stanie q 0. Wrzucanie monet powoduje zmiany stanów (odpowiednie obracanie się kółka). Po osiągnięciu stanu q 3 automat wydaje baton.

20 Rozdział 2. Klasa REG języków regularnych q 1 0 q 2 1 q 3 2 1 1 q 2 Rysunek 2.1: Schemat automatu sprzedającego batony Rysunek 2.1 przedstawia jak działa nasz automat. Kółka oznaczają stany, stan q 0 jest oznaczony krótką wchodzącą strzałką, ponieważ od niego rozpoczyna się działanie automatu. Stan q 3 oznaczony jest podwójnym brzegiem, jego osiągnięcie powoduje wydanie batonu. Strzałki z etykietami pokazują jak zmieniają się stany, kiedy automat otrzymuje na swoim wejściu monety. Na przykład, jeżeli automat jest w stanie q 1 i otrzyma na wejściu 2 złote, to zmienia stan na q 3. Podobnie działają automaty rozpoznające, będziemy mówili akceptujące, języki. Możemy sobie wyobrazić, że taki automat wygląda tak jak na rysunku 2.2. a a b a b q Rysunek 2.2: Schemat automatu Posiada on taśmę, podzieloną na komórki, głowicę czytającą symbole z taśmy oraz moduł pamięci, zwany także pamięcia. Na taśmie, w poszczególnych komórkach wypisane jest słowo wejściowe. Moduł pamięci znajduje się w jakimś stanie, a głowica znajduje się pod aktualnie czytanym symbolem taśmy. Na początku głowica znajduje się pod pierwszym symbolem, a pamięć w specjalnym stanie początkowym q 0. Następnie automat przeprowadza obliczenie, które przebiega w taktach. W każdym takcie automat zmienia stan i przesuwa głowicę o jedną kratkę w prawo. Po przeczytaniu całego słowa automat za-

2.2. Automat skończony (deterministyczny) 21 trzymuje się. Mówimy, że automat akceptuje słowo wejściowe, jeżeli stan, w którym się na końcu zatrzymuje, należy do specjalnego zbioru stanów akceptujących. Zbiór wszystkich słów akceptowanych przez automat tworzy język akceptowany przez ten automat. W tym rozdziale zajmujemy się automatami skończonymi, w których pamięć jest skończona, lub mówiąc inaczej, moduł pamięci może przyjmować stany z pewnego skończonego zbioru stanów, który zwykle będziemy oznaczać przez Q. Podobnie jak w przypadku automatu sprzedającego batony, dla nas będzie najważniejsze jak zmieniają się stany po przeczytaniu poszczególnych symboli. Dlatego automaty często będziemy przedstawiać za pomocą tak zwanych grafów przejść. b b q 0 a q 1 a Rysunek 2.3: Przykład grafu przejść Rysunek 2.3 przedstawia przykład grafu przejść pewnego automatu. Kółka oznaczają stany, stan q 0 jest stanem początkowym, od niego rozpoczyna się obliczenie, jest on oznaczony krótką wchodzącą strzałką. Stan q 1 jest stanem końcowym lub akceptującym, oznaczony jest podwójnym brzegiem. Strzałki z etykietami pokazują, jak zmieniaą się stany po przeczytaniu poszczegónych liter. Jeżeli na wejście automatu damy, na przykład, słowo w = aba, to automat będzie czytał to słowo zmieniając przy tym swój stan. Obliczenie rozpoczyna się w stanie q 0, po przeczytaniu pierwszej litery stan automatu zmienia się na q 1, po przeczytaniu drugiej litery stan automatu nie zmieni się, a po przeczytaniu ostatniej litery stan zmieni się na q 0 i obliczenie zakończy się. Ponieważ ostateczny stan nie jest stanem końcowym, słowo w = aba nie jest akceptowane przez automat. Podobnie możemy sie przekonać, że słowo abaa doprowadza automat do stanu q 1 i jest akceptowane. Łatwo widać, że automat akceptuje wyłącznie słowa zawierające nieparzystą liczbę liter a. W tym rozdziale pokażemy, że automaty skończone akceptują dokładnie języki regularne. To znaczy każdy język opisany przez wyrażenie regularne jest akceptowany przez pewien automat skończony i na odwrót każdy język akceptowany przez automat skończony może być opisany przez wyrażenie regularne. Do tego potrzebne nam są formalne

22 Rozdział 2. Klasa REG języków regularnych definicje. Definicja 2.15 Deterministyczny automat skończony to piatka gdzie A = (Q, Σ, δ, q 0, F), Q jest skończonym zbiorem stanów automatu, Σ jest alfabetem wejściowym, q 0 Q jest pewnym wyróżnionym stanem, zwanym stanem poczatkowym, F Q jest zbiorem stanów końcowych (lub akceptujacych), δ : Q Σ Q jest funkcja przejścia, która określa jak zmienia się stan automatu. Przykład 2.16 Automat odpowiadajacy grafowi przejść podanemu na rysunku 2.3 formalnie wyglada tak: A = (Q, Σ, δ, q 0, F), gdzie: tabela Q = {q 0, q 1 }, Σ = {a, b}, F = {q 1 }. Funkcję przejścia δ przedstawia poniższa δ a b q 0 q 1 q 0 q 1 q 0 q 1 Konfiguracją automatu jest słowo postaci postaci qw, w którym q Q jest bieżącym stanem automatu, a w Σ jest zawartością taśmy wejściowej, która została jeszcze do przeczytania (głowica obserwuje pierwszą literę słowa w). Intuicyjnie konfiguracja ma określać na jakim etapie znajduje się obliczenie automatu i w sposób jednoznaczny wyznacza dalszy przebieg obliczenia. Pomiędzy konfiguracjami określamy relację bezpośredniego następnika, która opisuje jak zmienia się konfiguracja po wykonaniu jednego kroku automatu. Definicja 2.17 Konfiguracja pw jest bezpośrednim następnikiem konfiguracji qσw, jeżeli δ(q, σ) = p.

2.2. Automat skończony (deterministyczny) 23 Mówiąc inaczej, automat będąc w konfiguracji qσw (głowica w stanie q czyta na taśmie symbol σ, a na prawo od σ stoi słowo w) po wykonaniu jednego kroku znajdzie się w konfiguracji pw (głowica zmieni stan na p i przesunie się o jedną komórkę w prawo). Konfigurację q 0 w nazywamy konfiguracją początkową na słowie w (głowica w stanie początkowym q 0 obserwuje pierwszą literę słowa w). Definicja 2.18 Obliczenie na słowie w, to ciag konfiguracji β 0,..., β k w którym β 0 jest konfiguracją poczatkow a na w, oraz dla każdego i, 0 i < k konfiguracja β i+1 jest bezpośrednim następnikiem konfiguracji β i. Konfiguracja postaci qλ jest konfiguracją akceptujac a, jeżeli q F. W konfiguracji akceptującej stoi słowo puste, co oznacza, że automat przeczytał już całe słowo. Obliczenie na słowie w jest akceptujące, jeżeli kończy się konfiguracją akceptującą. W dalszym ciągu będziemy często oznaczać konfigurację akceptującą jako q zamiast pisać qλ. Ponadto przyjmujemy, że obliczenie na słowie pustym w = λ jest akceptujące jeżeli stan początkowy jest końcowy, q 0 F. Uwaga. Dopuszcza się, aby funkcja przejścia była funkcją częściową, to znaczy nie musi być określona dla każdej pary (q, σ). W takim przypadku może się zdarzyć, że konfiguracja qσw nie posiada następnika i obliczenie kończy się konfiguracją, w której nie całe słowo zostało przeczytane. Takie obliczenie nigdy nie jest akceptujące. Przykład 2.19 Obliczenie automatu A z rysunku 2.3 na słowie aba wyglada następujaco: q 0 aba q 1 ba q 1 a q 0 i nie jest akceptujace. Obliczenie automatu A na słowie abaa wyglada następująco: i jest akceptujace. q 0 abaa q 1 baa q 1 aa q 0 a q 1 Definicja 2.20 Język akceptowany przez automat A to zbiór L(A) = {w Σ istnieje obliczenie akceptuja ce A na w}. Jest oczywiste, że ten sam język może być akceptowany przez kilka różnych automatów. Definicja 2.21 Dwa automaty A 1 i A 2 nazwiemy równoważnymi, jeżeli akceptuj a ten sam język, L(A 1 ) = L(A 2 ).

24 Rozdział 2. Klasa REG języków regularnych a a q 0 b q 1 a Rysunek 2.4: Automat dany jako graf przejść Przykład 2.22 Automat A z rysunku 2.3 akceptuje słowa zawierajace nieparzysta liczbę liter a. Łatwo można udowodnić przez indukcję ze względu na długość słowa w, że po przeczytaniu słowa w automat znajduje się w stanie q 0, jeżeli w zawiera parzystą liczbę liter a, i w stanie q 1, jeżeli w zawiera nieparzystą liczbę a. Zadanie 2.23 Przedstaw funkcję przejścia automatu z rysunku 2.4. Przedstaw obliczenie na słowach baaab oraz babaa. Jaki język akceptuje ten automat? Zadanie 2.24 Dany jest automat = (Q, Σ, δ, q 0, F), gdzie Q = {q 0, q 1, q 2 }, Σ = {0, 1}, F = {q 0 }, δ a b q 0 q 1 q 0 q 1 q 2 q 1 q 2 q 0 q 2 Przedstaw go jako graf przejść. Przedstaw obliczenie automatu na słowach abbaa, ababa. Jaki język akceptuje ten automat? Zadanie 2.25 Podaj automat akceptujacy język składajacy się ze słów nad alfabetem {a, b}: 1. zawierających podsłowo aa. 2. zaczynajacych się litera a. 3. kończacych się literą b.

2.2. Automat skończony (deterministyczny) 25 4. zaczynajacych się litera a oraz kończacych się litera b. 5. zawierających parzysta liczbę liter a. 6. w których symbol a występuje co najmniej 2 razy. 7. których długość jest wielokrotnością 6. 8. które od trzeciej pozycji zawierają tylko literę a. 9. które na trzeciej pozycji od końca zawieraja literę a. Zadanie 2.26 Podaj automat akceptujacy język składajacy się ze: 1. słów nad alfabetem {0, 1}, które przedstawiają liczbę binarną podzielna przez 4. 2. słów nad alfabetem {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, które przedstawiają liczbę w systemie dziesiętnym podzielną przez 3 (w innych wariantach tego zadania liczby maja być podzielne przez 6 lub 7). 3. słów nad alfabetem {0, 1}, które przedstawiają liczbę w systemie dwójkowym podzielna przez 3 (w innym wariancie tego zadania liczby maja być podzielne przez 5). 4. słów nad alfabetem {a, b, c}, w których pierwsza litera powtarza się w słowie przynajmniej jeden raz. 5. słów nad alfabetem {a, b, c}, zawierajacych podsłowo aaa. 6. słów nad alfabetem {a, b, c}, zawierajacych podsłowo aaa lub aba. 7. słów a, aab oraz aaab. Zadanie 2.27 Podaj automaty akceptuj ace języki generowane przez wyrażenia regularne: b a, (aa), (a + b)(a + b).

26 Rozdział 2. Klasa REG języków regularnych Zadanie 2.28 Dany jest automat M a 3 1 b 2 b c a a 4 a 5 c Podaj wyrażenie regularne generujace język akceptowany przez automat powstały z M poprzez: 1. usunięcie strzałki prowadzacej od stanu 1 do 3 i od stanu 1 do 2. 2. zmianę stanu poczatkowego na stan o numerze 2. Zadanie 2.29 Dla danego automatu przedstawionego w postaci grafu przejść podaj wyrażenie regularne generujace akceptowany język: 1. graf przejść A b 4 a b a a 1 2 3 c a 5 c 2. graf przejść B

2.3. Automat niedeterministyczny 27 b a 1 3 b 4 a b a c 7 2 6 a 5 b c 3. graf przejść C b a 1 a 2 b a b 3 Zadanie 2.30 Skonstruuj automat akceptujacy język {a n b n : 0 n 7}. Czy istnieje automat akceptujacy ten język majacy mniej niż 7 stanów? 2.3 Automat niedeterministyczny Przejdziemy teraz do omawiania następnej klasy automatów skończonych: do skończonych automatów niedeterministycznych, które mówiąc niedokładnie mogą zgadywać lub inaczej mogą wybierać, jak dalej będzie przebiegać obliczenie. Rysunek 2.5 przedstawia przykład grafu przejść automatu niedeterministycznego. Ze stanu q 1 odchodzą dwie strzałki z etykietą b i jeżeli automat znajduje się w tym stanie, to może wybrać którą drogą pójdzie obliczenie. Słowo wejściowe jest zaakceptowane, jeżeli istnieje ciąg wyborów prowadzących do stanu akceptującego. Na przykład dla słowa abab istnieje ciąg odgadnięć prowadzących do stanu akceptującego: q 0 abab q 0 bab q 0 ab q 0 b q 1, więc słowo abab jest akceptowane przez automat. Dla tego samego słowa ababa istnieje też inny ciąg odgadnięć q 0 abab q 0 bab q 1 ab,

28 Rozdział 2. Klasa REG języków regularnych a,b q b 0 q 1 Rysunek 2.5: Graf przejść automatu niedeterministycznego A który doprowadził do konfiguracji, która nie ma następnika i nie jest końcowa. Przyjmujemy, że istnienie takich obliczeń nie będzie miało wpływu na akceptację, ważne jest by słowo miało przynajmniej jedno obliczenie akceptujące. Zauważmy, że nie istnieje obliczenie akceptujące dla słowa aba. Nie trudno zuważyć, że automat akceptuje dokładnie słowa kończące się literą b. Czytając słowo wejściowe, po napotkaniu każdej litery b automat odgaduje, czy jest to ostatnia litera słowa i przechodzi do stanu q 1, w którym kończy obliczenie, lub odgaduje, że to nie jest koniec słowa i zostaje w stanie q 0. Przejdźmy teraz do formalnej definicji automatu niedeterministycznego. Definicja 2.31 Niedeterministyczny automat skończony to piatka A = (Q, Σ, δ, q 0, F), gdzie Q, Σ, q 0 oraz F maja takie samo znaczenie jak w automacie deterministycznym, zaś funkcja przejścia ma inna przeciwdziedzinę. Tutaj δ : Q Σ P(Q) gdzie P(Q) oznacza zbiór wszystkich podzbiorów zbioru Q. Przykład 2.32 Funkcję przejścia automatu z rysunku 2.5 przedstawia tabela δ a b q 0 {q 0 } {q 0, q 1 } q 1 Definicja bezpośredniego następnika jest podobna jak w automacie deterministycznym. Konfiguracja pw jest bezpośrednim następnikiem konfiguracji qσw, jeżeli p δ(q, σ).

2.3. Automat niedeterministyczny 29 Obliczenie na słowie w, to ciąg konfiguracji β 0,..., β k w którym β 0 jest konfiguracją początkową na w, oraz dla każdego i, 0 i < k konfiguracja β i+1 jest bezpośrednim następnikiem konfiguracji β i. Konfiguracja postaci qλ jest konfiguracją akceptującą, jeżeli q F. Obliczenie jest akceptujące, jeżeli kończy się konfiguracją akceptującą. Zauważmy, że definicje obliczenia, obliczenia akceptującego i języka akceptowanego dla automatu niedeterministycznego są takie same jak dla automatu deterministycznego. Wszystkie konfiguracje, do których prowadzą obliczenia w automacie niedeterministycznym (zwane konfiguracjami osiagalnymi) można przedstawić w postaci tak zwanego drzewa obliczeń automatu. W korzeniu drzewa jest konfiguracja początkowa, natomiast synami wierzchołka odpowiadającego konfiguracji α są wierzchołki odpowiadające bezpośrednim następnikom konfiguracji α. Przy tej interpretacji słowo jest zaakceptowane, jeżeli w jego drzewie obliczeń jest liść z konfiguracją akceptującą. Jeżeli takiego liścia nie ma, słowo nie jest zaakceptowane. Rysunek 2.6 przedstawia akceptujące drzewo obliczeń automatu A na słowie bab oraz drzewo obliczeń na słowie bba, w którym nie ma liścia akceptującego. a) b) q 0 bab q 0 bba q 0 ab q 1 ab q 0 ba q 1 ba q 0 b q 0 a q 1 b q 0 q 1 q 0 Rysunek 2.6: Rysunki a) i b) przedstawiają drzewo obliczeń automatu A na slowie bab i bba Zadanie 2.33 Na rysunku 2.7 przedstawiony jest automat niedeterministyczny D. Podaj tabelę jego funkcji przejścia. Narysuj drzewo obliczeń dla słów aba, bab. Jaki język akceptuje ten automat?

30 Rozdział 2. Klasa REG języków regularnych a,b q 0 b q 1 a,b q 2 Rysunek 2.7: Automat D Zadanie 2.34 Przedstaw automat niedeterministyczny dla języka: 1. słów nad alfabetem {a, b} kończacych się literą b. 2. słów nad alfabetem {a, b}, w których na przedostatnim miejscu stoi litera a. 3. słów nad alfabetem {a, b}, w których na trzecim (dziesiatym) miejscu od końca stoi litera a. 4. słów nad alfabetem {a, b, c}, w których ostatnia litera występuje wcześniej w słowie. 5. słów nad alfabetem {a, b, c}, w których występuje podsłowo abc. 6. słów nad alfabetem {a, b, c}, w których występuje podsłowo aab lub podsłowo aac. 7. konkatenacji dwóch języków LK nad alfabetem {a, b, c}, gdzie L zawiera słowa kończace się literą a, zaś K słowa z parzysta liczba liter c. 2.4 Determinizacja automatu skończonego Każdy automat niedeterministyczny można zastąpić równoważnym (akceptującym ten sam język) automatem deterministycznym. Proces determinizacji pokażemy na przykładzie. Weźmy automat niedeterministczny A z rysunku 2.5 i opiszemy równoważny mu automat deterministyczny A D. Zbiór stanów automatu A jest równy Q = {q 0, q 1 }, stanami automatu A D są wszystkie podzbiory zbioru Q, czyli Q D = P(Q). Stanem początkowym automatu A D jest zbiór {q 0 }, ponieważ na początku automat A jest w stanie q 0. Po przeczytaniu każdego prefiksu x (początkowej części słowa wejściowego), automat A D pamięta w swoim stanie zbiór stanów do jakich może dojść A po przeczytaniu x. Na

2.4. Determinizacja automatu skończonego 31 przykład prześledźmy zachowanie automatu A D na słowie abab. Konfiguracją początkową automatu A D jest {q 0 }abab następną konfiguracją jest {q 0 }bab ponieważ po przeczytaniu litery a automat A może dojść tylko do stanu q 0. Następnie A D przechodzi do konfiguracji {q 0, q 1 }ab ponieważ ze stanu q 0 po przeczytaniu b automat A może przejść do q 0 lub q 1. Następną konfiguracją jest {q 0 }b ponieważ ze stanu q 0 A może przejść do q 0, a ze stanu q 1 nigdzie nie może przejść. Ostatnią konfiguracją jest {q 0, q 1 } zawiera ona te stany, do których może dojść automat A po przeczytaniu słowa abab. Ponieważ zbiór ten zawiera stan akceptujący automatu A, więc A D też akceptuje słowo abab. Natomiast obliczenie automatu A D na słowie aba wygląda następująco: {q 0 }aba {q 0 }ba {q 0, q 1 }a {q 0 } Ponieważ zbiór z ostatniej konfiguracji nie zawiera stanu akceptującego, słowo aba nie jest akceptowane przez A D. Funkcja przejścia automatu A D wygląda następująco: δ a b {q 0 } {q 0 } {q 0, q 1 } {q 0, q 1 } {q 0 } {q 0, q 1 } {q 1 } Zbiorem stanów akceptujących automatu A D jest zbiór {{q 0, q 1 }, {q 1 }}, który zawiera te stany automatu A D, które zawierają q 1 jedyny stan akceptujący automatu A. Zauważmy, że stany {q 1 } oraz automatu A D nie są osiągalne ze stanu początkowego, więc automat A D można uprościć przyjmując i funkcję przejścia Q D = {{q 0 }, {q 0, q 1 }}

32 Rozdział 2. Klasa REG języków regularnych δ a b {q 0 } {q 0 } {q 0, q 1 } {q 0, q 1 } {q 0 } {q 0, q 1 } Podobnie można determinizować dowolny automat niedeterministyczny A N = (Q N, Σ, q 0, δ N, F). Zbiór stanów automatu deterministycznego A D jest postaci Q D = P(Q N ) stanem początkowym automatu A D jest zbiór {q 0 } zbiorem stanów akceptujących automatu A D jest zbiór F D = {S Q N S F }, który zawiera te stany automatu A D (czyli zbiory stanów automatu A N ), które zawierają jakieś stany akceptujące A N. Funkcja przejścia jest zdefiniowana następująco: δ D (S, σ) = s S δ N (s, σ) Łatwo można udowodnić przez indukcję ze względu na długość słowa, że jeżeli słowo w doprowadza automat A D ze stanu {q 0 } do stanu R, to zbiór R zawiera wszystkie stany r, dla których istnieje obliczenie A N na w prowadzące ze stanu q 0 do r. Tak więc udowodniliśmy następujące twierdzenie o determinizacji automatów skończonych Twierdzenie 2.35 Dla każdego automatu niedeterministycznego A N istnieje automat deterministyczny A D akceptujacy ten sam język. Zadanie 2.36 Przeprowadź determinizację automatu D z rysunku 2.7. Zadanie 2.37 Zaprojektuj automat niedeterministyczny akceptujacy słowa nad {a, b}, w których piat a literą od końca jest a. Czy istnieje taki automat z nie więcej niż 6 stanami? Udowodnij, że każdy automat deterministyczny akcepujacy ten język ma co najmniej 2 5 = 32 stanów. Zadanie 2.38 Skonstruuj automat deterministyczny równoważny automatowi:

2.5. Automaty z λ przejściami 33 a,b q 0 b q 1 b q 2 λ a q 3 Rysunek 2.8: Automat z λ przejsciami A λ 1. A 1 = (({p, q, r, s}, {0, 1}, p, p, {s}) δ p q r s 0 {p, q} {r} {s} {s} 1 {p} {r} - {s} 2. A 2 = ({p, q, r}, {a, b}, p, δ, {r}) δ p q r a {p, q} {r} {p, r} b {q} - {p, q} 3. A 3 = ({p, g, r, s}, {0, 1}, p, δ, {q, s}) δ p q r s 0 {q, s} {r} {s} - 1 q q, r p p 2.5 Automaty z λ przejściami Następnym rodzajem automatów są niedeterministyczne automaty z λ przejściami, w których możliwa jest zmiana stanu bez czytania litery z wejścia.

34 Rozdział 2. Klasa REG języków regularnych Rysunek 2.8 przedstawia niedeterministyczny automat z λ przejściami A λ. Jeżeli automat znajduje się w stanie q 0, z którego jest λ przejście (strzałka z etykietą λ), to możliwa jest zmiana stanu na q 3 bez czytania litery z taśmy wejściowej. Automat A λ akceptuje słowa, które kończą się na bb lub a. Na przykład obliczenie akceptujące na słowie aba wygląda następująco q 0 aba q 0 ba q 0 a q 3 a q 2 Podobnie jak dla automatów niedeterministycznych, możliwa jest determinizacja automatów z λ przejściami. Twierdzenie 2.39 Dla każdego automatu niedeterministycznego z λ przejściami A λ istnieje automat deterministyczny A D akceptujacy ten sam język. Przykład 2.40 Pokażemy jak zdeterminizować automat A λ z rysunku 2.8. Zaczynamy od stanu poczatkowego {q 0 } i szukamy stanów, do których można dojść literą a uwzględnajac przy tym λ przejścia. Ze stanu q 0 po przeczytaniu a automat A λ może pozostać w q 0, lub wykorzystujac λ przejście do q 2 lub q 3. Po przeczytaniu b automat może pozostać w q 0, przejść do q 1 lub q 3. Podobnie możemy wyliczyć resztę funkcji przejścia automatu deterministycznego A D. a b p 0 = {q 0 } {q 0, q 2, q 3 } {q 0, q 1, q 3 } p 1 = {q 0, q 1, q 3 } {q 0, q 2, q 3 } {q 0, q 1, q 2, q 3 } p 2 = {q 0, q 2, q 3 } {q 0, q 2, q 3 } {q 0, q 1, q 3 } p 3 = {q 0, q 1, q 2, q 3 } {q 0, q 2, q 3 } {q 0, q 1, q 2, q 3 } automat ten przedstawiony jest na rysunku 2.9. Zauważmy, że w przypadku, gdy w automacie z λ przejściami istnieje ciąg λ-przejść prowadzący ze stanu początkowego do pewnego stanu końcowego, co oznacza, że automat akceptuje słowo puste, to należy uwzględnić ten fakt przy determinizacji i stan początkowy automatu deterministycznego powinien być końcowy. Poniższy przykład ilustruje taką sytuację. Przykład 2.41 Na rysunku 2.10 dany jest automat z λ przejściami. Automat A D równoważny A N jest określony następujaco: A D = ({p 0, p 1, p 2, p 3 }, {a, b}, δ D, p 0, {p 0, p 1, p 3 })

2.5. Automaty z λ przejściami 35 p 1 b b b p 0 b a p 3 a a p 2 a Rysunek 2.9: Automat po determinizacji δ D a b {q 0 } {q 1, q 2 } {q 3 } {q 1, q 2 } {q 1, q 2 } - {q 3 } {q 3 } {q 2, q 3 } {q 2, q 3 } {q 3 } {q 2, q 3 } Zadanie 2.42 Dany jest automat z λ-przejściami A 1 = ({0, 1, 2, 3}, {a, b}, 0, δ, {2, 3}) gdzie funkcja przejścia dana jest w tabelce: Podać równoważny automat bez λ-przejść. δ a b λ 0 {0, 1} - {1} 1 {2, 3} {1} {2} 2 - - - 3 - - - Zadanie 2.43 Dany jest automat z λ-przejściami

36 Rozdział 2. Klasa REG języków regularnych a q λ 0 q λ 1 q 2 b b q 3 a,b Rysunek 2.10: Automat A N z λ przejściami A = ({p, g, r, s}, {0, 1} {λ}, p, δ, {s}) δ p q r s 0 {r, p} - {s} {s} 1 {q} {q, r} {r} {s} λ {r, s} {r} - - Podaj równoważny automat bez λ przejść. Zadanie 2.44 Jaki język akceptuje automat A z rysunku 2.11. Przeprowadź jego determinizację. 2.6 Twierdzenia Kleene ego W tym rozdziale udowodnimy, że wyrażenia regularne są równoważne automatom skończonym w tym sensie, że języki generowane przez wyrażenia pokrywają sie z językami akceptowanymi przez automaty.

2.6. Twierdzenia Kleene ego 37 a,b a,b q a 0 q 1 q a 2 q 3 b, λ Rysunek 2.11: Automat z λ przejściami A Twierdzenie 2.45 (twierdzenie Kleene ego) Dla każdego wyrażenia regularnego r istnieje automat A z λ przejściami, który akceptuje język generowny przez r, czyli L(A) = L(r) Dowód: Budowa automatu przebiega rekurencyjnie ze względu na strukturę wyrażenia regularnego r. Dla uproszczenia dowodu, będziemy utożsamiać automaty z ich grafami przejść. Budowane automaty mają stan początkowy s r i tylko jeden stan akceptujący f r. Nie ma strzałek prowadzących do stanu początkowego, ani strzałek wychodzących ze stanu końcowego. A λ : s λ λ f λ A : s f A a : sa a f a Rysunek 2.12: Automaty dla λ,, a. Automat dla r = nie zawiera żadnych strzałek, nie istnieje w nim żadne obliczenie prowadzące do stanu końcowego, więc nie akceptuje żadnego słowa. Automat dla r = λ akceptuje tylko słowo puste. Ponieważ nie ma w nim strzałek etykietowanych literami, nie może on przeczytać, żadnej litery. Nie ma więc obliczeń akceptujących na niepustych słowach. Automat dla r = a akceptuje dokładnie jedno słowo a. Załóżmy, że mamy już automaty A u i A v dla wyrażeń u i v przedstawione na rysunku 2.13.

38 Rozdział 2. Klasa REG języków regularnych s u f u s v f v Rysunek 2.13: Automaty A u, A v Automat A u+v odpowiadający wyrażeniu r = u + v jest pokazany na rysunku 2.14. Automat ten akceptuje sumę L(u) L(v). Rzeczywiście, jeżeli słowo należy do L(u), to obliczenie zaczyna się od λ przejścia prowadzącego do stanu s u z górnego podautomatu. Następnie przebiega według obliczenia automatu A u i kończy się λ przejściem prowadzącym z f u do stanu końcowego f r. Podobnie dla słów należących do L(v). Na odwrót, jeżeli istnieje obliczenie akceptujące automatu A u+v, to albo przechodzi ono przez A u od s u do f u i słowo wejściowe jest akceptowane przez A u i należy do L(u), albo przechodzi przez A v i słowo wejściowe jest akceptowane przez A v i należy do L(v). Automat A uv odpowiadający wyrażeniu r = uv jest pokazany na rysunku 2.15. Jeżeli słowo wejściowe w jest konkatenacją w 1 w 2, gdzie w 1 L(u) i w 2 L(v), to obliczenie akceptujące automatu A uv składa się z obliczenia akceptującego automatu A u na w 1, z λ przejścia oraz z obliczenia akceptującego automatu A v na w 2. Na odwrót, jeżeli słowo w jest akceptowane przez A uv, to obliczenie to musi przechodzić przez stany f u i s v. Fragment obliczenia od stanu początkowego s u do f u czyta jakieś słowo w 1 L(A u ), a fragment obliczenia od stanu s v do f v czyta jakieś słowo w 2 L(A v ). Słowo wejściowe jest konkatenacją w = w 1 w 2 L(u)L(v). Automat A u odpowiadający wyrażeniu r = u jest pokazany na rysunku 2.16. Jeżeli słowo w L(u ), to albo w = λ i jest akceptowane przez λ przejście prowadzące bezpośrednio od s r do f r, albo w = w 1 w 2...w k, wtedy obliczenie k razy przechodzi przez A u od s u do f u, za każdym razem czytając kolejne słowo w i. Na odwrót, jeżeli słowo w jest akceptowane przez A w, to albo obliczenie akceptujące przechodzi bezpośrednio od s r do f r λ przejściem i w = λ, albo obliczenie przechodzi k razy przez A u, za każdym razem czytając słowo w i. Każde w i prowadzi od s u do f u, więc w i L(u). Słowo wejściowe jest wtedy postaci w = w 1... w k i należy do L(u ). Ponieważ na podstawie twierdzenia 2.39 każdy automat z λ przejściami można zamienić

2.6. Twierdzenia Kleene ego 39 s u f u λ λ s r f r λ λ s v f v Rysunek 2.14: Automat A u+v na równoważny automat deterministyczny, mamy następujący wniosek. Wniosek 2.46 Dla każdego wyrażenia regularnego r istnieje deterministyczny automat skończony A, który akceptuje język generowny przez r, czyli L(A) = L(r). Przykład 2.47 Rysunek 2.17 przedstawia automat dla wyrażenia a + ab. Zadanie 2.48 Podaj automat dla wyrażenia a + (ab). Zadanie 2.49 Skonstruuj automat z λ przejściami dla wyrażeń: 1. abc, 2. ba + ab, 3. a(a + b) bb. Twierdzenie 2.50 Dla każdego automatu deterministycznego A istnieje wyrażenie regularne r takie, że L(A) = L(r).

40 Rozdział 2. Klasa REG języków regularnych s u f u s v f v λ Rysunek 2.15: Automat A uv λ s λ r s u f u f r λ λ Rysunek 2.16: Automat A u Dowód: Przyjmijmy, że A = ({q 1, q 2,...,q n }, Σ, δ, q 1, F). Zauważmy, że stany automatu A są numerowane od 1 do n i stan q 1 jest stanem początkowym. Niech R k ij oznacza zbiór wszystkich słów etykietujących drogę prowadzącą od stanu q i do stanu q j bez przechodzenia przez stany q m dla m > k, przy czym zakaz nie dotyczy stanów q i oraz q j, i lub j mogą być większe od k. Innymi słowy, jeżeli w grafie istnieje ścieżka prowadząca od stanu q i do q j prowadząca przez stany o numerach nie większych od k, to słowo utworzone z etykiet na strzałkach w tej ścieżce należy do R k ij. Łatwo zdefiniować R k ij dla k = 0. Jeżeli i j, to R 0 ij = {a δ(q i, a) = q j }, jeżeli i = j, to R 0 ij = {a δ(q i, a) = q j } {λ}.