Logika dla informatyków/Logika w informatyce: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Aneczka (dyskusja | edycje)
m Zastępowanie tekstu – „.↵</math>” na „</math>”
 
(Nie pokazano 51 wersji utworzonych przez 4 użytkowników)
Linia 13: Linia 13:
===Zdaniowe logiki trójwartościowe===
===Zdaniowe logiki trójwartościowe===


Logika klasyczna, o której mowa w Wykładzie&nbsp;1, jest ''logiką  
Logika klasyczna, o której mowa w Wykładzie 1, jest ''logiką dwuwartościową''.   
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  
Pierwsze ''logiki trójwartościowe'' skonstruowali niezależnie od siebie polski logik Jan Łukasiewicz i amerykański (ale urodzony 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.  
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ą.  
\iffalse Podobnie, przypisanie
już dziś prawdy lub fałszu zdaniu "Obraz, który namaluję jutro będzie
piękny" przeczyłoby naszej zdolności do tworzenia, bo skoro już dziś
można ocenić to, co stworzymy dopiero jutro, to znaczy że nie będziemy
tworzyć, tylko odtwarzać coś już zdeterminowanego.  


Łukasiewicz wierzył głęboko w wolną wolę i twórczość, więcuważał, że  
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|11]].  
\fi 
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
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.  
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.  
 
{{przyklad||paskal|


{{przyklad|13.1|paskal|
Rozważmy dwie deklaracje funkcji w Pascalu:  
Rozważmy dwie deklaracje funkcji w Pascalu:  


  CREATE TABLE A  (
  id              INTEGER PRIMARY KEY auto_increment,
      ...
  valid            BOOLEAN,
      ...
  );


'''function''' f(x,y:boolean):boolean;
'''begin'''
...
end;
'''function''' g(x,y:boolean):boolean;
'''begin'''
...
end;
a następnie ichużycie 
'''function''' f(x,y:boolean):boolean;
'''begin'''
...


end;
Przy takiej deklaracji, tabela <math>\verb+A+</math> będzie mogła w kolumnie <math>\verb+valid+</math> zawierać ''trzy'' wartości logiczne: <math>\verb+TRUE+</math>, <math>\verb+FALSE+</math> i <math>\verb+NULL+</math>, a logika trójwartościowa objawi swoje działanie przy wykonaniu np. zapytania 


 
  SELECT *
'''function''' g(x,y:boolean):boolean;
  FROM A AS A1, A AS A2
 
  WHERE A1.valid '''and''' A2.valid
'''begin'''
 
...
 
end;
 
 
'''if''' f(x,y) '''and''' g(x,y) '''then''' ... '''else''' ...;
 
 
Wydaje się na pierwszy rzut oka, że to sytuacja rodem z logiki
klasycznej, ale nie: przecież i&nbsp;\verb+f+ i \verb+g+ mogą dać w wyniku
obliczenia wartości \verb+true+, \verb+false+ lub się zapętlić, które
to zdarzenie jest formą trzeciej wartości logicznej. Sposób, w jaki
się z nią obejdzie funkcja \verb+and+ zależy od wyboru programisty:
może on zastosować albo krótkie albo długie wyliczenie w swoim
programie.
}}  
}}  


{{przyklad|||
Inna sytuacja to tabela stworzona za pomocą następującej instrukcji SQL
w&nbsp;relacyjnej bazie danych:
'''function''' f(x,y:boolean):boolean;
'''begin'''
...
end;
'''function''' g(x,y:boolean):boolean;
'''begin'''
...
end;
'''if''' f(x,y) '''and''' g(x,y) '''then''' ... '''else''' ...;
CREATE TABLE A  (
id              INTEGER PRIMARY KEY auto_increment,
...
valid            BOOLEAN,
...
);
Przy takiej deklaracji, tabela \verb+A+ będzie mogła w kolumnie
\verb+valid+ zawierać ‘‘trzy} wartości logiczne: \verb+TRUE+,
\verb+FALSE+ i \verb+NULL+, a logika trójwartościowa objawi swoje
działanie przy wykonaniu np.\ zapytania 
'''function''' f(x,y:boolean):boolean;
'''begin'''
...
end;
'''function''' g(x,y:boolean):boolean;
'''begin'''
...
end;
'''if''' f(x,y) '''and''' g(x,y) '''then''' ... '''else''' ...;
CREATE TABLE A  (
id              INTEGER PRIMARY KEY auto_increment,
...
valid            BOOLEAN,
...
);
SELECT *
FROM A AS A1, A AS A2


WHERE A1.valid '''and''' A2.valid
{{definicja|13.3|zesiesmieliJ|
''Zbiór formuł zdaniowej logiki trójwartościowej'' to zbiór tych formuł zdaniowej logiki klasycznej (patrz Definicja [[#radamalpa|1.1]]), w których występują tylko  spójniki <math>\lnot,\lor</math> i <math>\land</math>.  


Wywołane w ten sposób zawężenie składni zrekompensujemy niezwłocznie po stronie semantyki.


Przez ''trójwartościowanie zdaniowe'' rozumiemy dowolną funkcję <math>\varrho:\small ZZ\to\{0,\frac12,1\}</math>, która zmiennym zdaniowym przypisuje wartości logiczne 0, <math>\frac12</math> 1.


}}
''Wartość formuły'' zdaniowej <math>\alpha</math> przy trójwartościowaniu <math>\varrho</math> oznaczamy przez <math>[[\alpha]]_\varrho</math> i określamy przez indukcję:


*<math>[[\prooftree p]]_\varrho =\varrho(p)</math>, gdy <math>p</math> jest symbolem zdaniowym;


{{definicja||zesiesmieliJ|
*<math>[[\alpha\lor\beta]]_\varrho = F_\land([[\alpha]]_\varrho, [[\beta]]_\varrho)</math>;


‘‘Zbiór formuł zdaniowej logiki trójwartościowej} to zbiór tych
*<math>[[\alpha\land\beta]]_\varrho = F_\lor([[\alpha]]_\varrho, [[\beta]]_\varrho)</math>;
formuł zdaniowej logiki klasycznej (patrz Definicja [[#radamalpa]], w
których występują tylko  spójniki <math>\lnot,\lor</math> i <math>\land.</math>
 
Wywołane w ten sposób zawężenie składni zrekompensujemy niezwłocznie
po stronie semantyki.
 
Przez ''trójwartościowanie zdaniowe\/'' rozumiemy dowolną
funkcję&nbsp;<math>\varrho:\\mbox{\small ZZ}\to\{0,\frac12,1\}</math>,
która zmiennym zdaniowym przypisuje wartości logiczne 0,
<math>\frac12</math>&nbsp;i&nbsp;1.
 
''Wartość formuły\/'' zdaniowej <math>\alpha</math> przy
trójwartościowaniu&nbsp;<math>\varrho</math> oznaczamy przez <math>\wfz\alpha\varrho</math> i
określamy przez indukcję:
*<math>\wf\prooftree p \justifies \varrho \using \textrm{(W\end{eqnarray*}}\endprooftree=\varrho(p\end{eqnarray*}</math>, gdy <math>p</math> jest symbolem zdaniowym;
*<math>\wfz{\neg\alpha}\varrho=F_\lnot(\wfz{\alpha}\varrho\end{eqnarray*}</math>;
*</math>\wf\prooftree \alpha\lor\beta \justifies \varrho \using \textrm{(W\end{eqnarray*}}\endprooftree=F_\land(\wf\prooftree \alpha \justifies \varrho \using \textrm{(W\end{eqnarray*}}\endprooftree,
\wf\prooftree \beta \justifies \varrho \using \textrm{(W\end{eqnarray*}}\endprooftree\end{eqnarray*}</math>;
*</math>\wf\prooftree \alpha\land\beta \justifies \varrho \using \textrm{(W\end{eqnarray*}}\endprooftree=F_\lor(\wf\prooftree \alpha \justifies \varrho \using \textrm{(W\end{eqnarray*}}\endprooftree,  
\wf\prooftree \beta \justifies \varrho \using \textrm{(W\end{eqnarray*}}\endprooftree\end{eqnarray*}</math>;  
*<math>\wf\prooftree \lnot\alpha \justifies \varrho \using \textrm{(W\end{eqnarray*}}\endprooftree=F_\lnot(\wfz\alpha\varrho\end{eqnarray*}.</math>


*<math>[[\lnot\alpha]]_\varrho  = F_\lnot([[\alpha]]_\varrho)</math>.
}}  
}}  




Różne wybory funkcji  
Różne wybory funkcji <math>F_\lor,F_\land:\{0,{\frac12},1\}\times\{0,{\frac12},1\}\to\{0,{\frac12},1\}</math>  
<math>F_\lor,F_\land:\{0,{\frac12},1\}\times\{0,{\frac12},1\}\to\{0,{\frac12},1\}</math>  
i <math>F_\lnot:\{0,{\frac12},1\}\to\{0,{\frac12},1\}</math> prowadzą do różnych  
i <math>F_\lnot:\{0,{\frac12},1\}\to\{0,{\frac12},1\}</math> prowadzą do różnych  
logik trójwartościowych.  
logik trójwartościowych.  


Zaczniemy od logiki najstarszej, zwanej dziś logiką  
Zaczniemy od logiki najstarszej, zwanej dziś logiką Heytinga-Kleene-Łukasiewicza:  
Heytinga-Kleene-Łukasiewicza:  


<span id=""/> <math> \conn{F_\land}0000\mbox{\rm\texttt<}\frac12\mbox{\rm\texttt>}\mbox{\rm\texttt<}\frac12\mbox{\rm\texttt>}\ \ 
<table CELLPADDING=10 border=0 align=center><tr><td>
<table CELLPADDING=6 border=1 align=center>
<tr>
<td colspan=2 align=center><math>F_\land (x,y)</math> </td>
</tr>
<tr><td><math>x</math> \ <math>y</math></td><td>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td></tr>
<tr>
<td align=center>0<br>1<br><math>\frac{1}{2}</math></td>
<td>0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0<br>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math><br>0&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math>&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td>
</tr>
</table>
</td><td>
<table CELLPADDING=6 border=1 align=center>
<tr>
<td colspan=2 align=center><math>F_\lor (x,y)</math> </td>
</tr>
<tr><td><math>x</math> \ <math>y</math></td><td>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td></tr>
<tr>
<td align=center>0<br>1<br><math>\frac{1}{2}</math></td>
<td>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math><br>1&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;1<br><math>\frac{1}{2}</math>&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td>
</tr>
</table>
</td><td>
<table CELLPADDING=6 border=1 align=center>
<tr>
<td colspan=2 align=center><math>F_\lnot</math> </td>
</tr>
<tr><td>&nbsp;<math>x</math>&nbsp;</td><td>&nbsp;&nbsp;&nbsp;</td></tr>
<tr>
<td align=center>0<br>1<br><math>\frac{1}{2}</math></td>
<td>1<br>0<br><math>\frac{1}{2}</math></td>
</tr>
</table>
</td></tr></table>


\conn{F_\lor}0\mbox{\rm\texttt<}\frac12\mbox{\rm\texttt>}11\mbox{\rm\texttt<}\frac12\mbox{\rm\texttt>}1\ \ \ 
Jest to logika niewątpliwie nadająca się do rozwiązania zadania, które sobie Łukasiewicz postawił. Sposób traktowania wartości logicznej <math>\frac{1}{2}</math> jest taki, że należy ją rozumieć jako "jeszcze nie wiadomo". 
{\begi\prooftree array \justifies |c|c| \using \textrm{(W\end{eqnarray*}}\endprooftree\hline 
\multicolum\prooftree 2}{|c| \justifies F_\lnot \using \textrm{(W\end{eqnarray*}}\endprooftree \\\hline\hline x&\\\hline 0&1\\\hline
1&0\\\hline{\frac12}&{\frac12}\\\hline\end{array}}
</math>  


Warto zauważyć, że w  przypadku tej logiki  zachodzą równości 
*<math>[[\neg\alpha]]_\varrho=1-[[\alpha]]_\varrho</math>,


Jest to logika niewątpliwie nadająca się do rozwiązania zadania, które
*<math>[[\alpha\vee\beta]]_\varrho=\max\{[[\alpha]]_\varrho, [[\beta]]_\varrho\}</math>,  
sobie Łukasiewicz postawił. Sposób traktowania wartości logicznej
<math>{\frac12}</math> jest taki, że należy ją rozumieć jako ,,jeszcze nie
wiadomo''. 


Warto zauważyć, że w  przypadku tej logiki  zachodzą równości 
*<math>[[\alpha\wedge\beta]]_\varrho=\min\{[[\alpha]]_\varrho, [[\beta]]_\varrho\}</math>,  
*<math>\wfz{\neg\alpha}\varrho=1-\wfz{\alpha}\varrho</math>,
*</math>\wf\prooftree \alpha\vee\beta \justifies \varrho \using \textrm{(W\end{eqnarray*}}\endprooftree=\max\{\wf\prooftree \alpha \justifies \varrho \using \textrm{(W\end{eqnarray*}}\endprooftree,
\wf\prooftree \beta \justifies \varrho}\ \using \textrm{(W\end{eqnarray*}}\endprooftree</math>,
*</math>\wf\prooftree \alpha\wedge\beta \justifies \varrho \using \textrm{(W\end{eqnarray*}}\endprooftree=\min\{\wf\prooftree \alpha \justifies \varrho \using \textrm{(W\end{eqnarray*}}\endprooftree,  
\wf\prooftree \beta \justifies \varrho}\ \using \textrm{(W\end{eqnarray*}}\endprooftree</math>,  


znane z Definicji [[#zesiesmieli]], tak więc mozna ją traktować jako  
znane z Definicji [[#zesiesmieli|1.2]], tak więc mozna ją traktować jako literalne uogólnienie logiki klasycznej.  
literalneuogólnienie logiki klasycznej.  


Zachowanie stałych i operacji logicznych w języku SQL rządzi się  
Zachowanie stałych i operacji logicznych w języku SQL rządzi się właśnie prawami logiki Heytinga-Kleene-Łukasiewicza.  
właśnie prawami logiki Heytinga-Kleene-Łukasiewicza.  




Zupełnie inną logikę zaproponował Bochvar:  
Zupełnie inną logikę zaproponował Bochvar:  


<span id=""/> <math> \conn{F_\land}0\mbox{\rm\texttt<}\frac12}0\prooftree \frac12}{\frac12 \justifies \frac12 \using \textrm{(W\end{eqnarray*}\mbox{\rm\texttt>}\endprooftree\ \ \
<table CELLPADDING=10 border=0 align=center><tr><td>
 
<table CELLPADDING=6 border=1 align=center>
\conn{F_\lor}0\mbox{\rm\texttt<}\frac12}1\prooftree \frac12}{\frac12 \justifies \frac12 \using \textrm{(W\end{eqnarray*}\mbox{\rm\texttt>}\endprooftree\ \ \
<tr>
{\begi\prooftree array \justifies |c|c| \using \textrm{(W\end{eqnarray*}}\endprooftree\hline 
<td colspan=2 align=center><math>F_\land (x,y)</math> </td>
\multicolum\prooftree 2}{|c| \justifies F_\lnot \using \textrm{(W\end{eqnarray*}}\endprooftree \\\hline\hline x&\\\hline 0&1\\\hline
</tr>
1&0\\\hline{\frac12}&{\frac12}\\\hline\end{array}}  
<tr><td><math>x</math> \ <math>y</math></td><td>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td></tr>
</math>  
<tr>
<td align=center>0<br>1<br><math>\frac{1}{2}</math></td>
<td>0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math><br>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math><br><math>\frac{1}{2}</math>&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math>&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td>
</tr>
</table>
</td><td>
<table CELLPADDING=6 border=1 align=center>
<tr>
<td colspan=2 align=center><math>F_\lor (x,y)</math> </td>
</tr>
<tr><td><math>x</math> \ <math>y</math></td><td>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td></tr>
<tr>
<td align=center>0<br>1<br><math>\frac{1}{2}</math></td>
<td>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math><br>1&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math><br><math>\frac{1}{2}</math>&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math>&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td>
</tr>
</table>
</td><td>
<table CELLPADDING=6 border=1 align=center>
<tr>
<td colspan=2 align=center><math>F_\lnot</math> </td>
</tr>
<tr><td>&nbsp;<math>x</math>&nbsp;</td><td>&nbsp;&nbsp;&nbsp;</td></tr>
<tr>
<td align=center>0<br>1<br><math>\frac{1}{2}</math></td>
<td>1<br>0<br><math>\frac{1}{2}</math></td>
</tr>
</table>
</td></tr></table>


Czytelnik bez trudu rozpozna, że jest logika właściwa dla Przykładu  
Czytelnik bez trudu rozpozna, że jest logika właściwa dla Przykładu  
[[#paskal]], gdy programista wybierze długie wyliczenie wyrażeń  
[[#paskal|13.1]], gdy programista wybierze długie wyliczenie wyrażeń  
logicznych. W sensie tej logiki stała <math>{\frac12}</math> oznacza awarię lub  
logicznych. W sensie tej logiki stała <math>{\frac12}</math> oznacza awarię lub  
błąd.  
błąd.  


Dalej mamy dośćegzotycznie wyglądającą logikę Sobocińskiego:  
Dalej mamy dość egzotycznie wyglądającą logikę Sobocińskiego:  
 
 
<span id=""/> <math> \conn{F_\land}00001101\ \ \ \ \conn{F_\lor}01011101\ \ \ \ 
 
{\begi\prooftree array \justifies |c|c| \using \textrm{(W\end{eqnarray*}}\endprooftree\hline 
\multicolum\prooftree 2}{|c| \justifies F_\lnot \using \textrm{(W\end{eqnarray*}}\endprooftree \\\hline\hline x&\\\hline 0&1\\\hline
1&0\\\hline{\frac12}&{\frac12}\\\hline\end{array}}
</math>


Jednak i ona ma swój poważny sens. W niej stała logiczna <math>{\frac12}</math>  
<table CELLPADDING=10 border=0 align=center><tr><td>
oznacza ,,nie dotyczy'' lub ,,nieistotne''.  Wszyscy odruchowo wręcz
<table CELLPADDING=6 border=1 align=center>
stosujemy tę logikę przy okazji wypełniania różnych formularzy i
<tr>
kwestionariuszy. Odpowiadając na różne pytania sformułowane ,,tak lub
<td colspan=2 align=center><math>F_\land (x,y)</math> </td>
nie'' w niektórych polach na odpowiedziumieszczamy ,,nie dotyczy'' a
</tr>
potem podpisujemy się pod dokumentem mimo ostrzeżenia ,,Świadomy/ma
<tr><td><math>x</math> \ <math>y</math></td><td>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td></tr>
odpowiedzialności karnej za składanie fałszywych zeznań \dots
<tr>
oświadczam że wszystkie odpowiedzi w tym formularzu są zgodne ze
<td align=center>0<br>1<br><math>\frac{1}{2}</math></td>
stanem faktycznym.'' Po prostu stosujemy tu logikę Sobocińskiego, w
<td>0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0<br>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;1<br>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td>
której koniunkcja kilku wyrazów o wartości 1 i kilku wyrazów o
</tr>
wartości <math>{\frac12}</math> daje wynik 1. Na szczęście, organy kontrolne
</table>
chyba też znają ten rachunek zdań i stosują go do oceny naszych
</td><td>
zeznań\dots
<table CELLPADDING=6 border=1 align=center>
<tr>
<td colspan=2 align=center><math>F_\lor (x,y)</math> </td>
</tr>
<tr><td><math>x</math> \ <math>y</math></td><td>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td></tr>
<tr>
<td align=center>0<br>1<br><math>\frac{1}{2}</math></td>
<td>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;0<br>1&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;1<br>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td>
</tr>
</table>
</td><td>
<table CELLPADDING=6 border=1 align=center>
<tr>
<td colspan=2 align=center><math>F_\lnot</math> </td>
</tr>
<tr><td>&nbsp;<math>x</math>&nbsp;</td><td>&nbsp;&nbsp;&nbsp;</td></tr>
<tr>
<td align=center>0<br>1<br><math>\frac{1}{2}</math></td>
<td>1<br>0<br><math>\frac{1}{2}</math></td>
</tr>
</table>
</td></tr></table>


Przechodząc do logik wyglądających na pierwszy rzut oka jeszcze
Jednak i ona ma swój poważny sens. W niej stała logiczna <math>\frac{1}{2}</math> oznacza "nie dotyczy" lub "nieistotne".  Wszyscy odruchowo wręcz stosujemy tę logikę przy okazji wypełniania różnych formularzy i
niezwyklej, natrafiamy na logikę z nieprzemienną koniunkcją i
kwestionariuszy. Odpowiadając na pytania sformułowane "tak lub nie" w niektórych polach na odpowiedzi umieszczamy "nie dotyczy" a potem podpisujemy się pod dokumentem mimo ostrzeżenia "Świadomy/ma odpowiedzialności karnej za składanie fałszywych zeznań <math>\dots</math> 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 <math>\frac{1}{2}</math> daje wynik 1. Na szczęście, organy kontrolne chyba też znają ten rachunek zdań i stosują go do oceny naszych
alternatywą, która opisuje spójniki logiczne w Pascalu, wyliczane w
zeznań <math>\dots</math>
sposób krótki:


<span id=""/> <math> \conn{F_\land}0000\prooftree \frac12}{\frac12 \justifies \frac12 \using \textrm{(W\end{eqnarray*}}\endprooftree\ \ \
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:


\conn{F_\lor}0\mbox{\rm\texttt<}\frac12}11\prooftree \frac12 \justifies \frac12 \using \textrm{(W\end{eqnarray*}\mbox{\rm\texttt>}\endprooftree\ \ \
<table CELLPADDING=10 border=0 align=center><tr><td>
{\begi\prooftree array \justifies |c|c| \using \textrm{(W\end{eqnarray*}}\endprooftree\hline 
<table CELLPADDING=6 border=1 align=center>
\multicolum\prooftree 2}{|c| \justifies F_\lnot \using \textrm{(W\end{eqnarray*}}\endprooftree \\\hline\hline x&\\\hline 0&1\\\hline
<tr>
1&0\\\hline{\frac12}&{\frac12}\\\hline\end{array}}  
<td colspan=2 align=center><math>F_\land (x,y)</math> </td>
</math>  
</tr>
<tr><td><math>x</math> \ <math>y</math></td><td>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td></tr>
<tr>
<td align=center>0<br>1<br><math>\frac{1}{2}</math></td>
<td>0&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;0<br>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math><br><math>\frac{1}{2}</math>&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math>&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td>
</tr>
</table>
</td><td>
<table CELLPADDING=6 border=1 align=center>
<tr>
<td colspan=2 align=center><math>F_\lor (x,y)</math> </td>
</tr>
<tr><td><math>x</math> \ <math>y</math></td><td>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td></tr>
<tr>
<td align=center>0<br>1<br><math>\frac{1}{2}</math></td>
<td>0&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math><br>1&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;1<br><math>\frac{1}{2}</math>&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math>&nbsp;&nbsp;&nbsp;<math>\frac{1}{2}</math></td>
</tr>
</table>
</td><td>
<table CELLPADDING=6 border=1 align=center>
<tr>
<td colspan=2 align=center><math>F_\lnot</math> </td>
</tr>
<tr><td>&nbsp;<math>x</math>&nbsp;</td><td>&nbsp;&nbsp;&nbsp;</td></tr>
<tr>
<td align=center>0<br>1<br><math>\frac{1}{2}</math></td>
<td>1<br>0<br><math>\frac{1}{2}</math></td>
</tr>
</table>
</td></tr></table>


Dla każdego z powyższych rachunków logicznych zasadne i interesujące  
Dla każdego z powyższych rachunków logicznych zasadne i interesujące  
Linia 304: Linia 241:
Czytelnik juz zapewne zauważył, że o ile jest jedna sensowna logika  
Czytelnik juz zapewne zauważył, że o ile jest jedna sensowna logika  
dwuwartościowa i kilka, wzajemnie konkurencyjnych sensownych logik  
dwuwartościowa i kilka, wzajemnie konkurencyjnych sensownych logik  
trójwartościowych, to zapewne przy wzroście liczby wartości  
trójwartościowych, to przy wzroście liczby wartości  
logicznych, liczba sensownych logik też rośnie. Tytułem przykładu:  
logicznych, liczba sensownych logik musi rosnąć. Tytułem przykładu:  
można sobie bez trudu wyobrazić logikę, w której chcielibyśmy mieć  
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  
jednocześnie dwie różne stałe odpowiadające ,,nie wiadomo'' i ,,nie  
Linia 314: Linia 251:
Logika intucjonistyczna też może być w pewnych sytuacjach traktowana  
Logika intucjonistyczna też może być w pewnych sytuacjach traktowana  
jako logika wielowartościowa. W tym przypadku potrzeba tych wartości  
jako logika wielowartościowa. W tym przypadku potrzeba tych wartości  
nieskończenie wiele. Odpowiednio staranne spojrzenie na Definicję
nieskończenie wiele. Odpowiednio staranne spojrzenie na  
Twierdzenie [[#zwawo]] pozwala w nim dojrzeć właśnie opis zbioru  
Twierdzenie [[#zwawo|11.5]] pozwala w nim dojrzeć właśnie opis zbioru  
tautologii zdaniowej logiki intucjonistycznej jako zbioru tautologii  
tautologii zdaniowej logiki intucjonistycznej jako zbioru tautologii  
logiki nieskończeniewielo\-war\-toś\-ciowej, w której zbiór wartości  
logiki nieskończeniewielowartościowej, w której zbiór wartości  
logicznych to rodzina podzbiorów otwartych <math>\mathbb{R}</math>.  Trzeba  
logicznych to rodzina podzbiorów otwartych <math>\mathbb{R}</math>.  Trzeba  
jednak zaznaczyć, że podejście to zatraca pewne istotne intuicje.
jednak zaznaczyć, że podejście to zatraca pewne istotne intuicje.
Linia 323: Linia 260:
===Tw. Codda===
===Tw. Codda===


Twierdzenie Codda łączy ze sobą świat logiki i świat relacyjnych baz  
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.  
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ą  
Na potrzeby niniejszego rozważania zakładamy iustalamy skończoną sygnaturę <math>\Sigma</math>, złożoną wyłącznie z symboli relacji i stałych, jak to zwykle ma miejsce w bazach danych.  
sygnaturę <math>\Sigma,</math> złożoną wyłącznie z symboli relacji i stałych, jak  
to zwykle ma miejsce w bazach danych.  




{{definicja|||  
{{definicja|13.4||  
Tytułem przypomnienia (Czytelnik powinien znać algebrę relacyjną z wykładu baz danych)i dla ustalenia notacji, definiujemy ''składnię algebry relacyjnej'' AR nad <math>\Sigma</math>.
*Każdy symbol relacji <math>n</math>-argumentowej z <math>\Sigma</math> z wyjątkiem równości jest <math>n</math>-argumentowym wyrażeniem AR.


Tytułem przypomnienia (Czytelnik powinien znać algebrę relacyjną z
*Jeśli <math>E</math> i <math>F</math> są <math>n</math>-argumentowymi wyrażeniami AR, to <math>E\cup F, E-F</math> też  są <math>n</math>-argumentowymi wyrażeniami AR.
wykładu baz danych)i&nbsp;dla&nbsp;ustalenia notacji, definiujemy
‘‘składnię algebry relacyjnej} AR nad&nbsp;<math>\Sigma</math>.
*Każdy symbol relacji <math>n</math>-argumentowej z <math>\Sigma</math> z wyjątkiem
równości jest <math>n</math>-argumentowym wyrażeniem AR.
*Jeśli </math>E<math> i </math>F<math> są </math>n<math>-argumentowymi wyrażeniami AR, to </math>E\cup
F, E-F</math> też  są <math>n</math>-argumentowymi wyrażeniami AR.
*Jeśli </math>E<math> i </math>F<math> są </math>n<math>-argumentowymi wyrażeniami AR, to </math>E\cup  
F, E-F</math> też  są <math>n</math>-argumentowymi wyrażeniami AR.  


*Jeśli <math>E</math> jest <math>n</math>-argumentowym wyrażeniem AR oraz
*Jeśli <math>E</math> i <math>F</math> <math>n</math>-argumentowymi wyrażeniami AR, to <math>E\cup F, E-F</math> też  są <math>n</math>-argumentowymi wyrażeniami AR.  
<math>i_1,\dots,i_k</math> jest ciągiem różnych ale niekoniecznie wszystkich
elementów zbioru <math>\{1,\dots,n\}</math>, to <math>\pi_{i_1,\dots,i_k} E</math> jest
<math>k</math>-argumentowym wyrażeniem AR. W szczególności ciąg ten może być
pusty, zaś  <math>\pi E</math> jest wyrażeniem \mbox{0-argumentowym}.
*Jeśli <math>E</math> jest <math>n</math>-argumentowym, zaś <math>F</math> jest <math>m</math>-argumentowym
wyrażeniem AR, to <math>E\times F</math> jest <math>n+m</math>-argumentowym wyrażeniem AR.
*Jeśli <math>E</math> jest <math>n</math>-argumentowym wyrażeniem AR oraz <math>\theta</math> jest
zbiorem równości postaci `<math>i=j</math>' lub `<math>i=c</math>', gdzie
<math>i,j\in\{1,\dots,n\}</math> zaś <math>c</math> należy do zbioru symboli stałych
z&nbsp;sygnatury <math>\Sigma,</math> to <math>\sigma_\theta E</math> jest <math>n</math>-argumentowym
wyrażeniem AR.  


*Jeśli <math>E</math> jest <math>n</math>-argumentowym wyrażeniem AR oraz <math>i_1,\dots,i_k</math> jest ciągiem różnych ale niekoniecznie wszystkich elementów zbioru <math>\{1,\dots,n\}</math>, to <math>\pi_{i_1,\dots,i_k} E</math> jest <math>k</math>-argumentowym wyrażeniem AR. W szczególności ciąg ten może być pusty, zaś  <math>\pi E</math> jest wyrażeniem <math>\mbox{0-argumentowym}</math>.


Semantyka algebry relacyjnej
*Jeśli <math>E</math> jest <math>n</math>-argumentowym, zaś <math>F</math> jest <math>m</math>-argumentowym wyrażeniem AR, to <math>E\times F</math> jest <math>n+m</math>-argumentowym wyrażeniem AR.  
jest następująca: dla danej struktury
<math>\mathfrak A</math> nad <math>\Sigma,</math> każdemu <math>n</math>-ar\-gu\-men\-to\-we\-mu wyrażeniu <math>E</math> algebry
relacyjnej  przypisujemy <math>n</math>-argumentową relację <math>\\\seml E \semr</math> w&nbsp;<math>A.</math>  
Definicja oczywiście przebiega indukcyjnie względem budowy <math>E.</math>


*Jeśli <math>R</math> należy do <math>\Sigma,</math> to <math>\\\seml R \semr=R^\mathfrak A.</math>  
*Jeśli <math>E</math> jest <math>n</math>-argumentowym wyrażeniem AR oraz <math>\theta</math> jest zbiorem równości postaci '<math>i=j</math>' lub '<math>i=c</math>', gdzie <math>i,j\in\{1,\dots,n\}</math> zaś <math>c</math> zależy do zbioru symboli stałych z sygnatury <math>\Sigma</math>, to <math>\sigma_\theta E</math> jest <math>n</math>-argumentowym wyrażeniem AR.
*<math>\\\seml E\cup F \semr=\\\seml E \semr\cup\\\seml F \semr</math> oraz  <math>\\\seml E-F \semr=\\\seml E \semr-\\\seml F \semr</math>.
*</math>\\\seml \pi_{i_1,\dots,i_k \semr
E}=\{\<a_{i_1},\dots,a_{i_k}\>&nbsp;|&nbsp;\<a_1,\dots,a_k\>\in\\\seml E}\ \semr.</math>  
*</math>\\\seml E\times F \semr=\\\seml E \semr\times\\\seml F \semr=
\{\<a_1,\dots,a_n,b_1\dots,b_m\>&nbsp;|&nbsp;\<a_1,\dots,a_n\>\in\\\seml E \semr\text{ i
%%oraz 
}\<b_1\dots,b_m\>\in\\\seml F}\ \semr</math>.
*</math>\\\seml \sigma_\theta E \semr=\{\<a_1,\dots,a_n\>\in\\\seml E \semr&nbsp;|&nbsp;
a_i=a_j,\ \mbox{gdy}\ (i=j\end{eqnarray*}\in\theta\ \mbox{oraz}\ a_i=c^\mathfrak A
,\ \mbox{gdy}\ (i=c\end{eqnarray*}\in\theta\}.</math>  




Warto zauważyć, że <math>\\\seml \pi E}=\{\<\>\ \semr,</math> czyli jet zbiorem złożonym z
Semantyka algebry relacyjnej jest następująca: dla danej struktury <math>\mathfrak A</math> nad <math>\Sigma</math>, każdemu <math>n</math>-argumentowemu wyrażeniu <math>E</math> algebry relacyjnej  przypisujemy <math>n</math>-argumentową relację <math>[[E]]</math> w <math>A</math>.
ciągu pustego, gdy <math>\wf E</math> jest niepusty, oraz jest pusty w przeciwnym
wypadku. Z kolei <math>\\\seml \sigma_\emptyset E \semr=\\\seml E \semr.</math>  
Definicja oczywiście przebiega indukcyjnie względem budowy <math>E</math>.
}}


Jak wiadomo, AR jest teoretycznym modelem języka zapytań do  
*Jeśli <math>R</math> należy do <math>\Sigma</math>, to <math>[[R]]=R^\mathfrak A</math>.  
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.


*<math>[[E\cupF]]=[[E]]\cup[[F]]</math> oraz  <math>[[E-F]]=[[E]]-[[F]]</math>.


Dla danej formuły <math>\alpha</math> logiki pierwszego rzędu takiej, że
*<math>[[\pi_{i_1,\dots,i_k} E]]=\{<a_{i_1},\dots,a_{i_k}> | <a_1,\dots,a_k>\in[[E]]\}</math>.
<math>\fv{\alpha}=\{x_{i_1},\dots x_{i_n}\}</math>, oraz struktury
<math>\mathfrak A=\<A,\dots\></math> określimy interpretację tej formuły w <math>\mathfrak A</math>,  
oznaczaną <math>\\\seml \alpha \semr</math>, jak następuje:


<span id=""/> <math> \\\seml \alpha \semr=\{\<a_1,\dots,a_n\>\in  
*<math>[[E\times F]]=[[E]]\times[[F]]=  
\{<a_1,\dots,a_n,b_1\dots,b_m> | <a_1,\dots,a_n>\in [[E]] i <b_1\dots,b_m>\in [[F]]\}</math>.


</math>  
*<math>[[\sigma_\theta E]]=\{<a_1,\dots,a_n>\in [[E]] | a_i=a_j,\mbox{gdy} (i=j)\in\theta\ \mbox{oraz}\ a_i=c^\mathfrak A , \mbox{gdy}\ (i=c)\in\theta\}</math>.


Intuicyjnie, <math>\wf\alpha</math> to relacja definiowana przez formułę <math>\alpha</math>  
Warto zauważyć, że <math>[[\pi E]]=\{<>\}</math> czyli jest zbiorem złożonym z ciągu pustego, gdy <math>[[E]]</math> jest niepusty, oraz jest pusty w przeciwnym wypadku. Z kolei <math>[[\sigma_\emptyset E]]=[[E]]</math>  
w danej strukturze.
}}


{{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. 


‘‘Aktywną dziedziną} struktury <math>\mathfrak A</math> nazwiemy podzbiór
Dla danej formuły <math>\alpha</math> logiki pierwszego rzędu takiej, że <math>FV(\alpha)=\{x_{i_1},\dots x_{i_n}\}</math>, oraz struktury <math>\mathfrak A=<A,\dots></math> określimy interpretację tej formuły w <math>\mathfrak A</math>, oznaczaną <math>[[\alpha]]</math>, jak następuje:
<math>ad(\mathfrak A\end{eqnarray*}sbseteq A</math> jejuniwersum, złożony z wszystkichelementów
które są wartościami stałych z&nbsp;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ć,
<span id=""/> <math>[[\alpha]]=\{<a_1,\dots,a_n>\in A^n | (\mathfrak A, x_i_1 :a_1, \ldots, x_i_n : a_n)\models \alpha\}</math>  
interpretacje wszystkich wyrażeń algebry relacyjnej obliczane w
<math>\mathfrak A</math> są w&nbsp;istocie relacjami w dziedzinie aktywnej.


Inaczej jest w logice pierwszego rzędu:użycie negacji prowadzi
Intuicyjnie, <math>[[\alpha]]</math> to relacja definiowana przez formułę <math>\alpha</math> w danej strukturze.  
natychmiast do formuł, których interpretacje zawierająelementy spoza
aktywnej dziedziny.


{{definicja|13.5||
''Aktywną dziedziną'' struktury <math>\mathfrak A</math> nazwiemy podzbiór <math>ad(\mathfrak A)\subseteq A</math> jej uniwersum, złożony z wszystkich elementó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. 
}}


Zatem w pełnej ogólności są formuły logiki pierwszego rzędu, dla
Jak łatwo zauważyć, interpretacje wszystkich wyrażeń algebry relacyjnej obliczane w <math>\mathfrak A</math> są w istocie relacjami w dziedzinie aktywnej.  
których nie istnieje wyrażenie algebry relacyjnej o tej samej
interpretacji w każdej strukturze.  


Jednak gdy założymy, że <math>A=ad(\mathfrak A\end{eqnarray*},</math> to sytuacja sie
Inaczej jest w logice pierwszego rzędu: użycie negacji prowadzi natychmiast do formuł, których interpretacje zawierająelementy spoza aktywnej dziedziny.  
zmienia. Wyrazem tego jest poniższe twierdzenie.


{{twierdzenie|Codd||
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 <math>A=ad(\mathfrak A)</math>, to sytuacja sie zmienia. Wyrazem tego jest poniższe twierdzenie.  
Dla każdego wyrażenia <math>E</math> algebry relacyjnej istnieje taka formuła
<math>\alpha_E</math> logiki pierwszego rzędu, że dla każdej struktury <math>\mathfrak A</math>
spełniającej <math>A=ad(\mathfrak A\end{eqnarray*},</math> zachodzi <math>\\\seml \alpha \semr=\\\seml E \semr.</math>
#
Dla każdej formuły <math>\alpha</math> logiki pierwszego rzędu istnieje wyrażenie
<math>E_\alpha</math> algebry relacyjnej takie, że dla każdej struktury <math>\mathfrak A</math>
spełniającej <math>A=ad(\mathfrak A\end{eqnarray*},</math> zachodzi <math>\\\seml E \semr=\\\seml \alpha \semr.</math>


{{twierdzenie|13.6 (Codd)|codd|
#Dla każdego wyrażenia <math>E</math> algebry relacyjnej istnieje taka formuła <math>\alpha_E</math> logiki pierwszego rzędu, że dla każdej struktury <math>\mathfrak A</math> spełniającej <math>A=ad(\mathfrak A)</math>, zachodzi <math>[[\alpha]]=[[E]]</math>.
#Dla każdej formuły <math>\alpha</math> logiki pierwszego rzędu istnieje wyrażenie <math>E_\alpha</math> algebry relacyjnej takie, że dla każdej struktury <math>\mathfrak A</math> spełniającej <math>A=ad(\mathfrak A)</math>, zachodzi <math>[[E]]=[[\alpha]]</math>.
}}  
}}  


{{dowod||  
{{dowod|||
Obu części twierdzenia będziemy dowodzić przez indukcję ze względu na budowę: w pierwszym punkcie wyrażenia <math>E</math>, a w drugim formuły <math>\alpha</math>.


Obu części twierdzenia będziemy dowodzić przez indukcję ze względu na
Przy konstrukcji <math>\alpha_E</math> będziemy dbać o to, żeby <math>FV{\alpha_E}=\{x_1,\dots,x_n\}</math>, gdzie <math>n</math> to liczba argumentów <math>E</math>.
budowę: w pierwszym punkcie wyrażenia <math>E</math>, a w drugim formuły
<math>\alpha.</math>  


Przy konstrukcji <math>\alpha_E</math> będziemy dbać o to, żeby
Gdy <math>E</math> jest <math>n</math>-argumentowym symbolem relacyjnym <math>R</math>, to <math>\alpha_E</math> ma postać <math>R(x_1,\dots,x_n)</math>,  a prawdziwość tezy jest oczywista.
<math>\fv{\alpha_E}=\{x_1,\dots,x_n\},</math> gdzie <math>n</math> to liczba argumentów <math>E.</math>  


Gdy <math>E</math> jest <math>n</math>-argumentowym symbolem relacyjnym <math>R</math>, to <math>\alpha_E</math>
<math>\alpha_{E\cup F}</math> definiujemy jako <math>\alpha_E\lor\alpha_F</math>, zaś <math>\alpha_{E-F}</math> jako <math>\alpha_E\land\lnot\alpha_F</math>. I w tym przypadku teza jest oczywista.  
ma postać <math>R(x_1,\dots,x_n\end{eqnarray*},</math> a&nbsp;prawdziwość tezy jest oczywista.  


<math>\alpha_{E\cup F}</math> definiujemy jako <math>\alpha_E\lor\alpha_F,</math> zaś
Aby skonstruować <math>\alpha_{\pi_{i_1,\dots,i_k}E}</math> tworzymy formułę <math>\exists x_{j_1}\dots\exists x_{j_{n-k}}\alpha</math>, gdzie <math>j_1,\dots,j_{n-k}</math> to wypisane w obojętnej kolejności elementy zbioru
<math>\alpha_{E-F}</math> jako <math>\alpha_E\land\lnot\alpha_F.</math> I w tym przypadku
<math>\{1,\dots,n \}-\{i_1,\dots,i_k\}</math>. Następnie dokonujemy w niej zamiany nazw zmiennych związanych tak, by ich numery były większe niż <math>n</math>, a zmienne wolne przemianowujemy z <math>x_{i_j}</math> na <math>y_{i_j}</math>. Niech <math>\beta</math> będzie otrzymaną w ten sposób formułą. Wówczas <math>\alpha_{\pi_{i_1,\dots,i_k}E}</math> definiujemy jako  
teza jest oczywista.  
<math>\beta(x_1/y_{i_1},\dots,x_k/y_{i_k})</math>.  Widać, że ta formuła spełnia
tezę.


Aby skonstruować <math>\alpha_{\pi_{i_1,\dots,i_k}E}</math> tworzymy formułę
Przy konstrukcji <math>\alpha_{E\times F}</math> postępujemy następująco: dokonujemy zamiany nazw zmiennych związanych w formule <math>\alpha_F</math> w  
<math>\exists x_{j_1}\dots\exists x_{j_{n-k}}\alpha</math>, gdzie
ten sposób, by miały one numery większe niż <math>n+m</math>, zaś za zmienne wolne <math>x_1,\dots,x_m</math> podstawiamy kolejno <math>x_{n+1},\dots, x_{n+m}</math>.
<math>j_1,\dots,j_{n-k}</math> to wypisane w obojętnej kolejnościelementy zbioru
Niech powstała formuła nazywa się <math>\beta_F</math>. Wtedy definiujemy
<math>\{1,\dots,n \}-\{i_1,\dots,i_k\}.</math> Następnie dokonujemy w niej
<math>\alpha_{E\times F}</math> jako <math>\alpha_E\land\beta_F</math>. Oczyiście ta formuła spełnia tezę.  
zamiany nazw zmiennych związanych tak, by ich numery były większe niż  
 
<math>n</math>, a zmienne wolne przemianowujemy z <math>x_{i_j}</math> na <math>y_{i_j}.</math> Niech  
Na zakończenie tej cześci dowodu określamy formułę <math>\alpha_{\sigma_\theta E}</math> jako
<math>\beta</math> będzie otrzymaną w ten sposób formułą. Wówczas
<math>\alpha_{\pi_{i_1,\dots,i_k}E}</math> definiujemy jako  
<math>\beta(x_1/y_{i_1},\dots,x_k/y_{i_k}\end{eqnarray*}</math>. Widać, że ta formuła spełnia  
tezę.


Przy konstrukcji <math>\alpha_{E\times F}</math> postępujemy następująco:
<math>\alpha_E\land\bigwedge_{'i=j' \in \theta} x_i=x_j\land\bigwedge_{'i=c'\in \theta} x_i=c</math>.  
dokonujemy zamiany nazw zmiennych związanych w formule <math>\alpha_F</math> w
ten sposób, by miały one numery większe niż <math>n+m,</math> zaś za zmienne
wolne <math>x_1,\dots,x_m</math> podstawiamy kolejno <math>x_{n+1},\dots, x_{n+m}.</math>
Niech powstała formuła nazywa się&nbsp;<math>\beta_F.</math> Wtedy definiujemy
<math>\alpha_{E\times F}</math> jako <math>\alpha_E\land\beta_F</math>.  Oczyiście ta
formuła spełnia tezę.  


Na zakończenie tej cześci dowodu określamy formułę
I tym razem sprawdzenie, że ta formuła spełnia tezę indukcyjną jest natychmiastowe.   
<math>\alpha_{\sigma_\theta E}</math> jako
\[\alpha_E\land\\bigwedge_{\text{`<math>i=j</math>'}\in
\theta}x_i=x_j\land\\bigwedge_{\text{`<math>i=c</math>'}\in \theta}x_i=c.\]
I tym razem sprawdzenie, że ta formuła spełnia tezę indukcyjną jest  
natychmiastowe.   


Przystępujemy teraz do tłumaczenia formuł logiki pierwszego rzędu na  
Przystępujemy teraz do tłumaczenia formuł logiki pierwszego rzędu na algebrę relacyjną. W tym celu wygodnie jest założyć, że podstawowymi spójnikami logiki są <math>\lor,\lnot</math> i <math>\exists</math>, a pozostałe są zdefiniowane za ich pomocą i mają status skrótów notacyjnych.  
algebrę relacyjną. W&nbsp;tym celu wygodnie jest założyć, że podstawowymi  
spójnikami logiki są <math>\lor,\lnot</math> i <math>\exists,</math> a pozostałe są  
zdefiniowane za ich pomocą i mają status skrótów notacyjnych.  


Zaczynamy od konstrukcji jednoargumentowego wyrażenia <math>AD</math> takiego, że  
Zaczynamy od konstrukcji jednoargumentowego wyrażenia <math>AD</math> takiego, że dla każdej struktury <math>\mathfrak A</math>, mamy <math>[[AD]]=ad(\mathfrak A)</math>.
dla każdej struktury <math>\mathfrak A,</math> mamy <math>\\\seml AD}=ad(\mathfrak A\end{eqnarray* \semr.</math>  


Jest ono <math>\cup</math>-sumą wyrażeń <math>\pi_i R</math> dla wszystkich symboli  
Jest ono <math>\cup</math>-sumą wyrażeń <math>\pi_i R</math> dla wszystkich symboli relacyjnych <math>R</math> w sygnaturze i wszystkich <math>i</math> takich, że <math>R</math> ma co najmniej <math>i</math> argumentów.  
relacyjnych <math>R</math> w sygnaturze i wszystkich&nbsp;<math>i</math> takich, że <math>R</math> ma co  
najmniej <math>i</math> argumentów.  


Możemy teraz przystąpić do konstrukcji. Dla każdego zadanego <math>n</math> nie  
Możemy teraz przystąpić do konstrukcji. Dla każdego zadanego <math>n</math> nie  
mniejszego niż wszystkie numery zmiennych wolnych w <math>\alpha</math>  
mniejszego niż wszystkie numery zmiennych wolnych w <math>\alpha</math> konstruujemy <math>n</math>-argumentowe wyrażenie <math>E_{\alpha;n}</math> takie, że  
konstruujemy <math>n</math>-argumentowe wyrażenie <math>E_{\alpha;n}</math> takie, że  


\[\\\seml E_{\alpha;n} \semr=\{\<a_1,\dots,a_n\>\in  
<math>[[E_\alpha;n]]=\{<a_1,\dots,a_n>\in  
A^n&nbsp;|&nbsp;(\mathfrak A,x_{1}:a_1,\dots,x_{n}:a_n\end{eqnarray*}\models\alpha\}.\] 
A^n | (\mathfrak A,x_{1}:a_1,\dots,x_{n}:a_n)\models\alpha\}</math>.  


Oznacza to, że <math>E_{\alpha;n}</math> zawiera dodatkowe współrzędne, które  
Oznacza to, że <math>E_{\alpha;n}</math> zawiera dodatkowe współrzędne, które  
pozwalają zarejestrować indeksy zmiennych wolnych występujących w  
pozwalają zarejestrować indeksy zmiennych wolnych występujących w <math>\alpha</math>.  Aby otrzymać <math>E_\alpha</math> wystarczy wziąć rzut  
<math>\alpha</math>.  Aby otrzymać <math>E_\alpha</math> wystarczy wziąć rzut  
<math>\pi_{I}E_{\alpha;n}</math>, gdzie <math>I</math> to posortowany rosnąco ciąg numerów zmiennych wolnych <math>\alpha</math>, co eliminuje przy okazji zbędne współrzędne.  
<math>\pi_{I}E_{\alpha;n},</math> gdzie <math>I</math> to posortowany rosnąco ciąg numerów  
zmiennych wolnych <math>\alpha,</math> coeliminuje przy okazji zbędne współrzędne.  


</math>E_{x_i=x_j;n}<math> to </math>\sigma_{i=j}(\underbrace{AD\times\dots\times  
<math>E_{x_i=x_j;n}</math> to <math>\sigma_{i=j}(\underbrace{AD\times\dots\times  
AD}_{n}\end{eqnarray*}.</math>   
AD}_{n})</math>.  


<math>E_{R(x_{i_1},\dots,x_{i_k}\end{eqnarray*};n}</math> jest zdefiniowane jako  
<math>E_{R(x_{i_1},\dots,x_{i_k});n}</math> jest zdefiniowane jako <math>\pi_{I}(R\times\underbrace{AD\times\dots\times AD}_{n-k})</math>, gdzie  
<math>\pi_{I}(R\times\underbrace{AD\times\dots\times AD}_{n-k}\end{eqnarray*},</math> gdzie  
<math>I</math> jest taką permutacją <math>\{1,\dots,n\}</math>, która współrzędne <math>R</math> mieszcza na pozycjach o kolejnych numerach <math>i_1,\dots,i_k</math>.
<math>I</math> jest taką permutacją <math>\{1,\dots,n\}</math>, która współrzędne <math>R</math>  
mieszcza na pozycjach o kolejnych numerach <math>i_1,\dots,i_k.</math>  


</math>E_{\alpha\lor\beta;n}<math> jest zdefiniowane jako </math>E_{\alpha;n}\cup  
<math>E_{\alpha\lor\beta;n}</math> jest zdefiniowane jako <math>E_{\alpha;n}\cup  
E_{\beta;n},</math> natomiast  <math>E_{\lnot\alpha;n}</math> to  
E_{\beta;n}</math>, natomiast  <math>E_{\lnot\alpha;n}</math> to <math>(\underbrace{AD\times\dots\times AD}_{n})-E_{\alpha;n}</math>.
<math>(\underbrace{AD\times\dots\times AD}_{n}\end{eqnarray*}-E_{\alpha;n}.</math>  




 
Wreszcie w wypadku <math>E_{\exists x_i\alpha;n}</math> możemy bez utraty
Wreszcie w wypadku <math>E_{\exists x_i\alpha;n}</math> możemy bezutraty
ogólności założyć, że <math>i=n+1</math>.  Wtedy  <math>E_{\exists  
ogólności założyć, że </math>i=n+1<math>.  Wtedy  </math>E_{\exists  
x_i\alpha;n}</math> jest zdefiniowane jako <math>\pi_{1,\dots,n}E_{\alpha;n+1}</math>.
x_i\alpha;n}</math> jest zdefiniowane jako  
<math>\pi_{1,\dots,n}E_{\alpha;n+1}.</math>  


We wszystkich przypadkach kroki dowodu indukcyjnego są oczywiste.  
We wszystkich przypadkach kroki dowodu indukcyjnego są oczywiste.  
}}  
}}  


Twierdzenie Codda jest już w pewnym stopniu częścią folkloru w teorii  
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 musi uzasadniać.  
baz danych. Dziś wszyscy wiedzą, że algebra relacyjna to właściwie to  
samo, co logika pierwszego rzędu.  W&nbsp;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  
W szczególności badania dotyczące gier Ehrenfeuchta oraz charakteryzacji obliczeniowych logiki pierwszego rzędu (w duchu twierdzeń B&uuml;chi i Fagina)są generalnie postrzegane jako wyniki należące do teorii baz danych.
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===
===Rozstrzygalność i nierozstrzygalność teorii===


W tym rozdziale przedyskutujemy zagadnienie rozstrzygalności teorii  
W tym rozdziale przedyskutujemy zagadnienie rozstrzygalności teorii matematycznych (rozumianych jako zbiory zdań). Przykładem teorii nierozstrzygalnej jest arytmetyka Peano (Twierdzenie [[#przescieradlo|9.3]]). Przykład teorii rozstrzygalnej prezentujemy poniżej.  
matematycznych (rozumianych jako zbiorów zdań\end{eqnarray*}.  
Przykładem teorii nierozstrzygalnej jest arytmetyka Peano
(Twierdzenie&nbsp;[[#przescieradlo]]\end{eqnarray*}. Przykład teorii rozstrzygalnej  
prezentujemy poniżej.  
 
 
{{twierdzenie|||


Teoria gęstych porządków liniowych które nie mająelementów
{{twierdzenie|13.7||
maksymalnych ani minimalnych jest rozstrzygalna.  
Teoria gęstych porządków liniowych które nie mają elementów maksymalnych ani minimalnych jest rozstrzygalna.  
}}  
}}  


{{dowod||  
{{dowod|||
Niech <math>\mathcal{A}</math> będzie klasą wszystkich gęstych porządków liniowych które nie mająelementów maksymalnych ani minimalnych. Z Wniosku [[#zupa|4.15]] wiemy, że <math>Th(\mathcal{A})</math> jest zupełna.
Ponadto zauważmy, że
<math>Th(\mathcal{A})=\{\alpha | \Delta\models\alpha\}</math>, gdzie <math>\Delta</math> to następujący zbiór zdań:


Niech <math>\mathcal{A}</math> będzie klasą wszystkich gęstych porządków
<math>
liniowych które nie mająelementów maksymalnych ani minimalnych.
\forall x\forall y \ (x\leq y \land y\leq x)\to x=y\\  
Z Wniosku [[#zupa} wiemy, że <math>'''Th]](\mathcal{A'''\end{eqnarray*}</math> jest zupełna.
\forall x\forall y \forall z\ (x\leq y \land y\leq z)\to x\leq z\\  
Ponadto zauważmy, że 
<math>'''Th}(\mathcal{A}\end{eqnarray*}=\{\alpha&nbsp;|&nbsp;\Delta\models\alpha\'''</math>, 
gdzie <math>\Delta</math> 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\forall y \ x\leq y \lor y\leq x\\  
\forall x\exists y\ x< y\\  
\forall x\exists y\ x< y\\  
\forall x\exists y\ y< x\\  
\forall x\exists y\ y< x\\  
\forall x\forall y\ (x < y\end{eqnarray*}\to (\exists z\ x < z \land z<y)
\forall x\forall y\ (x < y)\to (\exists z\ x < z \land z<y)
\end{gather*}
</math>
<!--% -->  
 
gdzie </math>x<y<math> jest oczywistym skrótem notacyjnym dla formuły </math>x\leq y  
gdzie <math>x<y</math> jest oczywistym skrótem notacyjnym dla formuły <math>x\leq y \land x\neq y</math>.
\land x\neq y.</math>  


Na mocy twierdzenia o pełności  
Na mocy twierdzenia o pełności  
<!--% -->  
<math>\{\alpha | \Delta\models\alpha\}=\{\alpha |\Delta\vdash_H\alpha\}</math>.
\[\{\alpha&nbsp;|&nbsp;\Delta\models\alpha\}=\{\alpha&nbsp;|&nbsp;e_H\alpha\}.\]
<!--% -->
Pozostaje więc wykazać rozstrzygalność
<math>\{\alpha&nbsp;|&nbsp;e_H\alpha\}.</math>  


Pozostaje więc wykazać rozstrzygalność <math>\{\alpha | \Delta\vdash_H\alpha\}</math>.


Procedura rozstrzygająca jest następująca:
Procedura rozstrzygająca jest następująca: Dla danej formuły <math>\alpha</math> systematycznie generujemy wszystkie dowody w systemie Hilberta, poszukując wśród nich albo dowodu  <math>\Delta\vdash_H\alpha</math>, albo dowodu  <math>\Delta\vdash_H\lnot\alpha</math>. Wobec zaobserwowanej przez nas zupełności, jeden z nich w końcu się znajdzie.  Jeśli będzie to ten pierwszy, to procedura udzieli wówczas odpowiedzi: "TAK", a jeśli ten drugi, to "NIE".  
Dla danej formuły&nbsp;<math>\alpha</math> systematycznie generujemy wszystkie
dowody w systemie Hilberta,  
poszukując wśród nich albo dowodu  <math>e_H\alpha,</math>  
albo dowodu  <math>e_H\lnot\alpha.</math> 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&nbsp;jeśli ten drugi, to ,,NIE''.  
}}  
}}  


Linia 600: Linia 421:
Przeprowadzony przez nas dowód jest całkiem prosty, ale prowadzi do  
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  
algorytmu rozstrzygającego, o którego złożoności nic rozsądnego  
powiedzieć nieumiemy.  
powiedzieć nie umiemy.  


Istnieją bardziej zaawansowane technicznie metody dowodzenia  
Istnieją bardziej zaawansowane technicznie metody dowodzenia  
rozstrzygalności, które pozwalają oszacować złożoność tworzonych przez  
rozstrzygalności, które pozwalają oszacować złożoność tworzonych przez  
nie algorytmów. Jednak możnaudowodnić, że żaden taki algorytm nie  
nie algorytmów. Jednak można udowodnić, że żaden taki algorytm nie  
może mieć złożoności mniejszej niż {\sc Pspace}, o ile tylko działa  
może mieć złożoności mniejszej niż PSPACE, o ile tylko działa  
poprawnie dla wszystkich formuł zawierających symbole równości.   
poprawnie dla wszystkich formuł zawierających symbole równości.   


{{twierdzenie|Stockmeyer||  
{{twierdzenie|13.8 (Stockmeyer)||
 
Następujący problem jest PSPACE-trudny: czy dane zdanie logiki pierwszego rzędu nad sygnaturą zawierającą wyłącznie symbol równości jest tautologią?  
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  
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.  
istnienie algorytmów o wielomianowej złożoności czasowej nawet dla  
teorii jeszcze prostszych niż ta rozpatrywana w&nbsp;poprzednim twierdzeniu.
 
{{dowod||
 
Przeprowadzamy redukcję w pamięci logarytmicznej z problemu QBF
(kwantyfikowanych formuł Boolowskich)do naszego problemu.  


Instancjami problemu QBF są zdania postaci
{{dowod|||
<math>Q_1 p_1\dots Q_n p_n\alpha</math>, gdzie <math>Q_i\in\{\exists,\forall\}</math>,
Przeprowadzamy redukcję w pamięci logarytmicznej z problemu QBF kwantyfikowanych formuł Boolowskich do naszego problemu.  
a <math>\alpha</math> jest formułą zdaniową. 
Pojęcie prawdziwości takiego zdania jest definiowane w naturalny sposób.
Problem QBF jest znanym problemem {\sc Pspace}-zupełnym.  


Redukcja określona jest jak następuje: w zdaniu powyższym każde
Instancjami problemu QBF są zdania postaci <math>Q_1 p_1\dots Q_n p_n\alpha</math>, gdzie <math>Q_i\in\{\exists,\forall\}</math>, a <math>\alpha</math> jest formułą zdaniową. 
wystąpienie <math>p_i</math> zastępujemy przez <math>x_i=y_i</math>. Teraz po kolei
Pojęcie prawdziwości takiego zdania jest definiowane w naturalny sposób. Problem QBF jest znanym problemem PSPACE-zupełnym.  
zastępujemy kwantyfikatory:
*
Każdy kwantyfikator  <math>\forall p_i</math> zamieniamy  na <math>\forall x_i\forall y_i</math>.  


*
Redukcja określona jest jak następuje: w zdaniu powyższym każde wystąpienie <math>p_i</math> zastępujemy przez <math>x_i=y_i</math>. Teraz po kolei zastępujemy kwantyfikatory:
Każdy kwantyfikator  <math>\exists p_i</math> zamieniamy  na <math>\exists x_i\exists y_i</math>.  
*Każdy kwantyfikator  <math>\forall p_i</math> zamieniamy  na <math>\forall x_i\forall y_i</math>.  


*Każdy kwantyfikator  <math>\exists p_i</math> zamieniamy  na <math>\exists x_i\exists y_i</math>.


Niech formułą otrzymana po tych operacjach będzie <math>\alpha'.</math>  
Niech formułą otrzymana po tych operacjach będzie <math>\alpha'</math>. Wtedy wynikiem naszej redukcji jest formuła <math>\alpha''</math> <math>\forall x\forall y( x=y \lor \alpha')</math>.
Wtedy wynikiem naszej redukcji jest formuła <math>\alpha''</math>  
\[\forall x\forall y( x=y \lor \alpha'\end{eqnarray*}.\]


Jest oczywiste, że <math>\alpha''</math> daje się obliczyć z <math>\alpha</math> w  
Jest oczywiste, że <math>\alpha''</math> daje się obliczyć z <math>\alpha</math> w logarytmicznej pamięci.  
logarytmicznej pamięci.  


Widać, że formuły atomowe <math>x_i=y_i</math> pełnią rolę zmiennych  
Widać, że formuły atomowe <math>x_i=y_i</math> pełnią rolę zmiennych zdaniowych <math>p_i</math>, przy czym w każdej strukturze o co najmniej dwóch elementach mogą przyjmować obie wartości logiczne.  Kwantyfikatory <math>\forall x_i\forall y_i</math> i <math>\exists x_i\exists y_i</math> swoją funkcją wiernie odpowiadają kwantyfikatorom <math>\forall p_i</math> oraz <math>\exists p_i</math>. Z kolei klauzula <math>\forall x\forall y (x=y)</math> czyni <math>\alpha''</math> prawdziwym w strukturach jednoelementowych, niezależnie od postaci <math>\alpha</math>.  
zdaniowych <math>p_i</math>, przy czym w&nbsp;każdej strukturze o co najmniej dwóch  
elementach mogą przyjmować obie wartości logiczne.  Kwantyfikatory  
<math>\forall x_i\forall y_i</math> i <math>\exists x_i\exists y_i</math> swoją funkcją wiernie  
odpowiadają kwantyfikatorom </math>\forall  
p_i</math> oraz <math>\exists p_i.</math> Z kolei klauzula <math>\forall x\forall y (x=y\end{eqnarray*}</math>  
czyni <math>\alpha''</math> prawdziwym w&nbsp;strukturach jednoelementowych,  
niezależnie od postaci <math>\alpha.</math>   


Z tego wynika, że <math>\alpha</math> jest prawdziwe wtedy i tylko wtedy, gdy  
Z tego wynika, że <math>\alpha</math> jest prawdziwe wtedy i tylko wtedy, gdy  
Linia 662: Linia 458:
Szczególnie interesujące jest następujące twierdzenie:  
Szczególnie interesujące jest następujące twierdzenie:  


{{twierdzenie|Tarski||  
{{twierdzenie|13.9 (Tarski)||  
 
Teoria uporządkowanego ciała liczb rzeczywistych, tj. teoria struktury  
Teoriauporządkowanego ciała liczb rzeczywistych, tj.&nbsp;teoria struktury  
<math><\mathbb{R},+,*,0,1,\leq></math> jest rozstrzygalna.   
\mbox{<math>\<\RR,+,*,0,1,\leq\></math>} jest rozstrzygalna.   
}}  
}}  


Jej znaczenie dla informatyki zasadza się na fakcie, że ta teoria to w  
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ć jako ulepszanie algorytmu rozstrzygającego teorię <math><\mathbb{R},+,*,0,1,\leq></math> dla różnych szczególnych klas formuł, pojawiających się w praktyce.
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{<math>\<\RR,+,*,0,1,\leq\></math>} 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 <math>\mathfrak A</math> takich, że <math>A=ad(\mathfrak A\end{eqnarray*}.</math> 
#<span id="rJ1" \>  Udowodnić, że zbiór tautologii logiki pierwszego rzędu nad
sygnaturą składającą się tylko z&nbsp;równości jest rozstrzygalny. 
 
{\em Wskazówka:\/} Niech <math>\alpha</math> będzie formułą o randze
kwantyfikatorowej <math>q</math>.  Udowodnić, że każde dwie struktury o mocy co
najmniej <math>q</math> nad powyższą sygnaturą są <math>q</math>-elementarnie równoważne.
Wywnioskować stąd, że aby sprawdzić, czy <math>\alpha</math> jest tautologią
wystarczyć sprawdzić to w strukturach o mocy co najwyżej <math>q.</math>
 
 
#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&nbsp;równości jest {\sc Pspace}-zupełny.
 
#<span id="rJ2" \>  Udowodnić, że zbiór tautologii logiki pierwszego
rzędu nad sygnaturą składającą się tylko z&nbsp;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}

Aktualna wersja na dzień 21:29, 11 wrz 2023

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 (ale urodzony 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 11.

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 1.1), 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, 12 1.

Wartość formuły zdaniowej α przy trójwartościowaniu ϱ oznaczamy przez [[α]]ϱ i określamy przez indukcję:

  • Parser nie mógł rozpoznać (nieznana funkcja „\prooftree”): {\displaystyle [[\prooftree p]]_\varrho =\varrho(p)} , gdy p jest symbolem zdaniowym;
  • [[αβ]]ϱ=F([[α]]ϱ,[[β]]ϱ);
  • [[αβ]]ϱ=F([[α]]ϱ,[[β]]ϱ);
  • [[¬α]]ϱ=F¬([[α]]ϱ).


Różne wybory funkcji F,F:{0,12,1}×{0,12,1}{0,12,1} i F¬:{0,12,1}{0,12,1} prowadzą do różnych logik trójwartościowych.

Zaczniemy od logiki najstarszej, zwanej dziś logiką Heytinga-Kleene-Łukasiewicza:

F(x,y)
x \ y0   1   12
0
1
12
0   0   0
0   1   12
0   12   12
F(x,y)
x \ y0   1   12
0
1
12
0   1   12
1   1   1
12   1   12
F¬
 x    
0
1
12
1
0
12

Jest to logika niewątpliwie nadająca się do rozwiązania zadania, które sobie Łukasiewicz postawił. Sposób traktowania wartości logicznej 12 jest taki, że należy ją rozumieć jako "jeszcze nie wiadomo".

Warto zauważyć, że w przypadku tej logiki zachodzą równości

  • [[¬α]]ϱ=1[[α]]ϱ,
  • [[αβ]]ϱ=max{[[α]]ϱ,[[β]]ϱ},
  • [[αβ]]ϱ=min{[[α]]ϱ,[[β]]ϱ},

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:

F(x,y)
x \ y0   1   12
0
1
12
0   0   12
0   1   12
12   12   12
F(x,y)
x \ y0   1   12
0
1
12
0   1   12
1   1   12
12   12   12
F¬
 x    
0
1
12
1
0
12

Czytelnik bez trudu rozpozna, że jest logika właściwa dla Przykładu 13.1, gdy programista wybierze długie wyliczenie wyrażeń logicznych. W sensie tej logiki stała 12 oznacza awarię lub błąd.

Dalej mamy dość egzotycznie wyglądającą logikę Sobocińskiego:

F(x,y)
x \ y0   1   12
0
1
12
0   0   0
0   1   1
0   1   12
F(x,y)
x \ y0   1   12
0
1
12
0   1   0
1   1   1
0   1   12
F¬
 x    
0
1
12
1
0
12

Jednak i ona ma swój poważny sens. W niej stała logiczna 12 oznacza "nie dotyczy" lub "nieistotne". Wszyscy odruchowo wręcz stosujemy tę logikę przy okazji wypełniania różnych formularzy i kwestionariuszy. Odpowiadając na pytania sformułowane "tak lub nie" w niektórych polach na odpowiedzi umieszczamy "nie dotyczy" a potem podpisujemy się pod dokumentem mimo ostrzeżenia "Świadomy/ma odpowiedzialności karnej za składanie fałszywych zeznań 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 12 daje wynik 1. Na szczęście, organy kontrolne chyba też znają ten rachunek zdań i stosują go do oceny naszych zeznań

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:

F(x,y)
x \ y0   1   12
0
1
12
0   0   0
0   1   12
12   12   12
F(x,y)
x \ y0   1   12
0
1
12
0   1   12
1   1   1
12   12   12
F¬
 x    
0
1
12
1
0
12

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 przy wzroście liczby wartości logicznych, liczba sensownych logik musi rosnąć. 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 Twierdzenie 11.5 pozwala w nim dojrzeć właśnie opis zbioru tautologii zdaniowej logiki intucjonistycznej jako zbioru tautologii logiki nieskończeniewielowartoś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 13.4

Tytułem przypomnienia (Czytelnik powinien znać algebrę relacyjną z wykładu baz danych)i dla ustalenia notacji, definiujemy składnię algebry relacyjnej AR nad Σ.

  • Każdy symbol relacji n-argumentowej z Σ z wyjątkiem równości jest n-argumentowym wyrażeniem AR.
  • Jeśli E i Fn-argumentowymi wyrażeniami AR, to EF,EF też są n-argumentowymi wyrażeniami AR.
  • Jeśli E i Fn-argumentowymi wyrażeniami AR, to EF,EF też są n-argumentowymi wyrażeniami AR.
  • Jeśli E jest n-argumentowym wyrażeniem AR oraz i1,,ik jest ciągiem różnych ale niekoniecznie wszystkich elementów zbioru {1,,n}, to πi1,,ikE jest k-argumentowym wyrażeniem AR. W szczególności ciąg ten może być pusty, zaś πE jest wyrażeniem 0-argumentowym.
  • Jeśli E jest n-argumentowym, zaś F jest m-argumentowym wyrażeniem AR, to E×F jest n+m-argumentowym wyrażeniem AR.
  • Jeśli E jest n-argumentowym wyrażeniem AR oraz θ jest zbiorem równości postaci 'i=j' lub 'i=c', gdzie i,j{1,,n} zaś c zależy do zbioru symboli stałych z sygnatury Σ, to σθE jest n-argumentowym wyrażeniem AR.


Semantyka algebry relacyjnej jest następująca: dla danej struktury 𝔄 nad Σ, każdemu n-argumentowemu wyrażeniu E algebry relacyjnej przypisujemy n-argumentową relację [[E]] w A.

Definicja oczywiście przebiega indukcyjnie względem budowy E.

  • Jeśli R należy do Σ, to [[R]]=R𝔄.
  • Parser nie mógł rozpoznać (nieznana funkcja „\cupF”): {\displaystyle [[E\cupF]]=[[E]]\cup[[F]]} oraz [[EF]]=[[E]][[F]].
  • [[πi1,,ikE]]={<ai1,,aik>|<a1,,ak>[[E]]}.
  • [[E×F]]=[[E]]×[[F]]={<a1,,an,b1,bm>|<a1,,an>[[E]]i<b1,bm>[[F]]}.
  • [[σθE]]={<a1,,an>[[E]]|ai=aj,gdy(i=j)θ oraz ai=c𝔄,gdy (i=c)θ}.

Warto zauważyć, że [[πE]]={<>} czyli jest zbiorem złożonym z ciągu pustego, gdy [[E]] jest niepusty, oraz jest pusty w przeciwnym wypadku. Z kolei [[σE]]=[[E]]

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 FV(α)={xi1,xin}, oraz struktury 𝔄=<A,> określimy interpretację tej formuły w 𝔄, oznaczaną [[α]], jak następuje:

[[α]]={<a1,,an>An|(𝔄,xi1:a1,,xin:an)α}

Intuicyjnie, [[α]] to relacja definiowana przez formułę α w danej strukturze.

Definicja 13.5

Aktywną dziedziną struktury 𝔄 nazwiemy podzbiór ad(𝔄)A jej uniwersum, złożony z wszystkich elementó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 A=ad(𝔄), to sytuacja sie zmienia. Wyrazem tego jest poniższe twierdzenie.

Twierdzenie 13.6 (Codd)

  1. Dla każdego wyrażenia E algebry relacyjnej istnieje taka formuła αE logiki pierwszego rzędu, że dla każdej struktury 𝔄 spełniającej A=ad(𝔄), zachodzi [[α]]=[[E]].
  2. Dla każdej formuły α logiki pierwszego rzędu istnieje wyrażenie Eα algebry relacyjnej takie, że dla każdej struktury 𝔄 spełniającej A=ad(𝔄), zachodzi [[E]]=[[α]].

Dowód

Obu części twierdzenia będziemy dowodzić przez indukcję ze względu na budowę: w pierwszym punkcie wyrażenia E, a w drugim formuły α.

Przy konstrukcji αE będziemy dbać o to, żeby FVαE={x1,,xn}, gdzie n to liczba argumentów E.

Gdy E jest n-argumentowym symbolem relacyjnym R, to αE ma postać R(x1,,xn), a prawdziwość tezy jest oczywista.

αEF definiujemy jako αEαF, zaś αEF jako αE¬αF. I w tym przypadku teza jest oczywista.

Aby skonstruować απi1,,ikE tworzymy formułę xj1xjnkα, gdzie j1,,jnk to wypisane w obojętnej kolejności elementy zbioru {1,,n}{i1,,ik}. Następnie dokonujemy w niej zamiany nazw zmiennych związanych tak, by ich numery były większe niż n, a zmienne wolne przemianowujemy z xij na yij. Niech β będzie otrzymaną w ten sposób formułą. Wówczas απi1,,ikE definiujemy jako β(x1/yi1,,xk/yik). Widać, że ta formuła spełnia tezę.

Przy konstrukcji αE×F postępujemy następująco: dokonujemy zamiany nazw zmiennych związanych w formule αF w ten sposób, by miały one numery większe niż n+m, zaś za zmienne wolne x1,,xm podstawiamy kolejno xn+1,,xn+m. Niech powstała formuła nazywa się βF. Wtedy definiujemy αE×F jako αEβF. Oczyiście ta formuła spełnia tezę.

Na zakończenie tej cześci dowodu określamy formułę ασθE jako

αE'i=jθxi=xj'i=cθxi=c.

I tym razem sprawdzenie, że ta formuła spełnia tezę indukcyjną jest natychmiastowe.

Przystępujemy teraz do tłumaczenia formuł logiki pierwszego rzędu na algebrę relacyjną. W tym celu wygodnie jest założyć, że podstawowymi spójnikami logiki są ,¬ i , a pozostałe są zdefiniowane za ich pomocą i mają status skrótów notacyjnych.

Zaczynamy od konstrukcji jednoargumentowego wyrażenia AD takiego, że dla każdej struktury 𝔄, mamy [[AD]]=ad(𝔄).

Jest ono -sumą wyrażeń πiR dla wszystkich symboli relacyjnych R w sygnaturze i wszystkich i takich, że R ma co najmniej i argumentów.

Możemy teraz przystąpić do konstrukcji. Dla każdego zadanego n nie mniejszego niż wszystkie numery zmiennych wolnych w α konstruujemy n-argumentowe wyrażenie Eα;n takie, że

[[Eα;n]]={<a1,,an>An|(𝔄,x1:a1,,xn:an)α}.

Oznacza to, że Eα;n zawiera dodatkowe współrzędne, które pozwalają zarejestrować indeksy zmiennych wolnych występujących w α. Aby otrzymać Eα wystarczy wziąć rzut πIEα;n, gdzie I to posortowany rosnąco ciąg numerów zmiennych wolnych α, co eliminuje przy okazji zbędne współrzędne.

Exi=xj;n to σi=j(AD××ADn).

ER(xi1,,xik);n jest zdefiniowane jako πI(R×AD××ADnk), gdzie I jest taką permutacją {1,,n}, która współrzędne R mieszcza na pozycjach o kolejnych numerach i1,,ik.

Eαβ;n jest zdefiniowane jako Eα;nEβ;n, natomiast E¬α;n to (AD××ADn)Eα;n.


Wreszcie w wypadku Exiα;n możemy bez utraty ogólności założyć, że i=n+1. Wtedy Exiα;n jest zdefiniowane jako π1,,nEα;n+1.

We wszystkich przypadkach kroki dowodu indukcyjnego są oczywiste.

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 musi uzasadniać.

W szczególności badania dotyczące gier Ehrenfeuchta oraz charakteryzacji obliczeniowych logiki pierwszego rzędu (w duchu twierdzeń Büchi 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 zbiory zdań). Przykładem teorii nierozstrzygalnej jest arytmetyka Peano (Twierdzenie 9.3). Przykład teorii rozstrzygalnej prezentujemy poniżej.

Twierdzenie 13.7

Teoria gęstych porządków liniowych które nie mają elementów maksymalnych ani minimalnych jest rozstrzygalna.

Dowód

Niech 𝒜 będzie klasą wszystkich gęstych porządków liniowych które nie mająelementów maksymalnych ani minimalnych. Z Wniosku 4.15 wiemy, że Th(𝒜) jest zupełna. Ponadto zauważmy, że Th(𝒜)={α|Δα}, gdzie Δ to następujący zbiór zdań:

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \forall x\forall y \ (x\leq y \land y\leq x)\to x=y\\ \forall x\forall y \forall z\ (x\leq y \land y\leq z)\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)\to (\exists z\ x < z \land z<y) }

gdzie x<y jest oczywistym skrótem notacyjnym dla formuły xyxy.

Na mocy twierdzenia o pełności {α|Δα}={α|ΔHα}.

Pozostaje więc wykazać rozstrzygalność {α|ΔHα}.

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 ΔHα, albo dowodu ΔH¬α. Wobec zaobserwowanej przez nas zupełności, jeden z nich w końcu się znajdzie. Jeśli będzie to ten pierwszy, to procedura udzieli 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ć nie umiemy.

Istnieją bardziej zaawansowane technicznie metody dowodzenia rozstrzygalności, które pozwalają oszacować złożoność tworzonych przez nie algorytmów. Jednak można udowodnić, że żaden taki algorytm nie może mieć złożoności mniejszej niż PSPACE, o ile tylko działa poprawnie dla wszystkich formuł zawierających symbole równości.

Twierdzenie 13.8 (Stockmeyer)

Następujący problem jest 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

Przeprowadzamy redukcję w pamięci logarytmicznej z problemu QBF kwantyfikowanych formuł Boolowskich do naszego problemu.

Instancjami problemu QBF są zdania postaci Q1p1Qnpnα, gdzie Qi{,}, a α jest formułą zdaniową. Pojęcie prawdziwości takiego zdania jest definiowane w naturalny sposób. Problem QBF jest znanym problemem PSPACE-zupełnym.

Redukcja określona jest jak następuje: w zdaniu powyższym każde wystąpienie pi zastępujemy przez xi=yi. Teraz po kolei zastępujemy kwantyfikatory:

  • Każdy kwantyfikator pi zamieniamy na xiyi.
  • Każdy kwantyfikator pi zamieniamy na xiyi.

Niech formułą otrzymana po tych operacjach będzie α. Wtedy wynikiem naszej redukcji jest formuła α xy(x=yα).

Jest oczywiste, że α daje się obliczyć z α w logarytmicznej pamięci.

Widać, że formuły atomowe xi=yi pełnią rolę zmiennych zdaniowych pi, przy czym w każdej strukturze o co najmniej dwóch elementach mogą przyjmować obie wartości logiczne. Kwantyfikatory xiyi i xiyi swoją funkcją wiernie odpowiadają kwantyfikatorom pi oraz pi. Z kolei klauzula xy(x=y) czyni α prawdziwym w strukturach jednoelementowych, niezależnie od postaci α.

Z tego wynika, że α jest prawdziwe wtedy i tylko wtedy, gdy α jest tautologią.

Szczególnie interesujące jest następujące twierdzenie:

Twierdzenie 13.9 (Tarski)

Teoria uporządkowanego ciała liczb rzeczywistych, tj. teoria struktury <,+,*,0,1,> 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ć jako ulepszanie algorytmu rozstrzygającego teorię <,+,*,0,1,> dla różnych szczególnych klas formuł, pojawiających się w praktyce.