Logika dla informatyków/Logika w informatyce
Wykład 13 (link z wykł. 3)
Logika w informatyce
W tym rozdziale naszkicujemy skrótowo kilka nie wspomnianych dotychczas zagadnień logiki, które wiążą ją z informatyką. Wybór jest dość arbitralny, a opisy niezbyt wyczerpujące. Stanowią one raczej zaproszenie do dalszych, własnych poszukiwań, niż zamknięty wykład prezentowanych zagadnień.
Zdaniowe logiki trójwartościowe
Logika klasyczna, o której mowa w Wykładzie 1, jest logiką dwuwartościową.
Pierwsze logiki trójwartościowe skonstruowali niezależnie od siebie polski logik Jan Łukasiewicz i amerykański (aleurodzony w Augustowie)logik i matematyk Emil Post. Motywacje Posta były raczej kombinatoryczne, natomiast Łukasiewicz swoją konstrukcję poparł głębokim wywodem filozoficznym. Argumentował między innymi, że zdania o przyszłości, typu "jutro pójdę do kina", nie są dzisiaj jeszcze ani prawdziwe, ani fałszywe, bo przypisanie im którejś z tych wartości zaprzeczałoby istnieniu wolnej woli. Aby logika mogła jakoś zdać sprawę ze statusu zdań o przyszłości, musi im przypisać inną, trzecią wartość logiczną.
Trzeba tu zaznaczyć, że zupełnie inną propozycją rozwiązania tego samego problemu jest stworzona przez Brouwera logika intuicjonistyczna, którą poznaliśmy w Wykładzie #logint.
Zanim przejdziemy do części trochę bardziej formalnej, rozważmy jeszcze dwa przykłady wzięte z żywej informatyki, gdzie także naturalnie pojawia się trzecia wartość logiczna.
Przykład 13.1
Rozważmy dwie deklaracje funkcji w Pascalu:
CREATE TABLE A ( id INTEGER PRIMARY KEY auto_increment, ... valid BOOLEAN, ... );
Przy takiej deklaracji, tabela Parser nie mógł rozpoznać (nieznana funkcja „\verb”): {\displaystyle \verb+A+}
będzie mogła w kolumnie Parser nie mógł rozpoznać (nieznana funkcja „\verb”): {\displaystyle \verb+valid+}
zawierać trzy wartości logiczne: Parser nie mógł rozpoznać (nieznana funkcja „\verb”): {\displaystyle \verb+TRUE+}
, Parser nie mógł rozpoznać (nieznana funkcja „\verb”): {\displaystyle \verb+FALSE+}
i Parser nie mógł rozpoznać (nieznana funkcja „\verb”): {\displaystyle \verb+NULL+}
, a logika trójwartościowa objawi swoje działanie przy wykonaniu np. zapytania
SELECT * FROM A AS A1, A AS A2 WHERE A1.valid and A2.valid
Definicja 13.3
Zbiór formuł zdaniowej logiki trójwartościowej to zbiór tych formuł zdaniowej logiki klasycznej (patrz Definicja #radamalpa, w których występują tylko spójniki i
Wywołane w ten sposób zawężenie składni zrekompensujemy niezwłocznie po stronie semantyki.
Przez trójwartościowanie zdaniowe rozumiemy dowolną funkcję Parser nie mógł rozpoznać (nieznana funkcja „\small”): {\displaystyle \varrho:\small ZZ\to\{0,\frac12,1\}} , która zmiennym zdaniowym przypisuje wartości logiczne 0, 1.
Wartość formuły zdaniowej przy trójwartościowaniu oznaczamy przez Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \wfz\alpha\varrho} i określamy przez indukcję:
- Parser nie mógł rozpoznać (nieznana funkcja „\wf”): {\displaystyle [[\wf\prooftree p \justifies \varrho \using \textrm{(W)}\endprooftree=\varrho(p)} , gdy jest symbolem zdaniowym;
- Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \wfz{\neg\alpha}\varrho=F_\lnot(\wfz{\alpha}\varrho)} ;
- Parser nie mógł rozpoznać (nieznana funkcja „\wf”): {\displaystyle \wf\prooftree \alpha\lor\beta \justifies \varrho \using \textrm{(W)}\endprooftree=F_\land(\wf\prooftree \alpha \justifies \varrho \using \textrm{(W)}\endprooftree, \wf\prooftree \beta \justifies \varrho \using \textrm{(W)}\endprooftree)} ;
- Parser nie mógł rozpoznać (nieznana funkcja „\wf”): {\displaystyle \wf\prooftree \alpha\land\beta \justifies \varrho \using \textrm{(W)}\endprooftree=F_\lor(\wf\prooftree \alpha \justifies \varrho \using \textrm{(W)}\endprooftree, \wf\prooftree \beta \justifies \varrho \using \textrm{(W)}\endprooftree)} ;
- Parser nie mógł rozpoznać (nieznana funkcja „\wf”): {\displaystyle \wf\prooftree \lnot\alpha \justifies \varrho \using \textrm{(W)}\endprooftree=F_\lnot(\wfz\alpha\varrho).}
Różne wybory funkcji
i prowadzą do różnych
logik trójwartościowych.
Zaczniemy od logiki najstarszej, zwanej dziś logiką Heytinga-Kleene-Łukasiewicza:
|
|
|
Jest to logika niewątpliwie nadająca się do rozwiązania zadania, które sobie Łukasiewicz postawił. Sposób traktowania wartości logicznej jest taki, że należy ją rozumieć jako "jeszcze nie wiadomo".
Warto zauważyć, że w przypadku tej logiki zachodzą równości
- Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \wfz{\neg\alpha}\varrho=1-\wfz{\alpha}\varrho} ,
- Parser nie mógł rozpoznać (nieznana funkcja „\wf”): {\displaystyle \wf\prooftree \alpha\vee\beta \justifies \varrho \using \textrm{(W)}\endprooftree=\max\{\wf\prooftree \alpha \justifies \varrho \using \textrm{(W)}\endprooftree, \wf\prooftree \beta \justifies \varrho}\ \using \textrm{(W)}\endprooftree} ,
- Parser nie mógł rozpoznać (nieznana funkcja „\wf”): {\displaystyle \wf\prooftree \alpha\wedge\beta \justifies \varrho \using \textrm{(W)}\endprooftree=\min\{\wf\prooftree \alpha \justifies \varrho \using \textrm{(W)}\endprooftree, \wf\prooftree \beta \justifies \varrho}\ \using \textrm{(W)}\endprooftree} ,
znane z Definicji 1.2, tak więc mozna ją traktować jako literalne uogólnienie logiki klasycznej.
Zachowanie stałych i operacji logicznych w języku SQL rządzi się właśnie prawami logiki Heytinga-Kleene-Łukasiewicza.
Zupełnie inną logikę zaproponował Bochvar:
|
|
|
Czytelnik bez trudu rozpozna, że jest logika właściwa dla Przykładu #paskal, gdy programista wybierze długie wyliczenie wyrażeń logicznych. W sensie tej logiki stała oznacza awarię lub błąd.
Dalej mamy dośćegzotycznie wyglądającą logikę Sobocińskiego:
Parser nie mógł rozpoznać (nieznana funkcja „\conn”): {\displaystyle \conn{F_\land}00001101\ \ \ \ \conn{F_\lor}01011101\ \ \ \ {\begi\prooftree array \justifies |c|c| \using \textrm{(W)}\endprooftree\hline \multicolum\prooftree 2}{|c| \justifies F_\lnot \using \textrm{(W)}\endprooftree \\\hline\hline x&\\\hline 0&1\\\hline 1&0\\\hline{\frac12}&{\frac12}\\\hline\end{array}} }
Jednak i ona ma swój poważny sens. W niej stała logiczna oznacza ,,nie dotyczy lub ,,nieistotne. Wszyscy odruchowo wręcz stosujemy tę logikę przy okazji wypełniania różnych formularzy i kwestionariuszy. Odpowiadając na różne pytania sformułowane ,,tak lub nie w niektórych polach na odpowiedziumieszczamy ,,nie dotyczy a potem podpisujemy się pod dokumentem mimo ostrzeżenia ,,Świadomy/ma odpowiedzialności karnej za składanie fałszywych zeznań \dots oświadczam że wszystkie odpowiedzi w tym formularzu są zgodne ze stanem faktycznym. Po prostu stosujemy tu logikę Sobocińskiego, w której koniunkcja kilku wyrazów o wartości 1 i kilku wyrazów o wartości daje wynik 1. Na szczęście, organy kontrolne chyba też znają ten rachunek zdań i stosują go do oceny naszych zeznań\dots
Przechodząc do logik wyglądających na pierwszy rzut oka jeszcze niezwyklej, natrafiamy na logikę z nieprzemienną koniunkcją i alternatywą, która opisuje spójniki logiczne w Pascalu, wyliczane w sposób krótki:
Parser nie mógł rozpoznać (nieznana funkcja „\conn”): {\displaystyle \conn{F_\land}0000\prooftree \frac12}{\frac12 \justifies \frac12 \using \textrm{(W)}\endprooftree\ \ \ \conn{F_\lor}0\mbox{\rm\texttt<}\frac12}11\prooftree \frac12 \justifies \frac12 \using \textrm{(W)\mbox{\rm\texttt>}\endprooftree\ \ \ {\begi\prooftree array \justifies |c|c| \using \textrm{(W)}\endprooftree\hline \multicolum\prooftree 2}{|c| \justifies F_\lnot \using \textrm{(W)}\endprooftree \\\hline\hline x&\\\hline 0&1\\\hline 1&0\\\hline{\frac12}&{\frac12}\\\hline\end{array}} }
Dla każdego z powyższych rachunków logicznych zasadne i interesujące są pytania o to czym jest tautologia, o aksjomatyzacje i systemy dowodzenia. Tak samo jest z innymi logikami wielowartościowymi, bo Czytelnik juz zapewne zauważył, że o ile jest jedna sensowna logika dwuwartościowa i kilka, wzajemnie konkurencyjnych sensownych logik trójwartościowych, to zapewne przy wzroście liczby wartości logicznych, liczba sensownych logik też rośnie. Tytułem przykładu: można sobie bez trudu wyobrazić logikę, w której chcielibyśmy mieć jednocześnie dwie różne stałe odpowiadające ,,nie wiadomo i ,,nie dotyczy. Taka logika miałaby więc co najmniej cztery wartości logiczne. Jak łatwo się domyślić, ogromnym obszarem zastosowań logik wielowartościowych jest sztuczna inteligencja i reprezentacja wiedzy.
Logika intucjonistyczna też może być w pewnych sytuacjach traktowana jako logika wielowartościowa. W tym przypadku potrzeba tych wartości nieskończenie wiele. Odpowiednio staranne spojrzenie na Definicję Twierdzenie #zwawo pozwala w nim dojrzeć właśnie opis zbioru tautologii zdaniowej logiki intucjonistycznej jako zbioru tautologii logiki nieskończeniewielo\-war\-toś\-ciowej, w której zbiór wartości logicznych to rodzina podzbiorów otwartych . Trzeba jednak zaznaczyć, że podejście to zatraca pewne istotne intuicje.
Tw. Codda
Twierdzenie Codda łączy ze sobą świat logiki i świat relacyjnych baz danych. Zostanie ono sformułowane i dowiedzione w tym rozdziale. Orzeka ono, że logika pierwszego rzędu i algebra relacyjna, znana z wykładu baz danych, są wzajemnie na siebie przekładalne, przy założeniu dla logiki pierwszego rzędu tzw. semantyki dziedziny aktywnej.
Na potrzeby niniejszego rozważania zakładamy iustalamy skończoną sygnaturę złożoną wyłącznie z symboli relacji i stałych, jak to zwykle ma miejsce w bazach danych.
Definicja
Jak wiadomo, AR jest teoretycznym modelem języka zapytań do relacyjnych baz danych. Pokażemy teraz, że algebra relacyjna jest ściśle powiązana z logiką pierwszego rzędu, a we wszystkich sytuacjach naturalnych z punktu widzenia teorii baz danych, jest jej nawet równoważna.
Dla danej formuły logiki pierwszego rzędu takiej, że
Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle \fv{\alpha}=\{x_{i_1},\dots x_{i_n}\}}
, oraz struktury
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \mathfrak A=\<A,\dots\>}
określimy interpretację tej formuły w ,
oznaczaną Parser nie mógł rozpoznać (błąd składni): {\displaystyle \\\seml \alpha \semr}
, jak następuje:
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \\\seml \alpha \semr=\{\<a_1,\dots,a_n\>\in }
Intuicyjnie, Parser nie mógł rozpoznać (nieznana funkcja „\wf”): {\displaystyle \wf\alpha} to relacja definiowana przez formułę w danej strukturze.
Definicja
‘‘Aktywną dziedziną} struktury nazwiemy podzbiór Parser nie mógł rozpoznać (błąd składni): {\displaystyle ad(\mathfrak A\end{eqnarray*}sbseteq A} jejuniwersum, złożony z wszystkichelementów które są wartościami stałych z sygnatury bądź występują jako współrzędna w co najmniej jednej krotce należącej do interpretacji jakiegoś symbolu relacyjnego z sygnatury.
Jak łatwo zauważyć, interpretacje wszystkich wyrażeń algebry relacyjnej obliczane w są w istocie relacjami w dziedzinie aktywnej.
Inaczej jest w logice pierwszego rzędu:użycie negacji prowadzi natychmiast do formuł, których interpretacje zawierająelementy spoza aktywnej dziedziny.
Zatem w pełnej ogólności są formuły logiki pierwszego rzędu, dla
których nie istnieje wyrażenie algebry relacyjnej o tej samej
interpretacji w każdej strukturze.
Jednak gdy założymy, że Parser nie mógł rozpoznać (błąd składni): {\displaystyle A=ad(\mathfrak A\end{eqnarray*},} to sytuacja sie zmienia. Wyrazem tego jest poniższe twierdzenie.
Twierdzenie Codd
Dla każdego wyrażenia algebry relacyjnej istnieje taka formuła logiki pierwszego rzędu, że dla każdej struktury spełniającej Parser nie mógł rozpoznać (błąd składni): {\displaystyle A=ad(\mathfrak A\end{eqnarray*},} zachodzi Parser nie mógł rozpoznać (błąd składni): {\displaystyle \\\seml \alpha \semr=\\\seml E \semr.}
Dla każdej formuły logiki pierwszego rzędu istnieje wyrażenie algebry relacyjnej takie, że dla każdej struktury spełniającej Parser nie mógł rozpoznać (błąd składni): {\displaystyle A=ad(\mathfrak A\end{eqnarray*},} zachodzi Parser nie mógł rozpoznać (błąd składni): {\displaystyle \\\seml E \semr=\\\seml \alpha \semr.}
Dowód
Twierdzenie Codda jest już w pewnym stopniu częścią folkloru w teorii baz danych. Dziś wszyscy wiedzą, że algebra relacyjna to właściwie to samo, co logika pierwszego rzędu. W związku z tym, od wielu lat na konferencjach naukowych dotyczących teorii baz danych, systematycznie prezentowane są prace, których tematem jest logika pierwszego rzędu i nikt się już temu nie dziwi ani niczego nie musiuzasadniać.
W szczególności badania dotyczące gier Ehrenfeuchta oraz charakteryzacji obliczeniowych logiki pierwszego rzędu (w duchu twierdzeń B\"uchi i Fagina)są generalnie postrzegane jako wyniki należące do teorii baz danych.
Rozstrzygalność i nierozstrzygalność teorii
W tym rozdziale przedyskutujemy zagadnienie rozstrzygalności teorii matematycznych (rozumianych jako zbiorów zdań\end{eqnarray*}. Przykładem teorii nierozstrzygalnej jest arytmetyka Peano (Twierdzenie #przescieradlo\end{eqnarray*}. Przykład teorii rozstrzygalnej prezentujemy poniżej.
Twierdzenie
Teoria gęstych porządków liniowych które nie mająelementów maksymalnych ani minimalnych jest rozstrzygalna.
{{dowod||
Niech będzie klasą wszystkich gęstych porządków liniowych które nie mająelementów maksymalnych ani minimalnych. Z Wniosku [[#zupa} wiemy, że Parser nie mógł rozpoznać (błąd składni): {\displaystyle '''Th]](\mathcal{A'''\end{eqnarray*}} jest zupełna. Ponadto zauważmy, że Parser nie mógł rozpoznać (błąd składni): {\displaystyle '''Th}(\mathcal{A}\end{eqnarray*}=\{\alpha | \Delta\models\alpha\'''} , gdzie to następujący zbiór zdań: \begin{gather*} \forall x\forall y \ (x\leq y \land y\leq x\end{eqnarray*}\to x=y\\ \forall x\forall y \forall z\ (x\leq y \land y\leq z\end{eqnarray*}\to x\leq z\\ \forall x\forall y \ x\leq y \lor y\leq x\\ \forall x\exists y\ x< y\\ \forall x\exists y\ y< x\\ \forall x\forall y\ (x < y\end{eqnarray*}\to (\exists z\ x < z \land z<y) \end{gather*} gdzie </math>x<yParser nie mógł rozpoznać (błąd składni): {\displaystyle jest oczywistym skrótem notacyjnym dla formuły } x\leq y \land x\neq y.</math>
Na mocy twierdzenia o pełności \[\{\alpha | \Delta\models\alpha\}=\{\alpha | e_H\alpha\}.\] Pozostaje więc wykazać rozstrzygalność Parser nie mógł rozpoznać (błąd składni): {\displaystyle \{\alpha | e_H\alpha\}.}
Procedura rozstrzygająca jest następująca:
Dla danej formuły systematycznie generujemy wszystkie
dowody w systemie Hilberta,
poszukując wśród nich albo dowodu
albo dowodu Wobec zaobserwowanej
przez nas zupełności, jeden z nich w końcu się znajdzie. Jeśli będzie
to ten pierwszy, to proceduraudzieli wówczas odpowiedzi: ,,TAK,
a jeśli ten drugi, to ,,NIE.
}}
Przeprowadzony przez nas dowód jest całkiem prosty, ale prowadzi do
algorytmu rozstrzygającego, o którego złożoności nic rozsądnego
powiedzieć nieumiemy.
Istnieją bardziej zaawansowane technicznie metody dowodzenia rozstrzygalności, które pozwalają oszacować złożoność tworzonych przez nie algorytmów. Jednak możnaudowodnić, że żaden taki algorytm nie może mieć złożoności mniejszej niż {\sc Pspace}, o ile tylko działa poprawnie dla wszystkich formuł zawierających symbole równości.
Twierdzenie Stockmeyer
Następujący problem jest {\sc Pspace}-trudny: czy dane zdanie logiki pierwszego rzędu nad sygnaturą zawierającą wyłącznie symbol równości jest tautologią?
Wobec naszej wiedzy o klasach złożoności, wątpliwe jest zatem istnienie algorytmów o wielomianowej złożoności czasowej nawet dla teorii jeszcze prostszych niż ta rozpatrywana w poprzednim twierdzeniu.
Dowód
Szczególnie interesujące jest następujące twierdzenie:
Twierdzenie Tarski
Teoriauporządkowanego ciała liczb rzeczywistych, tj. teoria struktury \mbox{Parser nie mógł rozpoznać (błąd składni): {\displaystyle \<\RR,+,*,0,1,\leq\>} } jest rozstrzygalna.
Jej znaczenie dla informatyki zasadza się na fakcie, że ta teoria to w istocie znana wszystkim ze szkoły ‘‘geometria analityczna}. Poważną część algorytmicznych badań w zakresie geometrii obliczeniowej można streścić jakoulepszanie algorytmu rozstrzygającego teorię \mbox{Parser nie mógł rozpoznać (błąd składni): {\displaystyle \<\RR,+,*,0,1,\leq\>} } dla różnych szczególnych klas formuł, pojawiających się w praktyce.
sbsection*{Ćwiczenia}\begin{small}
Udowodnić, że logiki trójwartościowe Heytinga-Kleene-Łukasiewicza, Bochvara i Sobocińskiego spełniają prawa de Morgana.
Podać przykład zdania logiki pierwszego rzędu, które nie jest tautologią, ale jest prawdziwe we wszystkich strukturach takich, że Parser nie mógł rozpoznać (błąd składni): {\displaystyle A=ad(\mathfrak A\end{eqnarray*}.}
- Udowodnić, że zbiór tautologii logiki pierwszego rzędu nad
sygnaturą składającą się tylko z równości jest rozstrzygalny.
{\em Wskazówka:\/} Niech będzie formułą o randze kwantyfikatorowej . Udowodnić, że każde dwie struktury o mocy co najmniej nad powyższą sygnaturą są -elementarnie równoważne. Wywnioskować stąd, że aby sprawdzić, czy jest tautologią wystarczyć sprawdzić to w strukturach o mocy co najwyżej
- Zbadać złożoność obliczeniową algorytmu zaproponowanego powyżej
iudowodnić, że zbiór tautologii logiki pierwszego rzędu nad sygnaturą składającą się tylko z równości jest {\sc Pspace}-zupełny.
- Udowodnić, że zbiór tautologii logiki pierwszego
rzędu nad sygnaturą składającą się tylko z równości i skończenie wielu symboli stałych jest rozstrzygalny.
{\em Wskazówka:\/} Rozwiązać najpierw zadanie #rJ1, a stałe zasymulować jako relacjeunarne będące singletonami.
\end{small}