Maszyna Turinga podstawowy abstrakcyjny model obliczeń Pojęcia: Alfabet: skończony zbiór symboli słowo nad alfabetem: skończony ciąg symboli słowo puste (ciąg symboli długości 0) ozn. e Język: dowolny podzbiór zbioru wszystkich słów nad ustalonym alfabetem Jednotaśmowa, deterministyczna maszyna Turinga : nieskończona taśma złożona z klatek głowica czytająco-pisząca moduł sterujący zawierający program maszyny M = ( Q, S, q 0, d ) Q skończony zbiór stanów, q 0 stan początkowy, S alfabet symboli taśmy; zawiera wyróżniony znak pusty (blank), oznaczany przez B lub. d podzbiór zbioru (Q S) (Q S {L,R,S}) // {L=Left, R=Right, S=Stay} stanowi program maszyny; każda piątka w zbiorze d jest instrukcją postaci (stan-1, znak-1) à (stan-2, znak-2, przesunięcie) Sytuacja początkowa: na taśmie zapisane słowo wejściowe, nie zawierające 1
B, pozostałe klatki zawierają B głowica taśmy ustawiona na pierwszym znaku słowa wejściowego maszyna w stanie q 0 Działanie maszyny (wykonywanie programu) Jeśli (stan-1, litera-1) à (stan-2, znak-2, przesunięcie) jest instrukcja maszyny M, oraz M jest w stanie stan-1, głowica czyta znak-1, to M przechodzi w stan-2 znak-1 zostaje zastąpiony przez znak-2 głowica wykonuje przesunięcie Sytuacja końcowa: dla aktualnego stanu oraz czytanego znaku nie jest zdefiniowana instrukcja w programie maszyny. Def. Maszyna M = ( Q, S, q 0, d ) jest deterministyczna jeśli d jest funkcją częściową na zbiorze Q S (czyli każda reguła ma inną lewą stronę). W przeciwnym przypadku (program maszyny jest "tylko" relacją) M jest niedeterministyczna. Def. Konfiguracja maszyny to trójka (stan, zawartość taśmy, położenie głowicy). Oznaczenie: X 1 X 2... X k-1 s X k X k+1... X m, gdzie s jest aktualnym stanem, X 1 X 2... X k-1 X k X k+1... X m jest zawartością spójnego fragmentu taśmy, k=1,...,m, 2
głowica czyta klatkę zawierającą X k pozostałe znaki na taśmie to blanki. Ex. 1. Zwiększanie liczby binarnej o 1 konfiguracja początkowa: p101011 końcowa: 101f100 Lub w takiej notacji: dane :...101011... p^ wynik :...101100... f^ Program M (p stan początkowy): (p, 0, p, 0, R) //idź w prawo (p, 1, p, 1, R) //idź w prawo (p, B, q, B, L) //blank - zawróć (q, 1, q, 0, L) //zamieniaj kończące 1 na 0 (q, 0, f, 1, L) //zamień ostatnie 0 na 1,koniec (q, B, f, 1, S) //gdy na wejściu same jedynki Jak jest długość programu w maszynie zwiększającej o 1 liczbę dziesiętna? Jak wyglądałby program gdyby kodowanie było unarne czyli liczba n zapisana za pomocą n jedynek? Ex. 2. Odwracanie kolejności znaków w słowie binarnym. Idea: kasujemy znak z lewej, "zapamiętujemy" go w "zbiorze stanów", idziemy do końca w prawo i na pierwszym pustym miejscu wpisujemy zapamiętany znak. 3
fragment programu (nie jest to jedyne rozwiązanie!): (p, 0, q, B, R) (p, 1, r, B, R) (q, *, q, *, R) (q, B, s, 0, L) (r, *, r, *, R) (r, B, s, 1, L) stany p, q pamiętają (rozróżniają) znak który jest transportowany na prawy koniec słowa. pełny program musi zawierać ponadto opisy: analogicznego transportu prawego znaku na lewy koniec stwierdzenia że wszystkie znaki już przestawione powstanie blank w środku słowa zsunięcie znaków Maszyna Turinga jako akceptor (lub: automat do rozpoznawania języka) Wyróżniamy drugi stan: (akceptujący) q f stan końcowy Def. Niech M będzie ustaloną deterministyczną MT M. Początkowo: na taśmie słowo w, nie zawierające symbolu pustego, nad alfabetem S, głowica czyta pierwszy symbol słowa w. Jeśli po skończonej liczbie kroków M zatrzymuje się w stanie akceptującym to mówimy że M akceptuje (rozpoznaje) słowo w. W przeciwnym przypadku (tj. gdy M zatrzymuje się w 4
innym stanie lub nie zatrzymuje się w ogóle) mówimy że M odrzuca słowo w. Def. Językiem akceptowanym przez deterministyczną MT M jest zbiór wszystkich słów akceptowanych przez M, oznaczany L(M). Def. Mówimy, że MT M akceptuje język L jeśli L(M) = L. Def. Język L jest rekurencyjnie przeliczalny := istnieje MT M akceptująca ten język Def. Język L jest rekurencyjny := istnieje MT M akceptująca ten język, zatrzymująca się na każdym słowie wejściowym (tzn. posiadająca własność stopu) Ex. Język palindromów nad alfabetem {a, b, c} 0 1 2 3 4 5 6 7 N T --+---------------------------------------- a B1R a1r a2r a3r B7L ans ans a7l b B2R b1r b2r b3r BNS B7L BNS b7l c B3R c1r c2r c3r cns cns B7L c7l B BTS B4L B5L B6L BTS BTS BTS B0R ------------------------------------------- Stan N odrzucenie (nie ma przejścia dalej) Stan T akceptacja. Tak zdefiniowana MT M ma własność stopu, zatem: Język palindromów jest rekurencyjny. Techniki konstruowania maszyn Turinga 1. Przechowywanie informacji w sterowaniu ("w zbiorze stanów", jak powyżej) 5
2. Taśma wielościeżkowa (znak na taśmie jest k-tką). Np. 3-ścieżkowa MT do rozpoznawania liczb pierwszych. Ścieżka 1: liczba wejściowa, z ogranicznikami #, $ Ścieżka 2: kolejne liczby naturalne, w pierwszej fazie wpisywana 2. Ścieżka 3: robocza kopiujemy ś.1 na ś.3, następnie odejmujemy ś.2 od ś.3, jak długo wynik dodatni. gdy wynik 0 to koniec, odrzuć, wpp. zwiększ ś.2 o 1 jeśli ś.2 = ś.1 to koniec akceptuj wpp. powtarzaj kopiowanie ś.1 na ś.3 itd. # 1 0 1 1 1 1 $ B B B B B B 1 0 1 B B B B 1 0 0 1 0 1 B B B głowica: ^ Badanie czy 47 jest liczbą pierwszą. Aktualnie wykonywane dzielenie przez 5. Dwukrotnie już odjęto ścieżkę 2 od ścieżki 3. 3. Odfajkowywanie symboli Na drugiej ścieżce można zaznaczać położenie do którego chcemy wrócić. Np. rozpoznawanie słów postaci ww. Albo a n b n. 4. Podprogramy. Przykład realizacja "odfajkowywania" symboli 6
odfajkować najbardziej na prawo położoną jedynkę S = { B blank, 0 "normalne 0" 1 "normalne 1" % "odfajkowane 1" } Program M (p stan początkowy): (p, 0, p, 0, R) (p, 1, p, 1, R) (p, B, q, B, L) (q, 0, q, 0, L) (q, 1, f, %, S) // idź w prawo // idź w prawo // zawróć w lewo // idź w lewo, omijaj zera // zrobione Jeśli jest to fragment podprogram innej maszyny, to stan p jest stanem wejściowym do podprogramu, a od stanu f kontynuuje się wykonanie pozostałej części Przykład: Konstruujemy MT M taką, że L(M) = {a n b n, n³0}. 9 jest stanem akceptującym. (0, B, 9, B, S) //słowo puste jest OK (0, a, 1, X, R) //zastąp pierwsze a przez X (1, a, 1, a, R) //w prawo do pierwszego b (1, Y, 1, Y, R) (1, b, 2, Y, L) //zastąp b przez Y (2, Y, 2, Y, L) //wróć na początek (2, a, 2, a, L) (2, X, 0, X, R) //znaleziony, od początku (0, Y, 0, Y, R) //ostatnie przejście w prawo // jeśli znajdzie b to nie zaakceptuje // jeśli znajdzie B to OK 7
Def. MT M ma własność stopu, jeśli dla dowolnego słowa wejściowego w, obliczenie M na tym słowie jest skończone. Warianty modelu maszyny Turinga. 1. k taśm, k>=1, k-tm (k jest stałą, liczba taśm nie zależy od słowa wejściowego). każda taśma ma swoją głowicę. pojedynczy ruch zależy od stanu, symboli czytanych przez głowice, i dotyczy wszystkich głowic. Wygodny opis algorytmów, np. sprawdzanie czy liczba pierwsza. Operacje arytmetyczne wykonywane na osobnych taśmach, osobnymi głowicami. Fakt: Dla dowolnego języka L rozpoznawanego przez k- TM istnieje 1-TM rozpoznająca ten język. Dowód: symulacja k-tm przez 1-TM, opis za pomocą 2k ścieżek. 2. Niedeterministyczna MT (NDTM) Program może zawierać więcej niż jedno możliwe przejście dla danej pary (stan, symbol). Def. NDTM M akceptuje słowo w ç è istnieje ciąg konfiguracji zgodny z funkcją przejścia maszyny M, prowadzący od konfiguracji początkowej do konfiguracji w stanie akceptującym. NDTM M odrzuca słowo w jeśli KAŻDY ciąg konfiguracji 8
zgodny z funkcją przejścia kończy się w stanie nieakceptującym albo jest nieskończony. Spostrzeżenie: Własność stopu dla NDTM nie jest istotna. Fakt: Dla dowolnego języka L rozpoznawanego przez NDTM istnieje TM rozpoznająca ten język. Dowód: przegląd drzewa możliwych konfiguracji poziomami, zaczynając od korzenia. Kodowanie maszyn Turinga Np. stan (symbol alfabetu, kierunek) o numerze i kodujemy za pomocą i zer: 00... 0 (i=1, 2,... Q, stan początkowy ma numer 1, końcowy-akceptujący ma numer Q w zapisie piątki (z funkcji przejścia) ciągi zer oddzielane jedną jedynką zapis maszyny: ciąg piątek oddzielanych dwiema jedynkami na początku ciągu piątek dowolna, >= 3 liczba jedynek na końcu ciągu 3 jedynki M dowolna MT M można przedstawić jako liczbę (binarną) w powyższy sposób dzięki dowolnej liczbie jedynek na początku zapisu jest nieskończenie wiele liczb kodujących tę samą MT każda liczba k jest kodem pewnej MT M (umownie: jeśli k nie jest prawidłowym syntaktycznie opisem MT to k koduje MT akceptującą język pusty) 9
każda liczba jest kodem dokładnie jednej MT Uniwersalna MT: na wejściu: opis MT M oraz słowo w działanie: symulacja działania maszyny M gdy na wejściu dla M jest słowo w. Fakt: Uniwersalna MT istnieje. najmniejsza znaleziona dotychczas: 5 stanów, 7 symboli Maszyna Turinga jako model obliczania funkcji Rozważamy funkcje częściowe o argumentach i wartościach naturalnych. Dana jest TM M Na wejściu: liczba n zapisana w ustalony sposób (np. unarnie, albo binarnie), n>=0 Jeśli M zatrzymuje się z taśmą zawierającą liczbę m (zapisaną zgodnie z ustalonym sposobem zapisu liczb), to mówimy że f(n) = m Tak zdefiniowana funkcja częściowa f : N à N jest funkcją realizowaną (lub: obliczaną) przez M. Jeśli funkcja f jest obliczana przez M to mówimy że f jest funkcją częściowo rekurencyjną (właściwie: częściową rekurencyjną). Czyli, dla TM obliczającej funkcję f: 10
dla pewnych argumentów n, M może się nie zatrzymać (takie n nie należy do dziedziny funkcji) dla pewnych argumentów n, M może wypisać słowo nie będące liczbą w ustalonym sposobie zapisu liczb (takie n nie należy do dziedziny funkcji) Inne modele obliczeń: Maszyna RAM (random access machine) abstrakcyjny model komputera: taśma wejściowa (read-only) taśma wyjściowa (write-only) pamięć danych: nieskończona liczba rejestrów (słów), każdy zawiera liczbę całkowita dowolnej wielkości; adres 0 akumulator program (poza pamięcią danych) licznik rozkazów Lista rozkazów: LOAD, STORE, ADD, SUB, MULT, DIV, READ, WRITE, JUMP, JGTZ, JZERO, HALT Tryby adresacji: natychmiastowy, bezpośredni, pośredni (jak w przykładowej maszynie cyfrowej). RAM jest zarówno modelem obliczania funkcji liczbowych jak i rozpoznawania języków. RAM jako urządzenie obliczające funkcję f : na taśmie wejściowej argument n; po zakończeniu obliczenia na taśmie wyjściowej wartość f(n); w przypadku gdy n nie należy do dziedziny maszyna 11
nie zatrzymuje się lub wypisuje wynik który nie jest liczbą RAM jako urządzenie rozpoznające język L: na taśmie wejściowej słowo wejściowe w; po zakończeniu obliczenia na taśmie wyjściowej wartość 1 wtedy i tylko wtedy gdy w Î L; w przypadku gdy w Ï L maszyna nie zatrzymuje się lub wypisuje jakikolwiek wynik różny od 1 Fakt: Maszyna Turinga oraz RAM są równoważnymi modelami obliczeń. Czyli: dla dowolnej funkcji f : N à N zachodzi: Istnieje program P na RAM obliczający f çè istnieje (równoważna) MT M obliczająca f. Analogicznie dla języków: Dla dowolnego języka L: Istnieje program P na RAM rozpoznający L çè istnieje (równoważna) MT M rozpoznająca L. Inne modele obliczeń: funkcje rekurencyjne algorytmy Markowa algorytmy Posta systemy Posta języki programowania Fakt: Wszystkie powyższe modele obliczeń są równoważne MT. 12
Czyli wystarcza używać standardowego języka opisu algorytmu. Fakt: Wszystkie znane modele obliczeń nie są mocniejsze niż MT. czyli: wszystko co można na nich rozwiązać jest rozwiązywalne również w modelu MT. Teza Churcha-Turinga. Wszystko co jest obliczalne intuicyjnie jest obliczalne na MT. Jakie problemy są rozwiązywalne, a jakie nie są? Czy w ogóle istnieją nierozwiązywalne problemy? Ile ich jest? Dla ustalonego modelu obliczeń można ustalić alfabet jego opisu: Każdy algorytm jest zapisywalny jako skończony ciąg symboli. Np. MT zapisywana jest za pomocą skończonego ciągu piątek, w języku jak powyżej. Zakładamy że napis niezgodny z ustaloną syntaktyką oznacza maszynę akceptującą pusty język (dla urządzeń obliczających funkcje: funkcję o pustej dziedzinie). Takie opisy można ustawić w ciąg: najpierw opisy długości 1, 2, 3, itd. Dla ustalonej długości kolejność leksykograficzna. è Maszyn Turinga jest przeliczalnie wiele. 13
Ile jest języków? alfabet jest skończony, np. {0, 1, B} wszystkich słów nad alfabetem jest przeliczalnie wiele wszystkich podzbiorów zbioru słów jest nieprzeliczalnie wiele è istnieją języki których nie da się rozpoznać na MT è istnieją problemy algorytmiczne dla których nie istnieje rozwiązujący je algorytm W praktyce często posługujemy się pojęciem problemu algorytmicznego: Problem algorytmiczny (decyzyjny) Q we: instancja problemu (wystąpienie problemu) wy: TAK / NIE Np. czy dany graf można pokolorować 3 kolorami czy w danym zbiorze elementów o podanych wagach istnieje podzbiór o sumarycznej wadze równej zadanej liczbie czy w zadanej tablicy występuje zadany element czy w grafie o podanych wagach krawędzi i ustalonych wierzchołkach u, v istnieje ścieżka z u do v o długości nie przekraczającej zadanej wartości d. Problem algorytmiczny, poprzez kodowanie instancji w ustalony sposób, sprowadza się do rozpoznawania języka. Problem jest rozstrzygalny: odpowiadający mu język jest rekurencyjny 14
Problem jest nierozstrzygalny: odpowiadający mu język nie jest rekurencyjny Problem jest częściowo rozstrzygalny: odpowiadający mu język jest rekurencyjnie przeliczalny. Przykład problemu nierozstrzygalnego: Problem stopu: Wejście: MT M oraz słowo w Wyjście: "tak" wtedy i tylko wtedy gdy M zatrzymuje się jeśli na wejściu otrzyma słowo w. Fakt: Problem stopu jest częściowo rozstrzygalny Dowód: wystarcza symulować działanie M na w jeśli M się zatrzyma w stanie akceptującym to odpowiadamy "tak" jeśli M się zatrzyma w stanie nieakceptującym to odpowiadamy "nie" jeśli M się nie zatrzyma, to my też nie zatrzymamy symulacji, która będzie trwała w nieskończoność, a zatem nic nie odpowiemy Problem odpowiedniości Posta We: A=w 1,...,w k, B=x 1,...,x k, - listy słów nad ustalonym alfabetem Wy: "tak" wtedy i tylko wtedy gdy istnieje ciąg liczb naturalnych i(1),...,i(m), m>=1, taki, że w i(1),..., w i(m) = x i(1),..., x i(m). Np. 15
dla list: A=1, 10111, 10, B=111, 10, 0, odpowiedź jest "tak" rozwiązaniem jest ciąg 2,1,1,3. dla list: A=10, 011, 101, B=101, 11, 011, odpowiedź jest "nie" w tym przypadku można to udowodnić. Fakt nierozstrzygalności mówi, że nie istnieje jednak ogólna metoda dowodzenia tej własności dla dowolnej instancji. Przykłady problemów które nie są częściowo rozstrzygalne: Dopełnienie problemu stopu: Wejście: MT M oraz słowo w Wyjście: "tak" wtedy i tylko wtedy gdy M nie zatrzymuje się jeśli na wejściu otrzyma słowo w. Pustość języka Wejście: MT M Wyjście: "tak" wtedy i tylko wtedy gdy L(M)=Æ. 16