Problem Hilberta: 9 Czy istnieje ogólna mechaniczna procedura, która w zasadzie pozwoliłaby nam po kolei rozwiązać wszystkie matematyczne problemy (należące do odpowiednio zdefiniowanej klasy)? 2 Przykłady algorytmów Start Algorytm S a j i Obliczanie wielomianu Znajdowanie podzbioru o danej sumie Sprawdzanie, czy liczba jest automorficzna Wyznaczanie elementów ciągu Fibonacciego Obliczanie n! 3 function s(j:integer); real; var i, S: integer; begin S:=a[j]; i:=; while i <= j do begin S:=S*x; i:=i+ end; s:=s end. Stop NIE i < j TAK S S*x i i + czy program???? 4 Cechy algorytmu: składa się z kroków, działa na pewnych danych wejściowych, wytwarza pewne dane wyjściowe, jest dobrze określony (reguły postępowania uwzględniają wszystkie przypadki, jakie mogą wystąpić podczas wykonywania algorytmu), jest skończony (obliczenia są wykonywane w skończonej liczbie kroków) lub cykliczny (np. działanie systemu operacyjnego), jest wykonywalny (każdy krok jest tak zdefiniowany, aby człowiek mógł go skutecznie wykonać w skończonym czasie). Pojęcie algorytmu Jednoznaczny, dobrze (krok po kroku) określony przepis mechanicznego rozwiązania dowolnego konkretnego zadania z pewnej klasy zadań. W rozwiązaniu stosuje się skończoną liczbę reguł postępowania (czyli wykonywania kroków prowadzących do rozwiązania). 5 6
(dodanie do liczby zapisanej w systemie jedynkowym) Problem Hilberta: Czy istnieje ogólna mechaniczna procedura, która w zasadzie pozwoliłaby nam po kolei rozwiązać wszystkie matematyczne problemy (należące do odpowiednio zdefiniowanej klasy)? jest matematyczną idealizacją urządzenia wykonującego pewne (zdefiniowane w skończony sposób) obliczenia. 7 przeczytany symbol stany głowica dane taśma 8 Instrukcja maszyny Turinga (dodanie do liczby zapisanej w systemie jedynkowym) WE WY stan przeczytany symbol a stan zapisany symbol a kierunek ruchu Instrukcja: (, a, a,, ) zapisz zapisz wynik zapisz zapisz stop 9 Deterministyczna jednotaśmowa maszyna Turinga zapisz w prawo zapisz zapisz w prawo zapisz stop T = Q, A, B, δ, Q = {,, 2,..., p } - skończony zbiór stanów - wyróżniony stan początkowy A - skończony alfabet symboli B A-wyróżniony symbol pusty δ- funkcja przejść (zbiór instrukcji) δ : Q x A Q x A x {, } δ( i, a j ) = ( m, a n, ) składa się z następujących elementów: skończonego zbioru stanów, skończonego alfabetu symboli, nieskończonej taśmy z zaznaczonymi kwadratami, z których każdy może zawierać pojedynczy symbol, ruchomej głowicy odczytująco-zapisującej, która może wędrować wzdłuż taśmy przesuwając się na raz o jeden kwadrat, diagramu przejść między stanami zawierającego instrukcje, które powodują, że zmiany następują przy każdym zatrzymaniu się. 2 2
Teza Churcha-Turinga (936 r.) Język nad alfabetem skończonym Wszystko, co jest efektywnie obliczalne daje się wyrazić za pomocą funkcji λ-definiowalnych, funkcji rekurencyjnych lub innych formalizmów im równoważnych. W 937 roku Turing i Church (niezależnie) wykazali, że każdą obliczalną (w sensie Turinga) operację można zapisać w postaci odpowiedniego wyrażenia rachunku λ Churcha (i odwrotnie). 3 A k - alfabet złożony z k symboli (k>) zdefiniujemy operację sklejania symboli alfabetu A k następująco: A k = {ε} (słowo puste) A ki = A k A i- k, i> oznaczmy przez U Α * i k = Ak i= 4 Przykład A 3 = {a, b, c} A 3 = {ε} A 3 = {a, b, c} A 32 = {aa, ab, ac, ba, bb, bc, ca, cb, cc} A 33 = {aaa, aab, aac, aba, abb, abc, aca, acb, acc, baa, bab, bac, bba, bbb, bbc, bca, bcb, bcc caa, cab, cac, cba, cbb, cbc, cca, ccb, ccc}... 5 Język L(M) akceptowany przez maszynę M jest zbiorem wszystkich słów należących do A*, które po umieszczeniu na taśmie maszyny M (maszyna w stanie, głowica na pierwszym od lewej znaku słowa) powodują, że maszyna M przechodzi w stan końcowy. 6 Konfiguracja maszyny Turinga Konfiguracja maszyny Turinga Φ Ψ Φ Ψ a j Q sterowanie Φ A k * (, Φ, Ψ) Ψ A k *\{ε} konfiguracja początkowa (, ε, Ψ} 7 Instrukcja ( j, a j, a k,, k ) jest stosowalna do konfiguracji α = (, Φ, Ψ) jeśli = j oraz Ψ = a j Ψ dla pewnego Ψ A k *. Konfiguracja końcowa - żadna instrukcja nie jest stosowalna. j 8 3
Φ α = (, Φ, aψ ) Ψ Φ α = (, Φ c, aψ ) Ψ a c a Instrukcja: (aa R ) Instrukcja: (aa L ) 9 2 Jeżeli α = (, Φ, aψ ) nie jest konfiguracją końcową (aa ) jest instrukcją stosowalną do α to następnikiem konfiguracji α jest β: () jeżeli = R, to (a) jeżeli Ψ ε, to β = (, Φa, Ψ ) (b) jeżeli Ψ = ε, to β = (, Φa, B) (2) jeżeli = L (a) jeżeli Φ εi Φ = Φ c, to β = (, Φ, ca Ψ ) (b) jeżeli Φ = ε, to β = (, ε, Ba Ψ ) α β (β jest następnikiem α) oznaczmy przez * zwrotne i przechodnie domknięcie relacji α * β wtedy i tylko wtedy gdy α = β albo istnieje skończony ciąg konfiguracji γ, γ 2,..., γ n, taki, że: γ = α, γ n = β, γ i γ i+ dla i n 2 22 Funkcje definiowane przez maszynę Turinga T definiuje rodzinę funkcji f T,n, (gdzie n jest liczbą argumentów) nad alfabetem A k- = A k \{B}. * n * ( A k- ) k- f T, n = A f T,n = {((x, x 2,..., x n ), delete (B, yz)) istnieje Q, takie, że (, ε, x Bx 2 B...Bx n B) * (, y, z) i (, y, z) jest konfiguracją końcową} Funkcja delete(b,yz) jest funkcją usuwającą wszystkie wystąpienia symbolu B w słowie yz. Jeżeli maszyna M zatrzymuje się z taśmą zawierającą m, dla pewnego m to mówimy, że f(i, i 2, i n ) = m, gdzie f jest funkcją o n argumentach obliczaną przez tę maszynę Turinga. 23 24 4
Przykład maszyny Turinga T = (Q, A 3, B, I, ) A 3 = {a, b, B} Q = {,, 2 } I = { BBR, aar, bbr, abr, bbr, BBR 2 } b/b, R b/b, R 2 abab B/B, R a/a, R B/B, R a/b, R abbb 25 Wielotaśmowa maszyna Turinga może zapisywać na taśmie wyjściowej łańcuchy nad alfabetem A oddzielone np. znakiem #. Język G(M) generowany przez M składa się ze wszystkich słów, które pojawiają się między parą znaczników # na taśmie wyjściowej maszyny M. 26 Podsumowanie język rekurencyjnie przeliczalny funkcje częściowo rekurencyjne Jeżeli L=G(M), to L jest rekurencyjnie przeliczalny. jest modelem obliczeń. Funkcje obliczane przez maszynę Turinga nazywamy funkcjami częściowo rekurencyjnymi. Języki akceptowane przez maszynę Turinga są rekurencyjnie przeliczalne. 27 28 5