Symbole zazwyczaj coś znaczą (mają sens, są zrozumiałe) i coś oznaczają (do czegoś się odnoszą). Na przykład znak drogowy może wyrażać ostrzeżenie przed pieszymi (znaczenie) i równocześnie oznaczać miejsce w którym jest przejście dla pieszych.

Także wypowiedzi formułowane w dowolnym języku mogą na coś wskazywać i coś znaczyć.

W przypadku nazw własnych możemy uznać, że znaczenie słowa sprowadza się do wskazania obiektu którego nazwa ta dotyczy. Czyli w tym wypadku znaczenie = oznaczanie. Często jednak jesteśmy w stanie wskazać do czego konkretnie odnoszą się słowa (co oznaczają), chociaż je rozumiemy.

Za rozróżnieniem znaczenia (sensu) i oznaczania (referencji) przytacza się dwa argumenty:

  1. Skoro dwa wyrażenia mają takie samo znaczenie, to można je stosować zamiennie. Na przykład „dwie godziny” i „2h” rozumiemy tak samo. Gdyby znaczenie utożsamiać z referencją (oznaczaniem), to analogiczna reguła dotyczyłaby słów wskazujących na to samo. Gottlob Frege sformułował następujący kontrprzykład. Jak wiadomo nazwy “Gwiazda Poranna” i „Gwiazda Wieczorna” oznaczają ten sam obiekt (planeta Wenus). Gdyby “Gwiazda Poranna” i “Gwiazda Wieczorna” miały takie samo znaczenie, można by je stosować zamiennie. Czy jednak stwierdzenie “Gwiazda Poranna = Gwiazda Wieczorna” rozumiemy tak samo jak “Gwiazda Poranna = Gwiazda Poranna”? Nie. W pierwszym przypadku mamy ważne odkrycie a w drugim trywialną tożsamość. Czyli znaczenie (sens, rozumienie) to nie to samo co oznaczanie.

  2. Wyrażenia odnoszące się do obiektów nie istniejących, albo sprzecznych są zrozumiałe, ale nic nie oznaczają. Na przykład „Obecny król Francji” na nic nie wskazuje (nic nie oznacza) ale jest zrozumiałe (ma znaczenie).

Pomimo powyższych problemów, nie zaprzestano prób definiowania znaczenia wypowiedzi poprzez to do czego się te wypowiedzi odnoszą1. Czy jednak nie prościej jest zdefiniować klasę języków dla których utożsamianie znaczenia z oznaczaniem nie sprawia problemów? Takie założenie nie sprawia żadnych problemów w przypadku 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 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.

Widzimy więc, że w miejsce sporu o to, czy sens wypowiedzi daje się sprowadzić do ich oznaczania (semantyka referencyjna), należy zapytać o klasę języków w których taka zgodność oznaczania i znaczenia zachodzi.

 

W szczególności istotne jest pytanie, czy dotyczy to wszystkich 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 formułowanych w ramach 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 sprzecznościach się nie wypowiadają, oraz zakładają istnienie opisywanych bytów (zobowiązania ontologiczne).

Możemy więc przyjąć iż rozważane rozróżnienie znaczenia i oznaczania nie jest konieczne w języku nauki. Nie znaczy to wcale, że należy o tym rozróżnieniu zapomnieć. Wręcz przeciwnie - przechodząc od teorii do jej zastosowania, tworzymy konkretne obiekty odpowiadające teoretycznym opisom. Nadajemy symbolom konkretne referencje (oznaczanie). Inżynier tworzy obiekty opisywane wcześniej teoretycznie. Znaczenie symboli rozważamy w teorii, a w praktyce ważne jest to do czego się te symbole odnoszą. Podobny proces zachodzi  przy tworzeniu programów komputerowych. W tym wypadku mamy jednak często do czynienia z działaniem odwrotnym: wychodząc od konkretów tworzymy abstrakcje.

 

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 (zob. Reinhard Muskens „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”).

 


Przypisy