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.

Podobne dokumenty