Uczestniczyłem ostatnio w kilku konferencjach i seminariach, które miały w swoich tytułach termin computing — tłumaczony najczęściej jako obliczanie. Słuchając różnych referatów i dyskusji, uświadomiłem sobie, że nawet w tak wąskim kontekście jak informatyka i jej komputerowe zastosowania, różne osoby używają tego terminu w różnych znaczeniach.
Przykładowo: w znaczeniu wykonywania obliczeń, przetwarzania danych, realizacji algorytmów, rozwiązywania problemów… a nawet jako nazwy dyscypliny naukowej, Computing właśnie, która zajmuje się po trochu wszystkimi wymienionymi czynnościami lub procesami.
W ślad za wieloznacznością idzie tendencja do łączenia computing z przymiotnikami, które mają wskazywać na konkretne formy lub aspekty obliczeń; niekiedy jednak tak od siebie różne, że trudno dopatrzeć się w nich wspólnego mianownika. Mamy zatem: digital computing, analog computing, quantum computing, hyper-computing, physical computing, natural computing, mortal computing etc…
Dla zobrazowania powyższych obserwacji warto przytoczyć kilka ogólnych określeń specjalistów. Każde z nich próbuje uchwycić istotę computing, lecz wzięte łącznie ukazują dobrze typową dla współczesnych dyskusji wieloznaczność i wieloaspektowość obliczeń. Rozwinięcie kolejnych cytatów wymagałoby oczywiście osobnego wpisu (może nawet wykładu😊), lecz nie o to tu chodzi. Chodzi o ukazanie różnorodności znaczeń i sprowokowanie dalszej dyskusji…
A oto wybrane przeze mnie przykłady:
To compute is to execute an algorithm (Jack Copeland).
The Church-Turing thesis identifies the intuitive concept of what means “to compute” with a formal model of computation (Paula Quinon).
Computing can be seen as an epistemic process evolving in time, by means of which an agent (or community), aided by some machinery or instrumentation, obtains an answer with respect to a certain state-of-affairs (mathematical or physical) that the agent interprets as a problem, and can express mathematically (Philippos Papayonnopoulos).
Computing, today more than ever before, is a multi-faceted discipline which collates several methodologies, areas of interest, and approaches: mathematics, engineering, programming, and applications (Giuseppe Primiero).
Computing is the manipulation of representations of numbers (Corey Maley).
Sformułowanie ostatnie, poprzez zawarte w nim odniesienie do liczb, jest najbliższe duchowi polskiego tłumaczenia, o którym wspomniałem na początku: computing = obliczanie.
Polskie obliczanie odnosi się do liczb w sposób ewidentny. Widać to wyraźnie w zdaniach typu „Oblicz coś…”. Na przykład: „Oblicz pole trójkąta”, „Oblicz wymiary działki”, „Oblicz kąt przy podstawie trójkąta równoramiennego” czy „Oblicz prędkość ciała po 2 sekundach swobodnego spadku w kierunku ziemi”. W każdym z przywołanych kontekstów wynikami czynności obliczania są pewne wartości liczbowe, które uzyskuje się poprzez przekształcanie innych wartości liczbowych za pomocą specjalnie dobranych wzorów i reguł. Wartości te mogą dotyczyć przy tym i obiektów abstrakcyjnych (jak pola figur geometrycznych), i fizycznych (jak wymiary działki).
Właśnie ze względu na swój “liczbowy” charakter polskie obliczanie wydaje się – przynajmniej na pierwszy rzut oka – dużo węższe niż angielskie computing. Spostrzeżenie to może prowadzić do wyboru innych tłumaczeń, spośród których na pierwszy plan wysuwa się przetwarzanie danych. Przetwarzając dane bowiem, niekoniecznie musimy operować na ich reprezentacjach liczbowych. Nie musimy też zakładać, że na pewnym – koniecznym dla informatycznej teorii – poziomie, dane redukują się do jakichś liczb, a operacje na danych do operacji arytmetycznych. Nie musimy zatem posługiwać się nacechowanym „liczbowo” terminem obliczanie – dla którego zresztą w języku angielskim istnieje różny od computing odpowiednik, tj. calculating.
Być może jednak za powszechną praktyką utożsamiania computing z obliczaniem stoi coś istotnego. Być może takie tłumaczenie, choć przy pierwszym spojrzeniu zbyt wąskie a nawet mylące, oddaje jednak istotę czynności nazywanej computing: istota ta polegałaby na teoretycznej konieczności definiowania różnych rodzajów computations/obliczeń za pomocą różnego rodzaju liczb i operacji na liczbach. Przykładowo: digital computing byłoby definiowane poprzez odniesienie do własności liczb naturalnych (własność bodaj najprostsza to dyskretność zbioru tych liczb), a pewne przynajmniej postaci analog computing wymagałyby definicji w kategoriach własności liczb rzeczywistych (jak ciągłość).
Formułując ostatnie zdania, uświadomiłem sobie, że kilka lat temu dyskutowaliśmy o podobnych sprawach przy okazji wpisu „O teoretycznej (nie)zbędności pojęcia liczby w informatyce teoretycznej i jej metodologii”. Dyskutowaliśmy nawet dość zażarcie.
Nie będę tutaj powtarzać formułowanych tam argumentów, ALE…
Bardzo jestem ciekaw, jak zapatrujecie się Państwo na:
a) wieloznaczność terminu computing,
b) naturę związków między computations/obliczeniami a światem liczb…?
A także:
c) czy wspomnianą w punkcie (a) wieloznaczność da się istotnie ograniczyć poprzez taką czy inną redukcję computing do operacji na liczbach (co zdaje się sugerować polskie tłumaczenie computing = obliczanie)?
Serdecznie zapraszam do rozmowy — Paweł Stacewicz.
ad a) Wieloznaczność jest naturalną konsekwencją różnic potrzeb, intuicji, tradycji, etc., więc trzeba ją zaakceptować, uważać na znaczenie bieżące, i zostawić w spokoju.
ad b) Warto natomiast skupić się na znaczeniu filozoficznym, epistemicznym, elegancko powyżej zaprezentowanym przez Philipposa Papayonnopoulosa, ogólnym, nie ograniczonym do liczb.
Związek jest taki, że liczby są jednym z wielu możliwych indywiduów, podlegających przetwarzaniu.
ad c) Ograniczać “Computing” do liczb naprawdę nie warto!
(Choć to liczby uświadomiły starszy proces przetwarzania informacji).
A. Stąd, proponuję następujące wytyczne do definicji pojęcia “Obliczenie”:
1) Konstytutywne dla intencjonalnego Obliczenia powinno być poznanie odpowiedzi na jakieś pytanie (np.: 1234*4321=?) – czyli aspekt epistemiczny.
2) Przedmiot atomowy procesu Obliczenia powinien być matematycznie wyrażalny, więc: bity, wart. logiczne, liczby, symbole, formuły, zdania, teksty, etc..
3) Zatem ugotowanie zupy jarzynowej lub upolowanie mamuta (więc wykonanie algorytmu) nie powinno być Obliczeniem.
4) A dedukcyjne udowodnienie twierdzenia (które nie jest wykonaniem algorytmu) powinno być Obliczeniem (tu: Jest dowodliwe?, Treść dowodu?).
5) Więc pojęcie algorytmu w ogóle nie powinno uczestniczyć w definiowaniu Obliczenia.
6) Natura ciągle generuje matematycznie wyrażalne dane, które można zinterpretować jako odpowiedzi na pewne pytania – zatem oblicza naturalnie.
B. Stąd, proponuję następujące dościślenie charakteryzacji Papayonnopoulosa, dodanie nowych definicji i twierdzenia:
1) Def.: Obliczenie epistemiczne – to proces (nazwijmy: epistemiczny, tj. poznawczy), o zmiennym w czasie stanie, toczący się w Umyśle pewnego Podmiotu (jednostkowego lub grupowego) i/lub w obserwowanej przez ten Podmiot Instrumentacji, za pomocą którego Podmiot uzyskuje Odpowiedź na pewne matematycznie wyrażone Pytanie o stanie pewnego innego systemu (matematycznego lub fizycznego), które to Pytanie Podmiot interpretuje jako swój Problem poznawczy.
(P. Papayonnopoulos, M. P. Jankowski).
2) Def.: Obliczenie naturalne – to proces (nazwijmy: naturalny), o zmiennym w czasie stanie, toczący się spontanicznie w pewnej Instrumentacji, który mógłby przez jakiś Podmiot zostać zinterpretowany jako proces epistemiczny pewnego Obliczenia epistemicznego, rozwiązującego jego Problem poznawczy.
Np.:
a) Stabilizacja powierzchni bańki mydlanej na drucianym szkielecie – jako wyznaczenie powierzchni minimum energii potencjalnej.
b) Wyznaczenie tempa utraty momentu pędu pary gwiazd neutronowych – jako test dla przewidywań emisji fal grawitacyjnych w OTW.
3) Def.: Obliczenie – to Obliczenie epistemiczne lub Obliczenie naturalne.
Stąd:
4) Tw.: Obliczenie epistemiczne Podmiotu A, może zostać zinterpretowane przez Podmiot B jako Obliczenie naturalne, a następnie jako Obliczenie epistemiczne Podmiotu B, wykonane siłami Podmiotu A, będącymi dla Podmiotu B siłami natury, a Podmiot A – elementem natury.
Np.:
a) Konstrukcje mrówek, termitów, pszczół i pająków – dla inżyniera architekta Homo Sapiens.
b) Wyniki prac zespołu Projektu Manhattan, dla Igora Kurczatowa i Stalina w ZSRR.
Gdybyśmy mieli prowadzić rozważania lingwistyczne, to podpowiem, że polszczyzna zna takie słowo jak “rachować”. Dawniej dzieci w szkole uczono rachunków, dopiero później ten przedmiot nauczania zmienił nazwę na “matematyka”. Uczono przede wszystkim tego, jak za pomocą kartki i ołówka wykonywać cztery podstawowe działania na liczbach większych niż jednocyfrowe. Ale z drugiej strony mówimy też o “rachunku różniczkowym”, “rachunku całkowym”, “rachunku zdań logicznych”, “rachunku predykatów”, “rachunku kwantyfikatorów”, a nawet o “rachunku sumienia”. Żaden z tych rachunków nie dotyczy operacji na liczbach. Może zatem “rachowanie” jest lepszym odpowiednikiem słowa “computing”?
W matematyce, gdy mówimy o liczeniu i o “liczbach” mamy na myśli nieskończone zbiory elementów — np. o mocy Aleph_0 (gdy to liczby naturalne, całkowiete etc), lub Continuum (tak będzie na przykład w przypadku liczb rzeczywistych). Z kolei w informatyce rachować potrafimy tylko na elementach zbiorów skończonych — Turing postawił warunek, by symbole na taśmie należały do zbioru N-elementowego, a w realnym komputerze rejestry i komórki pamięci mają określoną wielkość. Warto podkreślić, że wynikiem informatycznych rachunków mogą być również liczby (o tym było w dyskusji wcześniej przywołanej przez Pawła Stacewicza).
Zwięzłość jest cnotą, istotę obliczania/rachowania w informatycznym znaczeniu najtrafniej i najkrócej ujął cytowany Jack Copeland — jest to wykonywanie algorytmu.
Do wyrażonej przez Autora i Gospodarza seminarium zachęty do rozważań nad wieloznacznością określeń, dołączam swoje pytanie. Czy tak rozumiane informatyczne rachowanie (realizacja algorytmu) ma odpowiednik poza samą informatyką (teoretyczną lub praktyczną)? Albo to samo inaczej: czy metody informatyczne są wynalazkiem człowieka, czy odkryciem sposobu działania przyrody?
Pozostawiam to w formie pytania bez (mojej) odpowiedzi, bo tak wypada przed samym spotkaniem seminaryjnym.
Bardzo podoba mi się termin “Rachunek” jako odpowiednik “Computing”.
Dodam: Rachunek: Prawdopodobieństwa, Wektorowy, Macierzowy, Tensorowy.
Do rozważań o praktykach Turinga dodam, że choć jego Maszyna Turinga miała pamięć (taśmę) nieskończoną, to jego fizyczny (lampowo-taśmowy) komputer Colossus, choć działał na zasadzie MT, to miał pamięć skończoną…
“Wszystko należy upraszczać ile się da, ale nie bardziej!” (A. Einstein).
Istnieje ogólny algorytm różniczkowania. Ludzie też całkują symbolicznie i dowodzą twierdzenia – to rachunek całkowy i rachunek predykatów.
Dołączam pytanie dla zwolenników rachunku jako wykonania algorytmu – jakiż to algorytm, ogólnie, bez użycia inwencji, produkuje formuły całek i dowody twierdzeń? Może być na przykładzie niewymierności Pi^2 lub prostego Twierdzenia Pitagorasa.
Uważając, że im więcej ciekawych idei przed seminarium, tym bogatsze i ciekawsze może być seminarium, pozwolę sobie wyrazić pogląd, że każde obliczenie naturalne jest obliczeniem, bo produkuje jakiś matematycznie wyrażalny wynik, z jakichś danych początkowych, jakąś regułą. A jednocześnie jest poza ludzką informatyką – jest sposobem działania przyrody.
Ludzie to odkrywają, budując Naukę. Ale z drugiej strony ludzie wynaleźli techniki, których przyroda nie wynalazła – to np. binarna reprezentacja, modele symboliczne, cyfrowa reprezentacja liczb, algebraizacja geometrii.
“Wszystko należy upraszczać ile się da, ale nie bardziej” — to bardzo dobra zasada i należy ją odnieść do stwierdzenia, że rachowanie jest realizacją algorytmu. Łatwo tu wpaść w pułapkę, jeśli przyjmie się nadmiernie uproszczoną definicję algorytmu. Słowo to przeniknęło już do języka potocznego, używa się go w odniesieniu do każdej instrukcji postępowania (np. z żywym jeszcze mamutem lub pofragmentowanym i przeznaczonym na zupę). Dla informatyki taka definicja jest bezużyteczna.
Algorytm w informatycznym rozumieniu realizowany jest przez wykonawcę mającego skończoną definicję (np. maszynę Turinga, ale niekoniecznie). Czyli zapisany jest (może być) liniowo przy użyciu skończonej i opisanej liczby symboli, a wykonawca może mieć skończoną i opisaną liczbę stanów. Ten drugi warunek w bardziej obrazowej formie oznacza, że wykonawca umie wykonać rozkazy z zamkniętej listy czynności elementarnych.
Co może zdziałać tak rozumiany algorytm, sformułowany przez człowieka i realizowany przez komputer? Ano może wyprodukować zapis funkcji (w tym takiej z symbolem ∫), będącej np. rozwiązaniem zadanego równania różniczkowego. Może sprawdzić poprawność dowodu twierdzenia (vide Mizar), może samemu poprowadzić dowód, albo wykonać ogrom “czarnej roboty” przy dowodzeniu (vide twierdzenie o czterech barwach). Dzisiaj z takimi algorytmami łatwo się zapoznać, umiejętnie posługując się poleceniem “git clone” — wiele z nich jest publicznie dostępne.
Na koniec pytanie: czy takie podejście, że człowiek opisuje wymyślony przez siebie algorytm, który następnie wykonuje komputer, zaspokoi wszystkie nasze oczekiwania? Czy w skończonym czasie (a więc w praktyce) znajdziemy w ten sposób odpowiedzi na pytania, które odpowiedź mają? A jeśli nie, to czy na gruncie informatyki da się wypracować inne metody, które będą bardziej skuteczne?
Z drugiej strony przyroda w ramach radiacji specjacyjnej form trwania „wynalazła” także bardzo złożone struktury struktury neuronalne rachujące abstrakcyjne treści, które obrodziły w/w modelami symbolicznymi, cyfrową reprezentacją liczb itd…
„Algorytm” działania przyrody był zasadniczo dość prosty: naturalna domieszka chaosu sprawia, że organizmy potomne nie są kopia idealną swoich poprzedników, a to co mimo „uchyby” działa dalej – i w wyścigu o przetrwanie „lepiej”- to zyskuje ewolucyjną przewagę.
Niejako „pośrednio” – jedynie rachująca modele form przetrwania zgodnie z wyżej nakreślonym zgrubnie algorytmem – ewolucja, w miliardach prób i błędów, wygenerowała także i dowody twierdzenia Pitgorasa (które zresztą były znane Chińczykom sporo przed urodzeniem się Pitagorasa).
Bo (z trzeciej strony) jeśli nie wierzymy w paranormalne oddziaływanie magicznie ukonstytuowanego Rozumu na fizyczne struktury neuronalne w mózgu, to nie ma innego (bardziej od przyrody bezpośredniego) kandydata na producenta formuł całek i dowodów niż złożenie równoległego i rozproszonego przetwarzania się bodźców przez komórki nerwowe – z których każda działa i funkcjonuje chyba dość algorytmicznie.
Tak w skrócie: nie, neuron nie działa algorytmicznie. Przynajmniej mnie o tym nic nie wiadomo. W ogóle nie znam rzeczy w przyrodzie, które działają algorytmicznie, w sensie bycia ekwiwalentem maszyny Turinga. I to jest (moja) odpowiedź na pytanie, które zadałem przed seminarium.
Było też pytanie drugie, które w nieco innym sformułowaniu brzmi tak: czy z dostępnych nam działających algorytmicznie bytów (np. komputerów) da się zbudować strukturę działającą dalej już niealgorytmiczne, ale przewyższającą efektywnością algorytmiczne komputery?
Tu krótkiej odpowiedzi nie mam, ale wydaje mi się, że tak. Przynajmniej jest nadzieja.
Skrótowe określenie Copelanda, że „computing/obliczanie polega na realizacji algorytmów” przemawia do mnie. Dla mnie pojęcie postępowania zgodnie z regułami pewnego rachunku (zarówno w sferze matematyki czystej, jak i stosowanej) zlewa się w jedno z postępowaniem algorytmicznym. Jądro każdego rachunku stanowi bowiem pewien zestaw algorytmów.
Diabeł jednak tkwi jak zawsze w szczegółach, których pomijanie grozi nadmiernym upraszczaniem :)
Otóż, według mnie, nawet w kontekście tak ścisłym jak informatyka teoretyczna – czy nawet najściślejszym i najbardziej dla informatyki fundamentalnym jak teoria obliczeń – nie mamy jednego pojęcia algorytmu. Mamy ich tyle, ile jest modeli obliczeń. Wśród nich zaś jeden tylko jest wyznaczony przez koncept maszyny Turinga.
Wychodzi zatem na to, że określenie Copelanda czy też każde inne określenie, które polega na definiowaniu obliczania/computing poprzez odniesienie do algorytmów, staje się zrozumiałe dopiero wtedy, kiedy sprecyzujemy, jaki model obliczeń mamy na myśli. Przykładowo: model UMT Turinga (jako model obliczeń cyfrowych) czy model GPAC Shannona (jako model obliczeń analogowych ciągłych)…?
Gigantyczne pytanie, którego tutaj zapewne nie rozstrzygniemy, ale możemy przybliżać się do jego rozstrzygnięcia, brzmi:
Czy różne teoretyczne modele obliczeń – a przynajmniej takie, które są przez informatyków traktowane poważnie – mają takie cechy wspólne, które pozwolą uchwycić istotę wszelkiego rodzaju obliczeń?
Od czasów Turinga zmieniło się wiele. Przede wszystkim to, że z rozważań teoretycznych (co by było gdyby) mogliśmy przejść do praktyki. Dzisiaj komputerów na świecie jest więcej niż ludzi. A ludzi przecież też niemało. Wszystkie te praktyczne realizacje maszyn wypełniają teoretyczne założenia maszyny Turinga (choć przeważnie są to maszyny von Neumana, z adresowana pamięcią w miejsce nieadresowanej taśmy, ale te różnice są w tym momencie zupełnie nieistotne). W praktyce informatycznej, jak również w informatyce teoretycznej pracującej (ciężko) na rzecz tej praktyki, pojęcie algorytmu jest jednoznaczne. Doceniam teoretyczne rozważania innych modeli obliczeń, jednak nie dostrzegam dzisiaj ich praktycznej użyteczności. W tym również użyteczności używania innych definicji algorytmu.
Jeszcze uwaga dotycząca modelu obliczeń analogowych ciągłych. Tutaj zmiana zaszła w odwrotnym kierunku. Za życia Turinga, a nawet później, komputery analogowe miały praktyczne zastosowanie. Dzisiaj została z tego piękna teoria, do której — można powiedzieć — “przyroda nie dorosła”. Wyobraźmy sobie, że chcemy prowadzić obliczenia ciągłe na modelu elektrycznym, co pewnie jest u wszystkich pierwszym skojarzeniem. Zresztą realne komputery analogowe były (w większości) elektryczne. Prąd o natężeniu jednego ampera płynący przez jedną sekundę to przepływ 6,241,509,074,000,000,000 elektronów. Nasze obecne komputery cyfrowe przeważnie są 64-bitowe, czyli “za jednym zamachem” mogą wykonywać operacje na liczbach z zakresu od zera do 18,446,744,073,709,551,616.
To nawet więcej niż tych elektronów w poprzednim przykładzie (trzy razy), ale rząd wielkości ten sam. Z tym że komputer wykonuje tych operacji miliardy w ciągu sekundy, a wcześniej założyliśmy sobie, że zliczamy całą sekundę i że potrafimy liczyć pojedyncze elektrony, jak baca owce na hali. A jeden amper to ogromny prąd w porównaniu z tym, do czego przyzwyczaiła nas współczesna elektronika, dla której nawet mikroamper to dużo.
No to może zamiast elektronów liczmy cząsteczki i zbudujmy na przykład komputer hydrauliczny? Liczba Avogadra to około 6 × 10^23. To znaczy, że tyle cząsteczek zawiera jeden mol materii. Niby pięć rzędów wielkości lepiej, ale i tak mało, by dawało nadzieję praktykom. Filiżanka espresso, która stoi przede mną (częściowo wypita), to zaledwie dwa mole wody (i “kawy”). Znajomość tych liczb (czy tylko rzędów wielkości) w opisie atomowej budowy świata wystarczy, by poniechać wysiłków nad zbudowaniem licznika elektronów, atomów, cząsteczek i użycia go do celów informatycznych.