menu w Cafe Aleph

Fizykalizacja języka
przez kodowanie arytmetyczne w notacji binarnej

Witold Marciszewski

§1. Dwa pola rozważań w debacie o przyszłości sztucznej inteligencji

Od ponad pół wieku rozwija się wielki projekt badawczy techniczny i cywilizacyjny, jakim jest konstruowanie sztucznej inteligencji. Dwie rzeczy nie ulegają w nim wątpliwosci: to, że jest on przełomowy cywilizacyjnie oraz to, że w szybkim tempie posuwa się do przodu. Jest natomiast otwarte i żywo debatowane pewne zagadnienie, które zapewne nie szybko doczeka się rozstrzygnięcia. Ale to kiedy ono nastąpi, zależy m.in. od tego, na ile staranny będzie nasz obecny w tej sprawie namysł.

Tym trudnym pytaniem jest to, czy jest możliwe, żeby komputerowa zdolność rozwiązywania problemów dorównała w tym względzie ludzkiej potencji twórczej. Trudne pytania, jak uczył Kartezjusz, trzeba dzielić na części i za każdą zabierać się osobno. Biorę tu pod uwagę podział zagadnienia bardzo z gubsza, tylko na dwie części, ale powinno to stanowić pewien krok naprzód. Wymienione je w tytule pod hasłami "fizykalizacja języka" i "kodowanie arytmetyczne".

Cokolwiek miałby znaczyć zwrot "fizykalizacja języka" (o czym za chwilę), to wiadomo z samej treści słowa, że proces ten może przybierać różne postacie, skoro mamy różne działy fizyki, takie jak mechanika, nauka o elektryczności, fizyka kwantowa itd. Nawet hydraulikę można brać w obecnym rozważaniu pod uwagę, bo mamy i takie twory, jak komputer hydrauliczny, a także chemię, skoro program genetyczny jest zapisany w jej języku.

Dzięki świadomości tych różnych opcji, mamy przesłanki do zastanowienia, która z nich ma większe szanse na sukces w konstruowaniu inteligencji. Pojawia się również u niektórych autorów, jak Roger Penrose, przypuszczenie, że pełny sukces, czyli inteligencja o takim potencjale jak ludzka, nie jest możliwy w żadnej z dziedzin obecnej fizyki. Że dopiero dzięki jakiejś nowej, dalece bardziej zaawansowanej teorii, mającej do czynienia z nowym rodzajem materii, może zaświtać odpowiedź na pytanie, jak wykreować jestestwo zdolne dorównać szczytom twórczej inteligencji. Nie jest też nieobecny pogląd bliski tradycyjnemu pojmowaniu umysłu; mianowicie, że umysł nie jest do końca zdeterminowany przez prawa przyrody, i że w jakimś zagadkowym obszarze wolności ma swą siedzibę myśl twórcza, nieosiągalna dla istot poddanych tym prawom bez reszty; skłaniał się ku takiemu pojmowaniu Kurt Gödel.

Pytanie o fizykalizację języka może się wydać bezprzedmiotowe wobec faktu, że język z natury i w całości jest tworem fizycznym. Wszak mówiony składa się z dźwięków, a pisany z pewnych ukształtowań bryłek materii. Co więcej byłoby do zrobienia w kierunku fizykalizacji? A zatem, skoro o to pytamy, to musi być w domyśle coś, na co odpowiedź nie jest tak oczywista.

Rzecz w tym, że mamy na uwadze odróżnienie tworów fizycznych należących zarazem do dziedziny biologii, jak ludzie i zwierzęta, od tworów fizycznych nie biologicznych; są one fizyczne w pewnym węższym znaczeniu, jako podległe jedynie prawom fizyki, a już nie prawom biologicznym. Takimi są wytwory ludzkiej techniki, w szczególności maszyny. Wiadomo, że maszyna wtedy rozwiązuje postawiony jej problem, czyli wytwarza pożądany produkt, gdy dostaje potrzebną po temu napęd energii oraz jest odpowiednio sterowana. Te dwa czynniki zlewają sie w jeden i są trudno odróżnialne, ten sam obiekt, jak w szczególnosci człowiek, daje maszynie napęd i zarazem nią steruje.

Stało się to odróżnienie wyraziste dopiero wtedy, gdy maszynom włókienniczym (od nich się zaczęło) zaczęła dostarczać napędu maszyna parowa, a sterowanie przejął pewien system kodowania. Kod, którego postać fizyczną stanowiła perforacja taśmy był językiem poleceń mówiących, jakie wzory mają być wytworzone na tkaninie przez urządzenie wykonawcze. Pierwszym takim tworem, który zajmuje poczesne miejsce w dziejach automatyzacji produkcji są krosna Jacquarda. Weszły one także do historii komputerów, inspirując Ch. Babbage'a, twórcę pierwszej programowalnej maszyny do obliczeń, a nawet w pewnym sensie ojca architektury komputerów Johna von Neumanna.

Gdy już stało się oczywiste, że pewien kod może sterować rozwiązywaniem problemów przez urządzenie fizyczne, narodziło się pytanie, czy jest możliwy kod tak uniwersalny, żeby dało sie w nim zapisywać wszelkie problemy podejmowane przez człowieka i wszelkie metody ich rozwiązywania, oraz czy możliwe jest urządzenie fizyczne sterujące takim uniwersalnym kodem.

Rozwiązaniem optymalnym okazał się cyfrowy kod binarny realizowany przez urządzenie elektryczne. Ale nim do tego doszło, trzeba było pokazać: po pierwsze, że cyfry dadzą sie zapisywać za pomocą stanów maszyny, a po drugie, że pewien system cyfrowy nadaje się na kod absolutnie uniwersalny, w którym da się kodować nie tylko obliczenia, lecz także inne rozumowania i wszelkie inne teksty, także obrazy, dźwięki itd. Pierwszemu rozwiązaniu utorował drogę G.W.Leibniz, a drugiemu Kurt Gödel. Zacznijmy od Leibniza.


§2. Fizykalizacja obliczeń
jako odwzorowanie liczb i operacji na liczbach w stanach i operacjach maszyny

Za każdym poruszeniem jednego z trybów koła umocowanego na osi, obraca się ona o pewien kąt; obrót wprawia w ruch połączony z nią pisak (trzeba go sobie wyobrazić). Ten na znajdującym się w obudowie okienku rysuje po kolei trzy kreski w wyniku poruszeń przez trzy kolejne zamocowane pionowo na bębnie kliny. Ponieważ następne z dziewięciu klinów są coraz krótsze, oś z racji umocowania na niej kółka na tej a nie innej wysokości nie doznaje poruszeń przez dłuższy czas obrotu bębna, co powoduje jej zatrzymanie. Następny identycznie zbudowany moduł, z ogólnej liczby ośmiu, wytwarza kolejny symbol w ciągu cyfr mającym być argumentem operacji arytmetycznej, np. dodawania. Drugi argument operacji jet zapisany wcześniej i przesunięty do osobnego rejestru, a ruch wykonany umieszczoną z przodu korbką uruchamia zamierzoną operację, np. sumowania, której wynik ukazuje się w okienku.

Narysowany element maszyny Leibniza jest autentyczny. Natomiast improwizowany tutaj opis jego funkcjonowania jest w najwyższym stopniu uproszczony. Tak, żeby nie wchodząc w realne funkcjonowanie maszyny (nieporównanie bardziej skomplikowane) zobrazować jak najkrócej zasadę odwzorowania stanu w symbolicznym zapisie wyniku obliczenia.

Opis tak naiwny nie wystarczy, żeby zrozumieć funkcjonowanie kalkulatora Leibniza. Powinien natomiast wystarczyć do uprzytomnienia, że jest możliwe, żeby pewien mechanizm -- dzięki liczbie i strukturze swych elementów -- w zależności od nadanego mu stanu produkował takie lub inne cyfry. A przez to dostarczał jakiejś poszukiwanej informacji o abstrakcyjnym świecie liczb.

Liczba dziewięciu klinów na walcu, gdy puste miejsce odpowiada zeru, jest fizycznym odpowiednikiem faktu, że układ ten posługuje się dziesiętnym systemem liczb. To najprostszy przykład odzorowania pewnej abstrakcyjnej rzeczywistości liczbowej w rzeczywistości fizycznej; ta druga to dziesięć możliwych stanów układu złożonego z walca o dziesięciu możliwych pozycjach oraz osadzonego na osi kółka o dziesięciu zębach. Odpowiednio, dla systemu binarnego potrzebny jest układ fizyczny przyjmujacy dwa stany. Może to być np. lampa elektryczna, która świeci lub nie świeci.

System binarny, choć ze względu na długość zapisów cyfrowych jest szczególnie żmudny dla ludzkiego użytkownika, okazał się dla konstrukcji kalkulatora rozwiązaniem idealnym, odkąd ludzkość weszła w wiek elektryczności. Elektryczność z natury rzeczy przybiera dwa stany, układ zamknięty i układ otwarty, nie trzeba więc tworzyć specjalnych konstrukcji generujacych zamierzoną liczbę stanów, np. dziesięciu. Ogromna zaś długość napisów zwalniająca tempo operacji aż po ganice niewykonalności przestaje mieć znaczenie wobec prędkości impulsów elektrycznych, bliskiej prędkości światła. To urealnia możliwość wykonywania wysoce skomplikowanych obliczeń w takim czasie, jakim aktualnie dysponujemy.

Uzyskaliśmy więc maksymalnie efektywną metodę fizykalizacji obliczeń. Po epoce mechanizacji, zainicjowanej przez kalkulatory w rodzaju wynalazku Leibniza, przyszła epoka fizykalizacji za sprawą tej siły fizycznej, jaką są fale elektromagnetyczne. Nadal jednak rozwiazywanie problemów ogranicza się do problemów obliczeniowych, co jest dalekie do uniwersalnosci, jaka by się nam marzyła. Okazało się jednak, że istnieje mozliwość, o jakiej nie marzyło się filozofom, ani matematykom, ani inżynierom. Pierwszy uchylił do niej drzwi Kurt Gödel.


§3. Kodowanie arytmetyczne składni języka

Pomysł kodowania wyrażeń nie jest niczym nowym. Stosowano go od wieków choćby w celu utajniania wiadomości w wojnie wywiadów. Można wyrazy czy litery zamieniać na inne litery według klucza znanego tylko wtajemniczonym, a równie dobrze można zamieniać litery na cyfry. Ale samo zastąpienie liter cyframi jeszcze nie czyni kodowania procedurą arytmetyczną. Staje się nią ono dopiero w wyniku zastępowania tak dobranego, że na wyrażeniu cyfrowym można dokonywać operacji arytmetycznych, którym odpowiadają w sposób wzajemnie jednoznaczy operacje syntaktyczne na wyrwżaniach literowych. Mówiąc o literach, mam tu na uwadze nie tylko znaki z alfabetu jakiegoś języka naturalnego lecz takze symbole specjalistycznych języków sztucznych, jak te ze słownika chemii, matematyki, logiki.

Zilustrujmy to przykładem ze składni języka polskiego. Przedstawmy sobie, że tworzymy program do nauki gramatyki, który m.in. podpowiada lub ocenia przekształcanie zdania w stronie czynnej na bierną, np. (C) "Gödel pochwalił Turinga" na (B) "Turing został pochwalony przez Gödla". W języku maszyny zarówno wyrazy w tych zdaniach jak i określona daną regułą tranformacji funkcja TCB przekształcająca stronę czynną w bierną muszą być zapisane jako wyrażenia cyfrowe czyli nazwy liczb. Niech wyrażenia arytmetyczne, które w wyniku zakodowania odpowiadają zdaniom C, B i funcji gramatycznej TCB będą reprezentowwane przez te same symbole lecz gwiazdkowane. Mamy wtedy do czynienia z procesem, w którym komputer wykonuje następujące kroki:

1) koduje funkcję gramatyczną B=TCB(C) jako funkcję arytmetyczną B*=TCB*(C*);

2) oblicza wartość tej drugiej, tj. B*;

3) dekoduje wyrażenie arytmetyczne B* na B, a więc na zdanie "Turing został pochwalony przez Gödla", znajdując tym samym poszukiwaną wartość funkcji gramatycznej B=TCB(C) przy argumencie "Gödel pochwalił Turinga".

Gödel w swej argumentacji o niezupełności arytmetyki -- drogą pomysłowego, ale i skomplikowanego technicznie kodowania -- znalazł funkcję będącą arytmetycznym odwzorowaniem funkcji syntaktycznej y=Dow(x,a), tzn. ciąg formuł y jest dowodem formuły x na podstawie zbioru aksjomatów a. Tym wynalazkiem metodologicznym utorował drogę uniwersalnej metodzie arytmetycznego kodowania składni, która pozwala obliczać wyniki transformacji syntaktycznych.

W dalszych zastosowaniach dochodzi się do cyfryzacji obrazów, dźwięków itd. Dysponując pomiarami wielkości dźwiękowych czy graficznych, tworzy się ich opis, który daje się zakodować cyfrowo w notacji binarnej, a przekształcanie jednego opisu w drugi, np. w animacji graficznej, sprowadza się do obliczania funkcji arytmetycznych.

Przystępny wykład metody kodowania gödlowskiego znajduje się w książeczce: Ernest Nagel and James R. Newman, Gödel's Proof New York University Press, New York/London 2001 na s. 70.