Żałując nieco, że nie mogłem wziąć udziału w dyskusji seminaryjnej, o której mowa w dwóch ostatnich wpisach, postanowiłem włączyć się do niej post factum, generując w niniejszym blogu co najmniej dwa nowe wpisy. Dodatkową zachętą był fakt, że podstawę dyskusji stanowiły fragmenty książki „Umysł–Komputer–Świat …”, którą współtworzyłem.
Co to znaczy zatem, że umysł jest maszyną Turinga?
Jest to pytanie bardzo ważne, bo wobec bliskiego związku między maszynami Turinga a komputerami cyfrowymi, idzie w nim o to, jak umysły ludzkie mają się do komputerów cyfrowych.
Historycznie rzecz biorąc, maszyny Turinga wymyślił angielski matematyk, Alan Turing, który za ich pomocą objaśnił światu (w roku 1936) nie dość jasne jeszcze pojęcie algorytmu – algorytmu, czyli procedury mechanicznego przekształcania symbolicznych danych w symboliczne wyniki. Przekształcanie takie występuje nader często w matematyce, na przykład wtedy, gdy rozwiązujemy równania kwadratowe metodą delty lub dodajemy dwa ułamki o różnych mianownikach (które to schematyczne czynności dobrze znamy ze szkoły).
Choć precyzujący ideę algorytmu pomysł Turinga określa się mianem maszyny, a więc czegoś fizycznego, to tak naprawdę łączy on w sobie dwa znaczenia: hardwarowe czyli sprzętowe, i softwarowe czyli programistyczne.
Zgodnie ze znaczeniem pierwszym maszyną Turinga zwie się pewne urządzenie fizyczne, wyposażone w podzieloną na komórki taśmę, głowicę do odczytu/zapisu symbolicznych danych oraz fizycznie zrealizowaną (np. mechanicznie lub elektronicznie) tablicę instrukcji. Urządzenie to działa na podstawie programu zawartego w tablicy instrukcji, przy czym każda instrukcja ma postać rozkazu warunkowego: „jeśli (stanem wewn. maszyny jest x, a głowica czyta symbol s), to należy (zmienić stan na y, zmienić symbol na p i przesunąć głowicę o jedną komórkę w prawo lub w lewo)”. Wykonując rozkaz po rozkazie, maszyna zmienia zawartość taśmy, a czyni to dotąd, aż zatrzyma się w stanie końcowym i pozostawi na taśmie ciąg symboli będący zakodowanym wynikiem zleconego jej zadania. Najważniejsze jednak, że maszyna Turinga rozumiana „sprzętowo” wszystko to może robić faktycznie; ot tak choćby jak staroświecka i bezpośrednio kontrolowana przez człowieka maszyna do pisania.
Ponieważ kluczowym elementem opisanego mechanizmu jest tablica instrukcji czyli program, to maszynę Turinga sytuuje się częściej w sferze teorii programowania, a to prowadzi nas do drugiego z wymienionych wyżej znaczeń. Przy tym drugim znaczeniu konstrukcja Turinga jest pewną ideą teoretyczną, która pokazuje, na czym polega mechaniczne przetwarzanie danych w wynik, czyli działanie algorytmiczne. Zgodnie z tąże ideą dane trzeba w sposób jednoznaczny zakodować, a potem poddać ściśle określonym przekształceniom, zestawionym jedno po drugim, bez żadnych luk, w programie maszyny. W ujęciu takim fizyczna konstrukcja maszyny nie ma większego znaczenia; ważne, że działanie automatu jest jakoś skorelowane z jego programem (a Turing podał po prostu pewien skrajnie prosty i raczej czysto teoretyczny schemat takiej korelacji).
W tym miejscu trzeba objaśnić jeszcze jedną rzecz.
Otóż Alan Turing wymyślił tak naprawdę dwa rodzaje maszyn. Po pierwsze, były to automaty konkretne (o nich traktował tekst wyżej) – wyposażone w konkretne programy do wykonywania określonych zadań (np. sumowania liczb).
Po drugie jednak, były to maszyny uniwersalne – zaopatrzone w specjalne programy do symulowania działań dowolnych automatów konkretnych. A co bardzo ważne: choć maszyny drugiego rodzaju można definiować czy też projektować na różne sposoby (zależy to m.in. od liczby ich stanów wewnętrznych), to ponieważ wszystkie one są ze sobą identyczne pod względem możliwości symulacyjnych, zastępuje się je (w sferze matematycznej abstrakcji) zbiorczym pojęciem jednej jedynej uniwersalnej maszyny Turinga (w skrócie: UMT).
Jeśli pomyśleć o takiej maszynie jako o urządzeniu faktycznie działającym, to pracuje ona w sposób następujący. Na jej taśmę wprowadza się zakodowany opis pewnego automatu konkretnego M (chodzi głównie o definiujący go program, czyli tablicę zmian stanów) oraz dane wejściowe automatu M. Następnie maszyna UMT czyta naprzemiennie: raz dane wejściowe automatu M, raz jego tablicę instrukcji (tym właśnie steruje jej uniwersalny program) i zależnie od czytanych w danej chwili instrukcji wypisuje na taśmie odpowiednie symbole. Ponieważ są to takie same symbole, jakie pojawiałyby się na taśmie M-a, o maszynie UMT trzeba stwierdzić, że symuluje ona działanie automatu M, którego program jej dostarczono. A co jest niezwykle ważne: w taki sam sposób może ona naśladować dowolny automat konkretny.
———
Cierpliwy czytelnik wpisu zastanawia się zapewne, co te wszystkie historyczne automaty – konkretne, uniwersalne, interpretowane fizykalnie lub teoretycznie itd – łączy ze współczesnością, czyli używanymi dziś komputerami?
Odpowiedź brzmi dość zaskakująco: otóż maszyny Turinga są równoważne komputerom cyfrowym. Wszystkim. Szybkim i wolnym, istniejącym i jeszcze nie skonstruowanym.
W stylistyce programistycznej fakt ten można wysłowić następująco: każdy program dla maszyny cyfrowej, niezależnie od jego stopnia złożoności i wymagań co do szybkości procesora, daje się odpowiednio zakodować i powierzyć do realizacji urządzeniu tak prostemu, jakie opisał Alan Turing.
Innymi słowy: komputery cyfrowe i maszyny Turinga są sobie równoważne pod względem zakresu możliwych do zrealizowania zadań, a wynika to stąd, że każdy program dla maszyny cyfrowej można przełożyć na zestaw instrukcji pewnej maszyny Turinga. Z dość oczywistym zastrzeżeniem jednak: choć zakres rozwiązywalnych problemów jest w obu przypadkach taki sam, to tempo realizacji musi być w każdym przypadku inne (i właśnie zwiększaniu tegoż tempa służy wciąż dokonujący się postęp cyfrowych technologii przetwarzania danych).
Wróćmy jednak do turingowskiego rozróżnienia maszyn konkretnych i uniwersalnych. W jego świetle powyższa teza o równoważności „rozdwaja się”.
Po pierwsze bowiem, konkretna maszyna Mi jest równoważna komputerowi realizującemu konkretny program (np. program do sumowania liczb); po drugie jednak, uniwersalna maszyna UMT jest równoważna nie komputerowi wyposażonemu w takie a takie oprogramowanie, lecz komputerowi przygotowanemu do realizacji różnych możliwych programów.
I tak oto dotarliśmy do końca wątku „maszynowego”, zwieńczonego arcyważnym objaśnieniem związku między historycznymi pomysłami Turinga a stosowanymi dziś powszechnie komputerami cyfrowymi.
Wątek kolejny – nazwijmy go „umysłowym” – podejmę już niebawem, w drugiej części wpisu, zogniskowanej wokół różnych możliwości porównywania umysłu z maszynami Turinga (a więc i komputerami cyfrowymi).