Znaczenie a oznaczanie

24 styczeń 2009, sobota

Nasze wypowiedzi zazwyczaj coś znaczą (są zrozumiałe) i coś oznaczają (do czegoś się odnoszą). Za rozróżnieniem znaczenia i oznaczania przytacza się dwa argumenty:
1. Wyrażenia o tym samym znaczeniu można stosować zamiennie. Frege podał przykład: “Gwiazda Poranna = Gwiazda Wieczorna”. Jak wiadomo to ten sam obiekt (planeta Wenus). Jeśli “Gwiazda Poranna” i “Gwiazda Wieczorna” miałyby identyczne znaczenie i oznaczały to samo – można by je stosować zamiennie. Jeśli zamienimy w powyższej równości “Gwiazda Poranna” na “Gwiazda wieczorna”, to w miejsce stwierdzenia ważnego odkrycia otrzymamy trywialną tożsamość.
2. Wyrażenia odnoszące się do obiektów nie istniejących, albo sprzecznych: “Obecny król Francji” jest zrozumiałe, ale nic nie oznacza.

Jednak dla pewnej klasy języków te argumenty nie są istotne. Można (i należy) w ich przypadku utożsamiać znaczenie i oznaczanie. Właśnie taka sytuacja ma miejsce w informatyce. Z całą pewnością dotyczy to języków programowania. Są to sztuczne języki służące do programowania komputerów (te języki nie są przeważnie używane w trakcie działania komputera, tylko na etapie jego programowania). Znaczenie terminów w tym języku to miejsce w pewnej przestrzeni (jak to teraz w modzie mówić: wirtualnej), w której jest przechowywana pewna wartość, albo procedura ją obliczająca. Zastanówmy się, czy takiego rozwiązania nie można uogólnić na każdy dostatecznie precyzyjny język.

Czy w w języku nauki odróżnienie znaczenia i oznaczania nie jest konieczne?

Czy wyrażenia „2+2” oraz „4” mają identyczne znaczenie i oznaczają to samo? Frege twierdzi, że oba oznaczają liczbę 4, ale ich znaczenie jest inne. Ale przecież języki programowania zawierają arytmetykę. Najwyraźniej więc między poglądami logików i informatyków na ten temat powstaje różnica (informatycy nie są skłonni do teoretycznych sporów, pewnie stąd ta różnica nigdy dotąd nie stanowiła istotnego problemu). Informatyk uzna zapewne, iż “2+2″ to procedura obliczenia sumy z dwóch dwójek, a “4″ to liczba. Nie oznaczają więc tego samego. Frege wykonuje działania w pamięci i ogłasza, że oba wyrażenia oznaczają to samo. Ale on odnosi się w ten sposób do wyniku działania, a nie do wyrażenia opisującego to działanie. To chyba możemy uznać z a błąd. A w konsekwencji - stwierdzić, że w arytmetyce można utożsamiać znaczenie i oznaczanie. Nie widać też żadnych przyczyn, dla których rozciągnięcie tej tezy na całą matematykę stanowiło jakikolwiek problem. Czy dotyczy to także sformalizowanych języków teorii naukowych?
Zastanówmy się, jak do przykładu z planetą Wenus odniósłby się astronom. Ogłoszenie odkrycia astronomicznego powinno brzmieć: obiekt oznaczany terminem “Gwiazda poranna” i obiekt oznaczany terminem “Gwiazda wieczorna” to ten sam obiekt. Stwierdzenie to odnosi się do znaczenia wyrażeń. Nie można w tym zdaniu w miejsce “Gwiazda wieczorna” wpisać “Gwiazda poranna” tylko z uwagi na to samo znaczenie - odnosimy się bowiem do wyrażeń, a nie jedynie do tego, co one oznaczają. Podany na wstępie argument traci więc na znaczeniu. Nie ma żadnych problemów semantycznych z tego rodzaju wypowiedziami, gdyż mają one charakter metajęzykowy. Można stwierdzić, że: w wyniku dokonanego odkrycia w języku astronomii „Gwiazda poranna” i „Gwiazda wieczorna” stają się synonimami. Przed tym odkryciem w astronomii zamienne używanie tych wyrażeń nie było uzasadnione. A po jego dokonaniu jak najbardziej. Frege najwyraźniej zakładał, że znaczenie terminów jest stałe i nie może ulec zmianie. Ale to bardzo wątpliwe założenie.
Dobrze ilustruje to inny przykład dotyczący terminów fizycznych (dotyczy on własności, a nie obiektów, ale to niczego nie zmienia). Mamy dwa terminy: “masa bezwładna” (związana z oporem ciała, które chcemy przesunąć) i “masa ciężka” (związana z ciężarem). W ramach mechaniki klasycznej nie udało się wykazać ich równoważności ze 100% dokładnością. Teoria względności przyjmuje tą równoważność jako założenie. I wydaje się, że zamienność tych terminów w wypowiedziach w teorii Einsteina nie prowadzi do nieporozumień (chyba że w komentarzach dotyczących pewnych intuicji, a nie samej teorii), a w mechanice klasycznej to błąd. Język mechaniki klasycznej i język teorii względności to różne języki.
W przykładzie z astronomii odkryta tożsamość nie jest tak fundamentalna, więc zakłada się że nadal mamy do czynienia z dokładnie tą samą teorią, co przed jego dokonaniem. Jednak formalnie rzecz biorąc nie jest to prawda.
W jednej teorii rozważane terminy znaczą co innego i oznaczają dwa różne obiekty (których tożsamość jest problematyczna), a w drugiej stają się synonimami - właśnie dlatego iż oznaczają to samo.

Pozostaje jeszcze do rozpatrzenia drugi z argumentów za rozróżnieniem znaczenia i oznaczania. Dotyczył on bytów nie istniejących i sprzecznych. Ta kwestia jest trywialna: teorie naukowe o takowych się nie wypowiadają!

Możemy więc przyjąć iż rozważane rozróżnienie nie jest w nauce konieczne.

Język potoczny

W języku potocznym odróżnienie znaczenia i oznaczania jest koniecznością. Aby to uzasadnić przeprowadźmy eksperyment myślowy. Wyobraźmy sobie, że siedzimy przy stole na którym stoi butelka czegoś z procentami. Na butelce jest naklejona etykieta. Wśród nas siedzi obcokrajowiec, który nigdy nie widział butelek z etykietami. Rozmawiamy o tej konkretnej etykiecie próbując wyjaśnić mu co to jest. W języku rozumianym przez obcokrajowca słowo “etykieta” ma jedno konkretne odniesienie (naklejka na butelce stojącej na stole). Można uznać, że to odniesienie wystarczy do zrozumienia słowa. Ale po opróżnieniu butelki znika ona ze stołu. Czy nasz obcokrajowiec przestaje rozumieć słowo “etykieta”? Nie. Wie on np., że na etykiecie umieszcza się informacje o procentach i parę innych rzeczy. Potrafi więc zrozumieć znaczenie słowa, choć nie potrafi wskazać do czego ono się odnosi. Odróżnienie znaczenia i oznaczania okazuje się bardzo użyteczne.
Wśród abstrakcji matematycznych nie ma znikających butelek! Wygodnym jest założenie, że ten świat jest trwały i my go jedynie odkrywamy (jeśli ktoś zetknął się z Szybką Transformatą Fouriera rozumie, czemu któryś z wielkich matematyków uznał, że pochodzi ona wprost od Boga).
Można więc podejrzewać, że konieczność rozróżnienia znaczenia i oznaczania w języku potocznym wynika stąd, że język ten nie oddaje precyzyjnie struktury rzeczywistości. Budowanie języka w którym znaczenie jest tożsame z oznaczaniem, jest równoznaczne z tworzeniem precyzyjnych narzędzi opisu.

Semantyka języka informatyki

Zarówno matematycy jak informatycy są w praktyce realistami - czyli tak jak Platon zakładają realne istnienie obiektów do których się odnoszą (jak powiedział pewien matematyk: w okopach wszyscy jesteśmy platonikami). Pisanie programów jest w rzeczywistości czynnością polegającą na opisywaniu pewnego wirtualnego świata.
Różnica między matematykiem a informatykiem polega na tym, że ten pierwszy może sobie pozwolić na używanie skrótów myślowych i komentarzy w języku potocznym. Informatyk piszący program wszystko musi objaśnić dokładnie i ściśle - bez tego nie da się wykonać kompilacji na kod maszyny.
Pisząc „2+2” programista zawsze odnosi się do jakiejś procedury wyliczania wartości tego wyrażenia (a nie do wyniku). Czy można takie podejście uogólnić na język matematyki? Do czego odnosi się matematyk pisząc takie wyrażenia? Może do jakiejś procedury obliczeń? Jednak wyrażenia typu “2+2″ można obliczyć na wiele sposobów. Znaczeniem wyrażenia może więc być co najwyżej klasa algorytmów, które pozwalają na wyliczenie tego wyrażenia (zobacz Reinhard Muskens w tekście „Logical Forms Denote Algorithms”).
Tkwi w tym jednak pewna trudność. Jakie znaczenie mają zdania poprawne, ale opisujące zadania nieobliczalne? Problemem może być też uwzględnienie nieskończoności. W informatyce ona nie występuje ani na poziomie języka (skończony alfabet itd) ani semantyki. Nie wydaje się jednak, by były to trudności nie do przezwyciężenia.

Podsumowanie

To oczywiste, że Frege nie traktował wyrażeń w rodzaju “dwa plus dwa” jako odniesienia do sposobu wyliczenia wyrażeń. W jego czasach liczby można było uznać za obiekty abstrakcyjne, ale procedury ich obliczeń już nie. Ale dziwne jest to, że takie przekonania przetrwały ostatnie 100 lat.
Nie ma istotnych argumentów za tym, że w językach nauk ścisłych znaczenie nie jest tożsame z oznaczaniem. Nauka posługuje się do prezentacji teorii językiem naturalnym - a w jego przypadku nie ma wątpliwości, że semantyka jest inna.
Przy okazji warto zwrócić uwagę na to, że jeśli uznamy, że nasz język musi uwzględniać rozróżnienie znaczenie - oznaczanie, a język informatyki nie, w konsekwencji świat realny zawsze będzie bogatszy od świata komputerów. To silny argument przeciw mocnej sztucznej inteligenci (”strong AI”).

Informatyka a demokracja

16 styczeń 2009, piątek

Kiedyś mój nauczyciel z miernictwa drogowego opowiadał anegdotę o tym, jak car projektował kolej. Przyłożył do mapy Rosji długą linijkę i połączył dwa punkty prostą kreską. Na nieszczęście palec przytrzymujący linijkę wystawał nieco i ołówek podskoczył w tym miejscu. Na dodatek powstałe zakole przecięło jezioro. Nie było rady. Jezioro zasypano i kolej zbudowano zgodnie z życzeniem cara - nikt się nie odważył tego zakwestionować. To dobry przykład pokazujący, do jakich absurdów prowadzi tyrania.
Obserwując różne style zarządzania przedsiębiorstwami, stwierdzam, że puenta powyższej anegdoty jest bardziej praktyczna, niż to może się wydawać. Rządy autorytarne prowadzą najczęściej do deformacji upraszczających. Współczesna informatyka z jej metodami radzenia sobie ze złożonością nie jest wcale potrzebna. Można naprawdę sporo zaoszczędzić! Patrząc z drugiej strony - trudno sobie wyobrazić porządną komputeryzację przedsiębiorstwa bez zrozumienia potrzeb pracowników na poszczególnych stanowiskach. Ale przecież te potrzeby wogóle się nie liczą - po co więc płacić za te zbytki?
Nie jestem w stanie określić jak wygląda z tego punktu widzenia rzeczywistość polskich przedsiębiorstw. Ale jedna przesłanka wydaje mi się znacząca. Ta olbrzymia determinacja oferentów systemów, by dotrzeć ze swą ofertą jak najwyżej…..
Można też podać konkretne przykłady ilustrujące wspomniany problem. Oto w pewnym przedsiębiorstwie postanowiono zmienić wszystkie ceny o określony procent. Jakiś prymityw żyjący w świecie liczb mógłby pomyśleć, że to można wykonać dodając ten procent do wszystkich cen i robiąc stosowny raport do przeanalizowania i zaakceptowania.
Jednak zmiana cen to zbyt odpowiedzialna operacja, by ją powierzyć byle komu. Dlatego po bliżej nieokreślonej liczbie zebrań wybrano najbardziej odpowiedzialne osoby do jej wykonania. Z dużym mozołem zostały wykonane arkusze kalkulacyjne ze stosownymi obliczeniami. W międzyczasie algorytm zmiany cen został ulepszony przez dodanie zaokrąglenia (nikt dokładnie nie wie dlaczego np. w cenniku dla hurtowników zaokrąglono ceny brutto, skoro sprzedaż jest w cenach netto, ale mniejsza z tym). Potem pracownicy mieli rozpocząć mozolne wpisywanie tych liczb do systemu sprzedaży. Jednak z uwagi na zbliżającą się godzinę zero, w końcu spytano informatyka - czy aby nie da się tego uprościć. Da się. Ale nie do końca. No bo wyliczenia w arkuszu różnią się od wyliczeń w bazie z powodu zastosowania różnych algorytmów zaokrągleń. A przecież arkusz już został zatwierdzony! No to mamy prawdziwy problem! Kto się odważy wskazać rozwiązanie?

O istocie informatyki

16 marzec 2008, niedziela

Kiedy po skończeniu studiów odbywałem służbę wojskową, spotkałem w jednostce wojskowej swojego kolegę, który akurat coś rysował na papierze w kratkę. Zainteresowałem się co to ma być. Okazało się, że kazano mu zaprojektować mur oporowy, który miał być wybudowany za strzelnicą (inżynier to inżynier – co z tego że informatyk). Ponieważ kończyłem technikum drogowo – geodezyjne, miałem pewne pojęcie o projektowaniu tego typu budowli (różniących się od podpór mostowych jedynie rodzajem obciążeń). Na pierwszy rzut oka widać było, że wysoka na kilka metrów betonowa ściana z półmetrowym fundamentem musi się przewrócić. Gdy to powiedziałem koledze – spytał się: to ile ma być tych fundamentów. Ale to nie takie proste. Trzeba zbadać grunt, założyć głębokość przemarzania, przyjąć odpowiednie obciążenia, policzyć ciężar, naprężenia, zaprojektować zbrojenie itd. itd… Czyli potrzeba solidnej inżynierskiej wiedzy. Tylko zupełnemu ignorantowi może się wydawać, że taka ściana to najprostsza konstrukcja pod słońcem – po co więc płacić inżynierom za drogi projekt.
Historia ta przypomniała mi się, gdy dowiedziałem się, że w pewnym przedsiębiorstwie postanowiono prowadzić ewidencję w magazynie o dość dużej rotacji przy pomocy arkusza kalkulacyjnego. Z punktu widzenia zarządu taki magazyn to nic innego jak prosta tabelka ze stanem początkowym, przychodami i rozchodami. Po co więc płacić drogim inżynierom, skoro taki arkusz uczą teraz wykorzystywać już w podstawówkach?
Czy rzeczywiście umiejętność analizy procesów biznesowych, przekształcenia ich w abstrakcyjne struktury i implementacji przy pomocy odpowiednio dobranych środków technicznych są zupełnie zbędne? Tak jak ze wspomnianą ścianą – taki mało skomplikowany z punktu widzenia funkcjonalności system, nie musi wcale być prosty w budowie. Myślę, że większość informatyków spotkała się z oczekiwaniami w rodzaju: „potrzebujemy taki prosty programik …..”. I niektórzy nawet ulegli tym pobożnym życzeniom (ja niestety do nich należę) – nawet, jeśli dostrzegali złożoność zagadnienia.
Ewidencję magazynową można z pewnością prowadzić w oparciu o arkusz kalkulacyjny – zwłaszcza, jeśli obuduje się go odpowiednimi środkami gromadzenia danych (kolektory danych), weryfikacji (makra) etc… Korzystając z budowlanych analogii, można takie działania porównać do budowy altany z myślą o stałym mieszkaniu. Potem można wzmacniać i ocieplać ściany, robić przybudówki itp… W pewnym jednak momencie (zwłaszcza, jeśli dysponujemy odpowiednimi funduszami), machniemy na to ręką: lepiej to rzucić i kupić solidny dom za duże pieniądze.
Budowany przez amatorów system informatyczny czeka dokładnie ten sam los. W końcu trzeba na to machnąć ręką i kupić solidny system za miliony….
Czyli morał z tego taki – że lepiej od razu wydać miliony? Niekoniecznie. Zwłaszcza, jeśli mamy do czynienia z przedsiębiorstwem dynamicznie rozwijającym się. Wdrożenie takiego dużego systemu powoduje duże problemy. A pole manewru inwestora jest zdecydowanie mniejsze. Kiedyś spotkałem kolegę, który pracował w jednym z największych korporacji informatycznych. Porównał on działania tej korporacji wobec klientów z łowieniem ryby na wędkę. Już chce się rzygać, ale wypluć nie sposób, więc trzeba dalej łykać…..
Można kupić dom, albo zatrudnić architekta, który nam go zaprojektuje i przypilnuje budowy (w Polsce ten dobry obyczaj jeszcze rzadko spotykany). Można też kupić system zintegrowany, lub zatrudnić informatyka wiedzą i doświadczeniem, odpowiednimi do zaprojektowania i kierowania rozwojem systemu. W każdym wypadku należy jednak zdawać sobie sprawę z tego, że mamy do czynienia ze złożonym przedsięwzięciem inżynierskim. Jeśli postrzegamy informatykę poprzez pryzmat elektronicznych gadżetów i innych cudownych wynalazków – możemy być pewni porażki.

Ograniczenia informatyki

04 marzec 2008, wtorek

Wiele osób obserwując burzliwy rozwój informatyki zastanawia się, czy istnieją jakieś ograniczenia w tym wzroście.

Szybkość

W czasach rozkwitu cybernetyki obliczono przy jakiej szybkości działania komputery zyskają świadomość. Była to szybkość na ówczesne czasy tak ogromna, że wydawało się że nigdy nie będzie można wykazać ignorancji autorów tych twierdzeń. Dzisiejsze komputery działają o wiele szybciej. Niemniej istnieją granice, które można podać ze stuprocentową pewnością. Maksymalna szybkość przekazywania informacji jest ograniczona szybkością światła. Jeśli sprzężone ze sobą elementy są przełączane z szybkością rzędu kilkuset MHz, odległość między nimi nie może być większa niż kilka centymetrów. Przy obecnej miniaturyzacji odległości te mogą być o kilka rzędów wielkości mniejsze. Nie można jednak zmniejszać ich w nieskończoność. Pomijając względy technologiczne, napotykamy bariery wynikające z mechaniki kwantowej. Na jej gruncie można wykazać, że szybkość przetwarzania informacji przez układ o masie m nie może być większa niż m * 1.35 * 1047 bit/s. Wielkość tą nazywamy granicą Bremermanna (J. Bremermann Complexity of Automata, Brains and Behavior, w: Biomathematics Lecture Notes, t. 4, Heidelberg 1974).

Złożoność algorytmów

Podana szybkość przetwarzania wydaje się nieskończenie wielka. Okazuje się jednak że istnieją z pozoru banalne zadania, których nawet działający z taką maksymalną szybkością komputer o masie Ziemi nie rozwiąże w rozsądnym czasie. Dla wielu zadań nie udało się bowiem znaleźć algorytmów o złożoności wielomianowej (czyli takich, których zależność czasu wykonania w stosunku do wielkości zadania wyraża się wielomianem). Należy do nich większość zadań z dziedziny optymalizacji - na przykład problem ułożenia optymalnego rozkładu zajęć w szkole. Ponieważ problemy te rosną w sposób wykładniczy, przy większych rozmiarach (większa ilość nauczycieli i klas) stają się one praktycznie nie rozwiązywalne (czas obliczeń można liczyć w setkach lat). W przypadku tego typu problemów stosuje się metody heurystyczne, polegające najczęściej na naśladowaniu sposobu rozumowania człowieka. Pozwalają one znaleźć rozwiązanie zbliżone do optymalnego w rozsądnym czasie.

Dokładność obliczeń

Wbrew powszechnemu przekonaniu komputery nie wykonują obliczeń zbyt dokładnie. Komputer pamięta jedynie określoną ilość cyfr. Jeśli wykonuje się działania na liczbach pamiętanych z pewną dokładnością (przybliżeniem), to wynik może być jeszcze mniej dokładny. Na dodatek najczęściej liczby nie są pamiętane w systemie dziesiętnym. Przeliczanie z wewnętrznej reprezentacji liczby na system dziesiętny i z powrotem także może prowadzić do utraty dokładności obliczeń. Istnieje cała dziedzina wiedzy (metody numeryczne) zajmująca się wpływem ograniczonej dokładności obliczeń na wynik tychże obliczeń. Wyliczenie dokładności obliczeń (czyli w uproszczeniu - podanie ile cyfr po przecinku jest pewnych) bywa bardziej skomplikowane niż te obliczenia..

Programy, które nigdy nie znajdą wyniku

Jeśli ktoś interesuje się matematyką, z pewnością słyszał o słynnym twierdzeniu Gödla, które mówi że w każdym systemie matematycznym obejmującym arytmetykę istnieją twierdzenia których nie da się udowodnić, ani im zaprzeczyć. Wynik ten położył kres marzeniom o stworzeniu automatu do rozwiązywania zadań. Wydawało się mianowicie, że skoro dowód każdego twierdzenia da się w sposób jednoznaczny zapisać w postaci zdań formalnego języka matematyki, to nic prostszego niż stworzyć program, który przejrzy wszystkie możliwe zapisy i odszuka ten, który jest dowodem twierdzenia. Oczywistym jest, że już sama złożoność tego problemu czyni go nierealnym. Dzięki twierdzeniu Gödla możemy dodatkowo udowodnić, że są zadania dla których taki program nigdy by się nie zakończył.

Złożoność systemów

Wszystkie wskazane powyżej ograniczenia są ograniczeniami teoretycznymi. Można je w sposób jednoznaczny uzasadnić. Najpoważniejszą barierą rozwoju informatyki jest jednak bariera złożoności, która ma wyłącznie praktyczny charakter. Wynika ona stąd, że nie istnieją metody automatycznego sprawdzania poprawności programów. Po napisaniu programu przez programistę jest on testowany w celu znalezienia błędów. Problem w tym, że z doświadczeń praktycznych wynika, że dzięki każdemu takiemu testowi można usunąć około 1/3 błędów.

Zilustruję to danymi liczbowymi dotyczącymi produktu firmy Microsoft - Windows NT (za: J. Badurek Granice złożoności, Computerworld 8/99). Tekst oprogramowania tego systemu liczył około 25mln wierszy. Założono że bezpośrednio po napisaniu średnio co piąty wiersz zawierał błąd. W chwili publikacji systemu Microsoft mówił oficjalnie o zejściu poniżej 4 tys. błędów! Oznacza to około 20 testów, z których każdy kosztował około 20 mln USD. Nie dziwi więc fakt, że testy zajmują około 40% czasu wykonania programu i pochłaniają sporą część budżetu. Mimo, że napisanie prostej instrukcji w programie zajmuje kilka sekund, to wydajność programistów liczona w poprawnych (tj. z uwzględnieniem testów) wierszach wynosi co najwyżej kilkaset wierszy dziennie. Łatwo więc obliczyć, że system Windows NT jedna osoba pisałaby setki lat. Nie oznacza to wcale, że zatrudniając 1000 programistów uzyskamy produkt w ciągu roku. Wraz ze wzrostem liczebności zespołu w sposób wykładniczy rośnie bowiem czas zużywany na komunikację wewnątrz zespołu.

Podane liczby mogą być naprawdę szokujące. Na szczęście programy używane przez nas na co dzień są nieco mniej złożone (przeciętny system finansowo - księgowy to kilkadziesiąt lub co najwyżej kilkaset tysięcy wierszy). Ale też rzadko kiedy producent oprogramowania dysponuje budżetem w jakikolwiek sposób porównywalnym z budżetem firmy Microsoft. Często trafiają więc na rynek programy niedostatecznie przetestowane.Wersja 1.0 programu jest najczęściej jeszcze wersją testową. Numer wersji może być więc jednym ze wskaźników jakości programu. Dlatego po wersji 2.0 programu Word firmy Microsoft pojawiła się od razu wersja 6.0 ;-) .

Ostatnie lata wniosły wiele nowych elementów w walce ze złożonością systemów:

* programowanie obiektowe pozwala tworzyć programy o wyższej jakości (mniej błędów),
* nowe metody projektowania pozwalają częściowo zautomatyzować proces tworzenia programu, a po jego podzieleniu na moduły tworzyć większe zespoły programistów,
* programowanie wizualne pozwala projektować wygląd aplikacji w postaci graficznych form (bez pisania kodu)

Daje to pewne efekty, ale nie możemy jeszcze mówić o nowej jakości. Nowe możliwości mogą powstać dzięki internetowi. Być może w przyszłości będą powstawać złożone systemy rozproszone (w różnych węzłach sieci), tworzone równolegle przez wielu użytkowników i programistów. Sam internet jest przykładem takiego niezmiernie złożonego systemu.

REFLEKSJE NA TEMAT ŚWIATÓW WIRTUALNYCH

04 marzec 2008, wtorek

OD AUTOMATU DO KOMPUTERA

O automatach

Przyzwyczailiśmy się do automatów, których pełno jest wokół nas. Dla przykładu na ruchliwych ulicach spotyka się czasem przejścia dla pieszych z przyciskiem przełączającym światła. Taki automat ma szereg stanów, różniących się między sobą: stan w którym świeci się dla samochodów światło żółte, stan w którym świeci się światło zielone i.t.d. Automat jest zbudowany w taki sposób, że zawsze z danego stanu przechodzi do tego samego stanu następnego.

System iteracyjny

Automat można scharakteryzować opisując jego stan w danej chwili oraz zasady przejść między kolejnymi stanami. Istotę takiego działania trafnie scharakteryzował polski matematyk Z. Pawlak przy pomocy pojęcia systemu iteracyjnego. Taki system składa się z pamięci i funkcji określającej zmiany jej stanu. Funkcja ta nazywana jest funkcją przejścia. Podanym przez Pawlaka przykładem systemu iteracyjnego jest kostka do gry, którą odwracamy zgodnie z określonym algorytmem (na przykład: 1 -> 3 -> 4 -> 2 -> 1). Każdy deterministyczny system cyfrowy – niezależnie od jego złożoności – działa w taki właśnie sposób.

Komputer = maszyna uniwersalna

W przykładzie ze światłami elementami pamięci są konkretne urządzenia techniczne: przycisk, światła, zegar. W dzisiejszych czasach – gdy komputery są w powszechnym użyciu, nie wydaje się niczym dziwnym propozycja, by w miejsce tych różnorodnych elementów wprowadzić jednorodne elementy pamiętające: komórki pamięci komputera, a połączenia między elementami zastąpić połączeniami przekształcającymi ten stan na fizyczną realizację. Na przykład: włączenie napięcia na żółtej żarówce, gdy stan odpowiadającej jej komórki pamięci wynosi 1. Przewaga urządzeń sterowanych komputerem uwydatnia się wówczas, gdy rośnie złożoność systemów. Prosty automat sterujący światłami można zbudować z użyciem kilku elementów. Jeśli mamy do czynienia z siecią skrzyżowań, na których musimy zapewnić synchronizację zmian świateł – komplikacja takiego urządzenia byłaby zbyt duża.

Implementacja

Aby zastosować komputer w opisany powyżej sposób, należy wykonać dwie kolejne operacje. Najpierw musimy stworzyć dokładny opis (model) fragmentu systemu, a następnie przenieść go do pamięci komputera. Takie postępowanie nazywa się implementacją. Implementacją (na przykład implementacją systemu sterowania światłami) nazywa się przy tym zarówno sam gotowy system komputerowy, jak i proces proces jego tworzenia.

LOGIKA UCIELEŚNIONA

Trzy w jednym

Najmniejsza komórka pamięci komputera może pamiętać jedną z dwóch wartości. Odpowiada to wprowadzonej w teorii informacji podstawowej jednostce: bitowi. Taka najprostsza informacja, to na przykład odpowiedź na pytanie: „orzeł czy reszka?”. Ponieważ komputery używamy do przetwarzania informacji - wielkość pamięci komputerów określa się także w bitach (choć ze względów technicznych w praktyce stosuje się nieco większe jednostki: 1 bajt = 8 bitów). Jeden bit pamięci można także użyć do zapamiętania wartości zmiennej logicznej (prawda / fałsz). W takim przypadku funkcja przejścia to nic innego, jak zbiór funkcji logicznych, określających nową wartość określonej komórki pamięci na podstawie aktualnej wartości wszystkich komórek. Następny stan każdego elementu wynika bowiem z aktualnego stanu (wartości zmiennych) wszystkich elementów. Stosowane niekiedy określenie „maszyna logiczna” ma więc w odniesieniu do komputerów dobre uzasadnienie. W komputerze następuje utożsamienie trzech różnych pojęć: elementu pamięci, jednostkowej informacji (bit), oraz wartości zmiennej logicznej.

Wirtualna rzeczywistość

Komputer jest urządzeniem autonomicznym. Będzie działał tak samo – niezależnie od tego, jak urządzenie wyjściowe „interpretuje” jego wyniki (nie ma znaczenia, czy zostanie zapalone żółte światło, czy wyświetlony na ekranie napis: ‘zapal żółte światło’). Istotna jest wyłącznie struktura powiązań (możliwa do wyrażenia – jak pokazano – zdaniami logiki), oraz bieżący stan pamięci. Stan pamięci może być interpretowany przez nas. Możemy mówić, że w danej komórce pamięci jest pamiętany stan światła żółtego, a w innej – zielonego. Ale to jedynie nasza interpretacja (lub „interpretacja” zewnętrznych elementów wykonawczych maszyny) . Dla „duszka” zamkniętego wewnątrz komputera nie miałaby ona żadnego znaczenia.
Możemy powiedzieć „świeci się żółte światło” w odniesieniu do obserwowanych świateł na ulicy, albo „obserwując” stan komórki pamięci komputera. Jeśli mówimy o stanach pamięci komputera, możemy odnosić się do systemu sterującego rzeczywiście światłami, albo symulacji. W tym drugim przypadku mówimy o świecie wirtualnym – stan pamięci może odzwierciedlać stan realnego światła, albo jedynie nasze wyobrażenia.
W sytuacji, gdy odnosimy się do stanu systemu bez związku z rzeczywistością poza pamięcią komputera – mówimy o rzeczywistości wirtualnej.

Światy możliwe – prawda informatyki

Załóżmy, że dysponujemy pewnym spójnym opisem rzeczywistości (pewną teorią). Ten opis nie musi być prawdziwy. Może na przykład zawierać zdanie: „Paryż jest stolicą Niemiec”. Jednak nie może zawierać zdań sprzecznych. Mówimy, że taka teoria opisuje pewien świat możliwy. Dla każdego takiego opisu można stworzyć wirtualny świat, który będzie mu odpowiadał.

Pojęcie światów możliwych zostało wprowadzone w celu badania zdań modalnych. Teza jest możliwa, jeśli istnieje świat możliwy w którym jest ona prawdziwa, a jest konieczna – jeśli w każdym możliwym świecie jest prawdziwa. Zachodząca między światami możliwymi, a światami wirtualnymi analogia, pozwala na wykorzystanie badań dotyczących rzeczywistości wirtualnej, do opisu naszej rzeczywistości. Jeśli pewna implementacja (świat wirtualny) posiada określone cechy, to cechy te są możliwe. Jeśli każda implementacja posiada określone cechy – to są one konieczne.
Na tej podstawie możemy sformułować swoiste „informatyczne kryterium prawdy”: jeśli pewien system możemy zaimplementować w komputerze, to jest on poprawny (możliwy). Dotyczy to nie tylko oczywistych przypadków symulacji komputerowych, ale także np. systemów gospodarczych (przypadki budowania struktur gospodarczych w oparciu o system komputerowy nie należą do rzadkości).
Fundamentem informatyki są logika i implementacja. Dlatego teoretyczne spory należą w niej do rzadkości. Jeśli chcesz coś udowodnić – zaimplementuj to.

Informatyka a logika

Przypomnimy sobie szkolne lekcje logiki. Pamiętamy zapewne tabelki w których zapisywało się wartość zmiennych logicznych – po to, by ustalić wartość złożonego wyrażenia. Komputer działa podobnie, jak człowiek odczytujący wartość logiczną funkcji z tabelki. Podstawową różnicą jest to, że ten odczyt (ustalenie nowego stanu) powtarza się wielokrotnie. Czy komputer możemy uznać za maszynę, która sprawdza wartość logiczną zdania? Należałoby wówczas założyć, że na wejściu pojawiają się zdania prawdziwe i fałszywe, a na wyjściu – wynik analizy. Tak jednak nie jest! Komputer wskazuje („oblicza”) konsekwencje logiczne zdań prawdziwych. Dowolny zbiór zdań można przedstawić jako połączenie zbioru zmiennych, oraz powiązań między tymi zmiennymi. System iteracyjny jest równoważny sieci logicznej (lub inaczej – zbiorowi wyrażeń logicznych), która na podstawie zbioru wartości pewnych zmiennych wylicza wartość innych zmiennych (lub nowe wartości tych samych zmiennych). Każdy system komputerowy jest więc równoważny pewnemu zbiorowi zdań logiki pierwszego rzędu (funkcja przejścia = zbiór aksjomatów), który jest niesprzeczny i rozstrzygalny. Ilość zmiennych (stanów) jest w praktyce zawsze skończona (choć może być bardzo duża) a wszystkie funkcje są obliczalne. Biorąc pod uwagę twierdzenia limitacyjne, określające ograniczenia takich systemów - możemy stwierdzić, że systemy komputerowe nigdy nie obejmą wszystkich sensownych informacji.

Informatyczne perpetuum mobile

Uzyskany wynik może być dla wielu osób zaskoczeniem. Przecież każdy, dostatecznie dokładny opis rzeczywistości, można zaimplementować w systemie komputerowym. Nie istnieje jednak jeden, uniwersalny opis, zawierający rozstrzygnięcie wszystkich kwestii. Jeśli istnieje dowód jakiejś tezy – może on być zapisany w postaci formuł logicznych, a w konsekwencji – być zawartym w pewnym systemie komputerowym. Jednak człowiek zawsze może postawić sensowne tezy, których brak w jakimkolwiek wirtualnym świecie. Patrząc od środka – w komputerze nie ma niczego poza rozstrzygalnym zbiorem zdań. Ta fundamentalna prawda ma status podobny do twierdzenia zachowania energii. Próby stworzenia sztucznego mózgu, nie różniącego się co do możliwości od mózgu człowieka przypominają poszukiwanie perpetuum mobile. Pomysły w rodzaju wykorzystania elementów biologicznych w budowie komputera nie pozwalają na wyjście poza ograniczenia systemu iteracyjnego. I należy je ocenić dokładnie tak samo jak „genialne” pomysły konstruktorów perpetuum mobile. Sytuacja o tyle dziwna, że zasad budowy komputera nie musimy odkrywać (tak jak prawa zachowania energii), gdyż zostały one ustalone przez twórców komputerów.

CZŁOWIEK A MASZYNA

Matrix

W głośnym filmie pod tytułem „Matrix” ludzie żyją w wirtualnym świecie, wytworzonym przez komputery. Bodźce, jakie odbierają ludzie, są wytwarzane przez program komputerowy. Czy coś takiego jest teoretycznie możliwe? Jeśli założymy, że udaje się całkowicie wyeliminować wpływ bodźców innych, niż odbierane z komputera, to teoretycznie można sprawić, by postrzeganą rzeczywistością był matrix. O wiele trudniejsze byłoby wprowadzenie interakcji.
Gdy chcę ruszyć ręką, z mózgu bodźce są przesyłane do ręki. I przez rękę są te bodźce „interpretowane”. Aby przenieść człowieka do rzeczywistości wirtualnej, należałoby tą reakcję wyeliminować, przesyłając informacje nie do ręki, ale do komputera. Zadanie takiej izolacji mózgu od ciała wydaje się niewykonalne. Gdyby jednak to się udało, to czy taki wyizolowany mózg miałby szansę stwierdzenia, czy umieszczono go w rzeczywistości wirtualnej? Od razu nasuwa się problem wolnej woli. Program komputerowy - niezależnie od stopnia komplikacji – jest deterministyczny. Jeśli na jego wejściu pojawią się stany mózgu – na wyjściu zawsze będzie ten sam wynik. To jednak nie przeczy naszym intuicjom i nie podważa wolnej woli! Póki jakikolwiek element systemu jest niedeterministyczny (tu: mózg) – determinizm reszty daje się pogodzić z istnieniem wolnej woli.

Terminator

Uzyskany powyżej wynik zdaje się sugerować, że realność świata nie jest do udowodnienia. Spróbujmy jednak zastanowić sie, czy sam mózg może być częścią rzeczywistości wirtualnej, wytworzonej przez komputer. Poza problemem wolnej woli i wcześniej rozważanych ograniczeń logicznych, pojawia się problem świadomości. Świadomość wiąże się z ciągłością czasu (pamiętamy – co było przed chwilą i oczekujemy chwili następnej). W komputerze czas zmienia się skokowo. Można go teoretycznie zatrzymać na dowolnie długo i uruchomić ponownie od tego samego stanu – wynik działania się nie zmieni. Przypisanie komputerowi świadomości – jak widać na podstawie wcześniejszych wywodów – byłoby równoznaczne z przypisaniem świadomości bardzo złożonemu wyrażeniu logicznemu! Racjonalnym jest więc założenie, że komputer nie może uzyskać świadomości. Piszę o założeniu, a nie wyniku, gdyż przekonanie o istnieniu wolnej woli, świadomości i ciągłości czasu nie daje się – jak na razie - udowodnić. Tezą, którą można uznać za dobrze uzasadnioną, jest: jeśli człowiek jest istotą świadomą, obdarzoną wolną wolą i żyjącą w czasie posiadającym ciągły charakter, to istnieje nieprzekraczalna bariera między światem ludzi, a światem komputerów. Nie grozi nam więc powstanie świadomych maszyn – takich, jakie pokazano w filmie „Terminator”. Wynik ten jest ważny w odniesieniu do komputerów, albo – dokładniej – maszyn działających zgodnie z modelem systemu iteracyjnego.

FILOZOFIA WIRTUALNEGO ŚWIATA

Świat wirtualny a świat realny

Czy badania światów wirtualnych mogą nam pomóc w zrozumieniu świata realnego?
W historii filozofii analitycznej badano szereg istotnych kwestii, poszukując ostatecznego ich rozstrzygnięcia. Czy badanie własności systemów iteracyjnych może pomóc w tych poszukiwaniach? Na przeszkodzie zdaje się stać problem semantyki. Zapisanie w pamięci komputera wierszy nie powoduje, że w wirtualnym świecie istnieje poezja, tak jak umieszczenie tam Biblii nie skutkuje pojawieniem się religii. Przenosimy jedynie struktury logiczne – bez odniesień do rzeczywistości.
Zauważmy jednak, że także znaczenie teorii naukowych (przynajmniej w zakresie nauk przyrodniczych) jest zrozumiałe bez odnoszenia ich do rzeczywistości. Takie odniesienie – poprzez doświadczenie – jest konieczne do weryfikacji teorii, ale nie - do jej zrozumienia. Gdyby więc udało się ustalić pewne tezy odnoszące się do wszystkich światów wirtualnych – mogą one być zaakceptowane, jako ograniczenia teorii odnoszących się do naszej rzeczywistości. Nawiązując do logiki modalnej, można stwierdzić iż jest to zastosowanie schematu: jeśli T jest konieczne, to T jest prawdą. Możemy w związku z tym postawić następującą hipotezę:
Jeśli istnieje logiczny dowód pewnej tezy, która jest prawdziwa dla każdego świata wirtualnego, to jest ona także prawdziwa w świecie realnym.

Oto przykład argumentacji zbudowanej w oparciu o tą hipotezę: w dowolnym systemie iteracyjnym (świecie wirtualnym) rozbudowa poprzez złożenie (pod)systemów, jest operacją odwracalną i jednoznaczną; logiczna analiza rzeczywistości musi więc zakładać, że całość jest sumą części (redukcjonizm).

Związek powinności z faktami

Jako ilustrację rozważań z poprzedniego akapitu, zaprezentuję „komputerowe rozwiązanie” problemu związku powinności z faktami. Problem ten brzmi: czy z opisu tego, co jest, można wnioskować to, co być powinno? Inaczej - czy zdania wartościujące można uzasadnić samym opisem faktów?
Jak wygląda to w przypadku systemu komputerowego? Każdy system można zdefiniować w postaci strukturalnej, lub funkcjonalnej. Opisem strukturalnym może być np. wydruk całej zawartości pamięci komputera. Opis funkcjonalny to zapis wszystkich operacji (szerzej: algorytmów). Mamy więc pełną równoważność między faktami (struktura), a instrukcjami w rodzaju “aby otrzymać sumę liczb a i b weź liczbę a i dodaj do niej b”. Uzyskujemy rozstrzygnięcie: w świecie wirtualnym każde zdanie jest opisem faktów.
W odniesieniu do świata rzeczywistego musimy uznać, że jeśli chcemy przedstawić argumentację logiczną dotyczącą powinności – musimy dopuścić ich związki z faktami (fakty dotyczące powinności).
Ludzie poddani edukacyjnej tresurze, gładko akceptują interpretację tej sytuacji, zgodną z pozytywistyczną tradycją. Twierdzenie, że nie ma logicznego przejścia między tym co jest, a tym, co być powinno zdaje się podważać fundamenty religijnej etyki. Cóż z tego iż ktoś uznaje istnienie Boga za fakt, skoro nic z tego nie wynika? To oczywiste nadużycie. Dla człowieka religijnego istnienie Boga nie jest faktem moralnie obojętnym. Z drugiej strony nietrudno dostrzec, że argumenty za pozytywistyczną interpretacją muszą być z punktu widzenia logiki fałszywe (jeśli uznamy istnienie pewnych norm), albo pozbawione sensu (w świecie takich norm pozbawionym).

Humanizm w erze komputerów

Rozumowanie, takie jak przedstawione powyżej, można powtórzyć dla niektórych innych, istotnych problemów. Fakt, że komputer można uznać za system wskazujący konsekwencje logiczne zdań prawdziwych, okazuje się mieć kolosalne znaczenie! W komputerze nie może być niczego poza logiczną konsekwencją faktów. Odniesienie pojęć takich jak wolność, lub wartość (w sensie etycznym) do komputera jest pozbawione sensu. Jeśli więc te pojęcia mają istotne znaczenie, a nie są jedynie czystą ułudą – możemy z całą stanowczością stwierdzić iż istnieje zasadnicza i nieprzekraczalna różnica między człowiekiem, a komputerem.

PODSUMOWANIE

Zawsze, gdy przedstawiamy logiczną argumentację – musimy zdawać sobie sprawę z tego, że dotyczy ona świata wirtualnego. Możliwość zastosowania uzyskanego wyniku do świata realnego wymaga uzasadnienia. Świat ludzi, to świat wartości. Jeśli przyjmiemy iż przy przejściu od rzeczywistości, do rzeczywistości wirtualnej (modelu komputerowego), wartości giną lub tracą swój charakter – nie możemy przedstawić w odniesieniu do nich argumentacji logicznej.

Jerzy Wawro, 2006