MASZYNA TURINGA
Transkrypt
MASZYNA TURINGA
Krupa Paweł grupa KrZZIs1013 MASZYNA TURINGA Brytyjski matematyk Alan Turing (1912-1954) opracował w 1936 roku abstrakcyjny model komputera, służącego do wykonywania algorytmów, znany jako Maszyna Turinga. W jego pracy On Computable Numbers, with an application to the Entscheidungsproblem, opublikowanej w 1937 roku, Maszyna Turinga nie była rozumiana jako fizyczny przedmiot, którego działanie można empirycznie sprawdzić, a wyłącznie koncepcja działania, odtwarzająca czynności człowieka podczas dokonywania obliczeń. Zamysł ten wprowadza pojęcie komputera: przy pomocy maszyny realizowany może być zestaw instrukcji co powoduje, że można uznać ją za „urządzenie“ które służy realizacji tego algorytmu. Podstawowym elementem algorytmu jest nieskończona taśma, zawierająca klatki z symbolami które są przetwarzane – jest to odpowiednik dzisiejszej pamięci komputera; taśma może być nieskończona jednostronnie lub dwustronnie, a każda z klatek może znajdować się w jednym z N stanów. Symbole, które są przetwarzane przez maszynę, stanowią dane wejściowe. Maszyna odczytuje z klatek informacje, po czym przetwarza je na inne symbole, będące danymi wyjściowymi. Wyniki zapisywane są również w klatkach na taśmie. Drugim elementem algorytmu jest ruchoma głowica odczytująco – zapisująca, odpowiednik urządzeń wejścia/wyjścia używanych w dzisiejszych komputerach. Podczas pracy głowica zawsze znajduje się nad jedną z klatek taśmy, może się ona poruszać w prawo lub w lewo do klatek ze sobą sąsiadujących. W wyniku przetwarzania danych z zestawu odczytanych symboli wejścia otrzymujemy inne, zapisane w klatkach jako dane wyjściowe. Trzeci element Maszyny Turinga to układ sterowania głowicą, przeznaczony do zarządzania przetwarzaniem informacji. Jego zadaniem jest przesyłanie symboli do głowicy w celu ich zapisu w klatkach oraz odczyt symboli z klatek za pośrednictwem głowicy. Steruje on także poruszaniem głowicy w prawo lub w lewo – przesunięcie głowicy nad taśmą jest nazywane rozkazem. Układ sterowania może znajdować się w jednym ze stanów, który określa jak Maszyna zadziała gdy odczyta z taśmy określony symbol. Operacje wykonywane przez układ sterowania zależą zatem od dwóch czynników: pierwszym z nich jest odczytany symbol z klatki na taśmie, drugim aktualny stan układu sterującego. Stany układu sterowania zostały oznaczone kolejnymi nazwami: q0, q1, q2 … qn, stanem początkowym działania maszyny przed przetwarzaniem symboli z taśmy jest q0. Przyjmuje się następują składnię instrukcji dla Maszyny Turinga: S0 – oznacza symbol odczytany przez głowicę z taśmy z klatki oznaczonej jako bieżąca qi – aktualny stan w jakim znajduje się układ sterowania Sz – oznaczenie symbolu który zostanie zapisany w aktualnej klatce na taśmie qj - oznacza nowy stan w jaki przejdzie układ sterowania po wykonaniu tej operacji L/R – oznaczenie ruchu głowicy w lewo (L) i w prawo (R) Symbole S0 oraz qi są częścią identyfikacyjną instrukcji. Maszyna może wykonać tyle poleceń ile zdefiniowanych zostanie części identyfikacyjnych. Nie ma możliwości, aby w programie zdefiniowane zostały dwie instrukcje posiadające taką samą część identyfikacyjną z uwagi na to, że nie będzie możliwości ustalenia którą z nich należy wykonać. Częścią operacyjną są symbole Sz, qj, L/P, część ta definiuje działanie, które podejmują poszczególne instrukcje. Dla różnych instrukcji mogą istnieć takie same części operacyjne - nie spowoduje to konfliktu jak w przypadku części identyfikacyjnych z uwagi na to, iż w praktyce instrukcje będą wykonywać po prostu identyczne działanie. Maszyna Turinga znalazła zastosowanie jako urządzenie korzystające z zapisu unarnego (inaczej zapis w kodzie unarnym – słowa w tym kodzie są ciągami bitów o tej samej wartości zakończonymi bitem o przeciwnej wartości np. {1,01,001,0001} ) do dokonywania obliczeń funkcji na liczbach naturalnych. Funkcje które może obliczać Maszyna są funkcjami częściowo rekurencyjnymi; jeżeli funkcja jest określona dla całej dziedziny wówczas jest całkowicie rekurencyjna (np. n! lub mnożenie). Znana jest również wielotaśmowa Maszyna Turinga, która zawiera skończoną ilość nieskończenie długich taśm dwustronnych. W takim przypadku, w każdym ruchu następuje zmiana stanu Maszyny, w każdej klatce jest zapisywany nowy symbol, a także każda z głowic może przesuwać się niezależnie od pozostałych. Innym wariantem jest niedeterministyczna wersja maszyny w której jednej parze (w skład której wchodzą symbol oraz stan) może odpowiadać kilka instrukcji. W przypadku współczesnych komputerów programy składają się z ciągu kolejno wykonywanych instrukcji, tymczasem program dla Maszyny Turinga sam w sobie jest tablicą instrukcji. Dla wszystkich par symboli wejściowych oraz stanów wewnętrznych określany jest symbol wyjściowy, zmiana stanu na nowy oraz ruch głowicy, a kolejność instrukcji w tablicy jest całkowicie dowolna. Maszyna podczas działania będąc w określonym stanie wewnętrznym po napotkaniu danego symbolu odszukuje w tablicy właściwej pary, a po znalezieniu przechodzi do wykonania części operacyjnej. Jeżeli w programie nie jest zdefiniowane działanie dla aktualnego symbolu wejściowego oraz stanu wewnętrznego, wówczas Maszyna kończy jego wykonywanie. Tym samym, odpowiednikiem procesora używanego we współczesnych komputerach jest głowica, pamięci – taśma, system operacyjny odpowiada z kolei schematowi przejść pomiędzy stanami. Istnieje również koncepcja uniwersalnej Maszyny Turinga opisana jako Maszyna Turinga A. Posiada ona zdolność symulowania pracy jakiejkolwiek innej Maszyny Turinga B (która jest opisana jako dane wejściowe przeznaczone dla maszyny A) z użyciem dowolnych danych wejściowych dla maszyny B. Obrazowym przedstawieniem założeń uniwersalnej Maszyny Turinga jest dowolny komputer za pomocą którego można wykonać dowolny program z użyciem dowolnego zestawienia danych. Nie można jednak powiedzieć, że współczesne komputery są uniwersalnymi Maszynami Turinga, gdyż ilość danych które możemy za ich pomocą przechować jest skończona - za pomocą danego komputera możemy wykonać zatem skończoną ilość programów. Jednym z problemów w Maszynie Turinga jest to, czy maszyna wykonująca dany program w końcu się zatrzyma – problem ten jest nazywany problemem stopu. Jest to problem nierozstrzygalny, ponieważ nie istnieje uniwersalny algorytm rozstrzygający o innych algorytmach, czy mają własność stopu.