Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/galicea/logic/libraries/f0f/dispatcher/dispatcher.php on line 524

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/galicea/logic/libraries/f0f/dispatcher/dispatcher.php on line 529

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/galicea/logic/libraries/f0f/dispatcher/dispatcher.php on line 534

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/galicea/logic/libraries/f0f/dispatcher/dispatcher.php on line 539

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/galicea/logic/libraries/f0f/dispatcher/dispatcher.php on line 552

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/galicea/logic/libraries/f0f/dispatcher/dispatcher.php on line 561

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/galicea/logic/libraries/f0f/dispatcher/dispatcher.php on line 566

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/galicea/logic/libraries/f0f/dispatcher/dispatcher.php on line 580

Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /var/www/galicea/logic/libraries/f0f/dispatcher/dispatcher.php on line 609
Czas i paradoksy logiczne

Czas a logika klasyczna1

Zdania w logice klasycznej opisują fakty (stan), a nie ich zmiany w czasie! Jeśli uznajemy zdanie za prawdziwe (fałszywe), tym samym uznajemy iż jego wartość logiczna nie zmienia się w czasie.
Na przykład zdanie 'jutro będzie padać deszcz' nie jest zdaniem logiki, gdyż nie umiemy ustalić jego wartości logicznej.

Możemy powiedzieć: 'dodając do liczby 2 liczbę 3 otrzymamy 5'. Wydaje się, że wyrażono tu jakiś ciąg czynności w czasie. Ale to jedynie opis zdeterminowanego wyniku działania. Wynik jest z góry przesądzony i dlatego możemy go podać. To, że posługujemy się przy tym czasownikiem jest jedynie środkiem wyrazu. Analogicznie możemy traktować każdy program komputerowy jako sieć logiczną2. Zamiana tego zapisu na instrukcje działania wykonywane w czasie powoduje jedynie zmniejszenie złożoności sieci logicznej na złożoność czasową (zamiast jednego złożonego działania ciąg prostszych wykonywanych w kolejnych chwilach czasu). Trudno więc mówić, że w ten sposób uwzględniono w komputerze czas taki jakim my go rozumiemy (jako doświadczaną zmienność). Prawdą pozostaje teza postawiona na początku: jeśli uznajemy zdanie za prawdziwe/fałszywe, tym samym uznajemy iż jego wartość logiczna nie zmienia się w czasie.

Opis działania komputera jest równoważny opisowi jego struktury, który da się przedstawić jako zbiór wyrażeń logicznych. Zauważmy przy tym, że takie wyrażenia nie są nigdy zapisem zdań fałszywych – nawet gdy dają na wynik 0 (fałsz). Na przykład zdanie: „koniunkcja daje na wynik fałsz, gdy wartości obu czynników koniunkcji (wejście) są fałszywe” jest prawdą! Opis działania komputera jest równoważny ze zbiorem zdań prawdziwych!

Dotyczy to wszystkich układów (maszyn) deterministycznych. Wątpliwości mogą dotyczyć jedynie tego, czy mamy do czynienia z determinizmem (jak w zdaniu 'jutro wzejdzie słońce'). Problemem jest też próba uwzględnienia czasu ciągłego (a nie dyskretnego). Prowadzi to do paradoksów związanych z nieskończonością. Z uwagi na to w tym artykule problem czasu ciągłego nie został poruszony.

Logika modalna i światy możliwe

Na początku tekstu podkreślone zostało to, że zdania logiczne służą do opisu faktów (stanu rzeczy). Kiedy fakty nie są znane w pełni, też możemy je opisać w sposób ścisły - choć niekoniecznie szczegółowy. Na przykład: 'jeśli rzucimy kostką do gry to otrzymamy ilość oczek od 1 do 6'. W tym przypadku można też skorzystać z pewnego rozszerzenia logiki klasycznej, a mianowicie logiki modalnej. W logice tej wprowadza się dwa operatory: jest konieczne oraz jest możliwe. Możemy więc powiedzieć: 'jest możliwe że rzucając kostką do gry otrzymamy 6 oczek'. Nie stanowi to istotnego wyłomu w deterministycznym charakterze logiki. Powszechnie takie zdania modalne interpretuje się w ten sposób, że pojawia się kilka światów możliwych. W każdym z nich wynik jest zdeterminowany. A więc na przykład w jednym ze światów możliwych rzucenie kostką da na pewno wynik 1 a w innym 6. Jeden z tych światów możliwych jest naszym światem realnym (choć możemy nie wiedzieć który). Operator „jest możliwe” oznacza że istnieje co najmniej jeden świat możliwy w którym zdanie jest prawdziwe. Operator „jest konieczne” zaś oznacza, że w każdym świecie możliwym rozważane zdanie jest prawdziwe.

Logika modalna i zdania warunkowe

Powiedzmy, że masz siedem ponumerowanych kostek do gry (od 0 do 6). Rzucasz kostką numer 0, a następnie - w zależności od wyniku jedną z kostek z numerkami od 1 do 6. Po wykonaniu tych czynności możemy opisać ich wynik. Na przykład: 'kostką numer 0 wyrzucono 4 i kostką numer 4 wyrzucono 6'. Ale nawet przed wykonaniem pierwszego rzutu mamy pewną wiedzę, którą możemy zapisać podając wszystkie możliwe stany (oznaczmy skrótowo k[n]=m : rzut kostką numer n daje wynik m oczek): '(k[0]=1 i k[1]=1) lub (k[0]=1 i k[1]=2)... lub (k[0]=2 i k[2]=1) ....'
Użycie logiki modalnej może pozwolić na uproszczenie tego zapisu. Zdanie w logice modalnej pozwala uniknąć konieczności zapisu całego ciągu możliwych zdarzeń. Jeśli nas interesuje tylko określony wynik, możemy powiedzieć:
'jest możliwe że kostką numer 0 wyrzucimy 1 i kostką numer 1 wyrzucimy 6 '
(w skrócie: jest możliwe że k[0]=1 i k[1]=6).
Istnieje jeszcze jeden sposób skrócenia zapisu, bez uciekania się do logiki modalnej. Służy do tego implikacja. Zauważmy, że jeśli podane wcześniej zdanie opisujące wszystkie możliwe wyniki jest prawdziwe, to prawdą jest również:
'~(k[0]=1) lub ( (k[1]=1 lub k[1]=2) lub k[1]=3 ....) )'
a to jest równoważne implikacji:
' jeśli k[0]=1 to ( (k[1]=1 lub k[1]=2) lub k[1]=3 ....) )'
Jeśli zdanie logiki opisuje działanie pewnego systemu, to implikacja może służyć zaznaczeniu kolejności działań - ale pod warunkiem, że wyrażenie po lewej stronie będzie prawdziwe!

Zgodnie z tym co zaznaczono na wstępie - tylko wyrażenie prawdziwe opisuje stan jakiegoś (rzeczywistego lub nie) systemu. Oczywistym jest, że najpierw wykonywane jest działanie opisane po lewej stronie implikacji. Jednak pokazana równoważność pokazuje, że implikacja nie jest niezbędna dla opisania samego wyniku (lub możliwych do uzyskania wyników).

Logika modalna i iteracje

Uwzględnieniu czasu w logice ma służyć logika temporalna3. Jest to odmiana logiki modalnej, w której wprowadzono operatory dotyczące czasu. Na przykład (stosujemy poniżej zapis funkcyjny operatorów):

  • G(h) - od danego momentu już zawsze będzie miało miejsce h.
  • F(h) - kiedyś w przyszłości będzie miało miejsce h.
  • U(h,s) - kiedyś nastąpi s ; do czasu jego pierwszego wystąpienia zawsze będzie h.
  • R(h, s) – s będzie zachodziło tak długo, aż nie zajdzie h .

Ten zapis bardzo łatwo przekształca się na język informatyki (języki zapisu programów komputerowych):

  • G(h) - h jest stałą (const) - jej wartości nie można zmieniać.
  • F(h) – h jest typu F który przewiduje określone wartości.
  • U(h,s) – pętla typu repeat (powtarzaj aż) z niezmiennikiem h i warunkiem zakończenia s;
  • R(h, s) – pętla typu while (powtarzaj dopóki) z warunkiem zakończenia iteracji h i niezmiennikiem s.

Gwoli ścisłości należy dodać, że definicja F zawiera warunek, by wszystkie wartości dla danego typu danych mogły kiedyś zaistnieć. W definicji pętli najczęściej mamy do czynienia z sytuacją, gdy nie rozróżnia się niezmiennika i warunku zakończenia (tyle, że w pętli repeat warunkiem zakończenia jest wartość fałszywa sprawdzanego wyrażenia). Te zastrzeżenia nie podważają tezy, że zapis w języku informatyki jest równoważny z zapisem w języku logiki temporalnej. W związku z tym wcześniejsze uwagi dotyczące programów komputerowych i czasu pozostają w mocy także w odniesieniu do logiki temporalnej. To tylko kwestia prostszej notacji, a nie uwzględnienie zmienności świata (a więc czasu) w języku logiki. Zmienność pozostaje domeną danych wejściowych.

Zdania sensowne i nonsensowne

Co możemy powiedzieć o zdaniu (dotyczącym przytoczonego przykładu): 'kostką numer 0 wyrzucono 1 oczko a kostką numer 2 wyrzucono 6 oczek'? Skoro nie rzucano kostką numer 2 (bo kostką numer 1 wyrzucono 1), to zdanie nie może być prawdziwe. Czy jednak możemy uznać go za fałszywe? Opisuje ono sytuację, która nigdy nie może mieć miejsca. Takie odwołanie się do stanu rzeczy, który jest niemożliwy, albo o którym nic nie wiemy, czyni zdanie nonsensownym. Jeśli powiemy: 'obecny król Polski nosi' wąsy, to nie mówimy prawdy lub fałszu. Wypowiadamy zdanie nonsensowne, gdyż Polska nie jest królestwem. To ważne uzupełnienie w kontekście przywoływanych systemów obliczeniowych. Opis struktury takiego systemu to zbiór zdań sensownych i prawdziwych.

Jeśli opisujemy algorytm działania, powinniśmy zważać na to, by nie było w tym opisie zdań nonsensownych (opisujących stany które nie mogą zaistnieć).

Podróże w czasie a logika

Czy zadanie z naszego przykładu można odwrócić? Brzmiałoby ono: 'rzuć jedną z kostek 1-6, zależnie od wyniku drugiego z rzutów, który wykonasz kostką numer 0'. To zadanie jest nonsensowne, gdyż nie wiemy do czego odnosi się jego początek. W chwili wykonania pierwszego rzutu nie jest znany wynik drugiego z nich. Gdyby istniała możliwość podróżowania w czasie, to nasz podróżnik mógłby najpierw rzucić kostką 0, a później wrócić do przeszłości i wykonać rzut jedną z kostek od 1 do 6. Zauważmy jednak, że w świecie związanym z podróżnikiem kolejność działań byłaby inna niż w zadaniu. Z punktu widzenia logiki to zadanie pozostaje bezsensowne. Niby oczywistość. Ale takie nonsensowne żądania bywają tak sprytnie sformułowane, że nie dostrzegamy błędu. Tak zrodziło się wiele tak zwanych paradoksów. Są one wynikiem posługiwania się zdaniami nonsensownymi i/lub „sztuczką” z podróżą w czasie.

Paradoks golibrody

Weźmy teraz pod uwagę znany paradoks golibrody: 'wojskowy golibroda, to żołnierz, golący wszystkich (i tylko tych) żołnierzy, którzy się sami nie golą'. Wydaje się, że mamy tu problem, gdyż jeśli golibroda się sam nie goli to powinien się ogolić, ale on nie może golić tych którzy się sami golą.
Co tu znaczy 'sami się nie golą'? Możemy uznać, że tyle co 'sami się nie ogolili'. Wówczas nie ma w powyższym zdaniu żadnej sprzeczności. Wszyscy którzy się nie ogolili (łącznie z golibrodą) mogą liczyć na to iż zostaną przez golibrodę ogoleni. Mamy zbiór implikacji 'jeśli żołnierz się nie ogolił, ogoli go golibroda'. Jeśli jednak stwierdzenie 'sami się nie golą' uznamy za równoważne stwierdzeniu: 'sami się nie ogolili i nie ogolą w przyszłości' - to otrzymamy zdanie którego wartości logicznej ustalić nie sposób. Mamy tu bowiem odwołanie do przyszłości. Nie ma tu więc żadnego paradoksu, ale źle sformułowane zdanie.

Paradoks kamienia

Słynny paradoks kamienia brzmi: 'Czy wszechmogący Bóg może stworzyć kamień, którego sam nie da rady podnieść?' Podważając wszechmoc Boga uznajemy, że:
'(stworzyć(Bóg,Kamień) i ~podnieść(Bóg,Kamień)) lub ~stworzyć(Bóg,Kamień)'
Pierwsza część alternatywy jest równoważna zaprzeczeniu implikacji: 'jeśli stworzyć(Bóg,Kamień) to podnieść(Bóg,Kamień)'. Czyli powątpiewamy w możliwość podniesienia któregoś ze stworzonych kamieni. Ale nie widać podstaw do tego zwątpienia. Pozostaje więc druga część alternatywy. Wątpimy w możliwość stworzenia jakiegoś konkretnego kamienia. Jakiego? Oczywiście wszechmocny Bóg może spełnić każde nasze żądanie, pod warunkiem że będzie ono wyrażone w sposób sensowny (bo tylko to możemy poddać logicznej analizie). Czy określenie 'kamień którego Bóg nie może podnieść' jest sensowne? Najprostsza odpowiedź brzmi: nie, gdyż nie ma kamieni których nie podniósłby wszechmocny Bóg. Może się w tym miejscu pojawić zarzut, że wszechmoc została zakwestionowana - nie można więc odwoływać się w dowodzie do czegoś co jest do udowodnienia. Jednak nie możemy żądać próby podnoszenia czegoś czego nie ma. A więc najpierw musi być akt stworzenia a później podnoszenia. Przy tej kolejności działań Bóg może stworzyć dowolny kamień. I każdy stworzony kamień może podnieść! Na żądanie stworzenia innego kamienia ma prawo zapytać: 'jakiego?'. Nie potrafimy sformułować żądania bez odwoływania się do przyszłej próby podnoszenia. A więc nie można sformułować go w sposób sensowny.
Jeszcze dokładniej widać to, gdy zadanie sformułujemy z użyciem logiki modalnej. Możemy zdefiniować dowolne światy możliwe, w których pojawiają się różne kamienie. Dla wszechmocnego Boga jest koniecznością, by w każdym z tych światów mógł podnieść kamień tam istniejący. Chcąc wskazać kamień o który nam chodzi musielibyśmy powiedzieć: kamień którego nie ma w żadnym świecie możliwym. Tyle że to żądanie jest bezsensowne (nie wiadomo do czego się odnosi). Widać więc że to my mamy problem z logiką a nie Bóg ze wszechmocą.

 

Przypisy

1 Pierwsza wersja tego artykułu była publikowana na stronie: http://wandea.dbv.pl/readarticle.php?article_id=270 . Obecna redakcja jest nieco poprawiona.