Logika dla informatyków/Logika w informatyce: Różnice pomiędzy wersjami
m Zastępowanie tekstu – „.↵</math>” na „</math>” |
|||
(Nie pokazano 14 wersji utworzonych przez 4 użytkowników) | |||
Linia 15: | Linia 15: | ||
Logika klasyczna, o której mowa w Wykładzie 1, jest ''logiką dwuwartościową''. | 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 ( | 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ą. | 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ą. | ||
Linia 42: | Linia 42: | ||
{{definicja|13.3|zesiesmieliJ| | {{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 | ''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. | Wywołane w ten sposób zawężenie składni zrekompensujemy niezwłocznie po stronie semantyki. | ||
Linia 51: | Linia 51: | ||
*<math>[[\prooftree p]]_\varrho =\varrho(p)</math>, gdy <math>p</math> jest symbolem zdaniowym; | *<math>[[\prooftree p]]_\varrho =\varrho(p)</math>, gdy <math>p</math> jest symbolem zdaniowym; | ||
*<math>[[\alpha\lor\beta]]_\varrho = F_\land([[\alpha]]_\varrho, [[\beta]]_\varrho)</math>; | *<math>[[\alpha\lor\beta]]_\varrho = F_\land([[\alpha]]_\varrho, [[\beta]]_\varrho)</math>; | ||
Linia 58: | Linia 56: | ||
*<math>[[\alpha\land\beta]]_\varrho = F_\lor([[\alpha]]_\varrho, [[\beta]]_\varrho)</math>; | *<math>[[\alpha\land\beta]]_\varrho = F_\lor([[\alpha]]_\varrho, [[\beta]]_\varrho)</math>; | ||
*<math>[[\lnot\alpha]]_\varrho = F_\lnot([[\alpha]]_\varrho) | *<math>[[\lnot\alpha]]_\varrho = F_\lnot([[\alpha]]_\varrho)</math>. | ||
}} | }} | ||
Linia 198: | Linia 196: | ||
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 | 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 | ||
kwestionariuszy. Odpowiadając na | 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 | ||
zeznań <math>\dots</math> | zeznań <math>\dots</math> | ||
Linia 243: | 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 | trójwartościowych, to przy wzroście liczby wartości | ||
logicznych, liczba sensownych logik | 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 253: | 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 | nieskończenie wiele. Odpowiednio staranne spojrzenie na | ||
Twierdzenie [[#zwawo|11.5]] 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 | 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 264: | Linia 262: | ||
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. | 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ę <math>\Sigma | 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. | ||
Linia 279: | Linia 277: | ||
*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, 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> zależy do zbioru symboli stałych z sygnatury <math>\Sigma | *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. | ||
Semantyka algebry relacyjnej jest następująca: dla danej struktury <math>\mathfrak A</math> nad <math>\Sigma | 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>. | ||
Definicja oczywiście przebiega indukcyjnie względem budowy <math>E | Definicja oczywiście przebiega indukcyjnie względem budowy <math>E</math>. | ||
*Jeśli <math>R</math> należy do <math>\Sigma | *Jeśli <math>R</math> należy do <math>\Sigma</math>, to <math>[[R]]=R^\mathfrak A</math>. | ||
*<math>[[E\cupF]]=[[E]]\cup[[F]]</math> oraz <math>[[E-F]]=[[E]]-[[F]]</math>. | *<math>[[E\cupF]]=[[E]]\cup[[F]]</math> oraz <math>[[E-F]]=[[E]]-[[F]]</math>. | ||
*<math>[[\pi_{i_1,\dots,i_k} 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>[[E\times F]]=[[E]]\times[[F]]= | *<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>. | \{<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>[[\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>[[\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>. | ||
Warto zauważyć, że <math>[[\pi E]]=\{<>\} </math> czyli | 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> | ||
}} | }} | ||
Linia 304: | Linia 302: | ||
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: | 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: | ||
<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\} | <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> | ||
</math> | |||
Intuicyjnie, <math>[[\alpha]]</math> to relacja definiowana przez formułę <math>\alpha</math> w danej strukturze. | Intuicyjnie, <math>[[\alpha]]</math> to relacja definiowana przez formułę <math>\alpha</math> w danej strukturze. | ||
Linia 319: | Linia 316: | ||
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. | 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) | Jednak gdy założymy, że <math>A=ad(\mathfrak A)</math>, to sytuacja sie zmienia. Wyrazem tego jest poniższe twierdzenie. | ||
{{twierdzenie|13.6 (Codd)|codd| | {{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) | #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) | #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 | 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>. | ||
Przy konstrukcji <math>\alpha_E</math> będziemy dbać o to, żeby <math>FV{\alpha_E}=\{x_1,\dots,x_n\} | 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>. | ||
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) | 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>\alpha_{E\cup F}</math> definiujemy jako <math>\alpha_E\lor\alpha_F | <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. | ||
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 | 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>\{1,\dots,n \}-\{i_1,\dots,i_k\} | <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 | ||
<math>\beta(x_1/y_{i_1},\dots,x_k/y_{i_k})</math>. Widać, że ta formuła spełnia | <math>\beta(x_1/y_{i_1},\dots,x_k/y_{i_k})</math>. Widać, że ta formuła spełnia | ||
tezę. | tezę. | ||
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 | 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 | ||
ten sposób, by miały one numery większe niż <math>n+m | 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ę | Niech powstała formuła nazywa się <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ę. | <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łę <math>\alpha_{\sigma_\theta E}</math> jako | Na zakończenie tej cześci dowodu określamy formułę <math>\alpha_{\sigma_\theta E}</math> jako | ||
<math>\alpha_E\land\bigwedge_{'i=j' \in \theta} x_i=x_j\land\bigwedge_{'i=c'\in \theta} x_i=c | <math>\alpha_E\land\bigwedge_{'i=j' \in \theta} x_i=x_j\land\bigwedge_{'i=c'\in \theta} x_i=c</math>. | ||
I tym razem sprawdzenie, że ta formuła spełnia tezę indukcyjną jest natychmiastowe. | 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 | 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. | ||
Zaczynamy od konstrukcji jednoargumentowego wyrażenia <math>AD</math> takiego, że dla każdej struktury <math>\mathfrak A | 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>. | ||
Jest ono <math>\cup</math>-sumą wyrażeń <math>\pi_i R</math> dla wszystkich symboli relacyjnych <math>R</math> w sygnaturze i wszystkich | 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. | ||
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 | ||
Linia 362: | Linia 359: | ||
<math>[[E_\alpha;n]]=\{<a_1,\dots,a_n>\in | <math>[[E_\alpha;n]]=\{<a_1,\dots,a_n>\in | ||
A^n | (\mathfrak A,x_{1}:a_1,\dots,x_{n}:a_n)\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 <math>\alpha</math>. Aby otrzymać <math>E_\alpha</math> wystarczy wziąć rzut | pozwalają zarejestrować indeksy zmiennych wolnych występujących w <math>\alpha</math>. Aby otrzymać <math>E_\alpha</math> wystarczy wziąć rzut | ||
<math>\pi_{I}E_{\alpha;n} | <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>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}) | AD}_{n})</math>. | ||
<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>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>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>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} | E_{\beta;n}</math>, natomiast <math>E_{\lnot\alpha;n}</math> to <math>(\underbrace{AD\times\dots\times AD}_{n})-E_{\alpha;n}</math>. | ||
Wreszcie w wypadku <math>E_{\exists x_i\alpha;n}</math> możemy | Wreszcie w wypadku <math>E_{\exists x_i\alpha;n}</math> możemy bez utraty | ||
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} | 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 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 | 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. | 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. | ||
Linia 391: | Linia 388: | ||
===Rozstrzygalność i nierozstrzygalność teorii=== | ===Rozstrzygalność i nierozstrzygalność teorii=== | ||
W tym rozdziale przedyskutujemy zagadnienie rozstrzygalności teorii matematycznych (rozumianych jako | 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. | ||
{{twierdzenie|13.7|| | {{twierdzenie|13.7|| | ||
Linia 402: | Linia 399: | ||
<math>Th(\mathcal{A})=\{\alpha | \Delta\models\alpha\}</math>, gdzie <math>\Delta</math> to następujący zbiór zdań: | <math>Th(\mathcal{A})=\{\alpha | \Delta\models\alpha\}</math>, gdzie <math>\Delta</math> to następujący zbiór zdań: | ||
<math> | <math> | ||
\forall x\forall y \ (x\leq y \land y\leq x)\to x=y\\ | \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 \forall z\ (x\leq y \land y\leq z)\to x\leq z\\ | ||
Linia 411: | Linia 408: | ||
</math> | </math> | ||
gdzie <math>x<y</math> jest oczywistym skrótem notacyjnym dla formuły <math>x\leq y \land x\neq y | gdzie <math>x<y</math> jest oczywistym skrótem notacyjnym dla formuły <math>x\leq y \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 | \Delta\models\alpha\}=\{\alpha |\Delta\vdash_H\alpha\}</math>. | ||
Pozostaje więc wykazać rozstrzygalność <math>\{\alpha | \Delta\vdash_H\alpha\} | Pozostaje więc wykazać rozstrzygalność <math>\{\alpha | \Delta\vdash_H\alpha\}</math>. | ||
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> | 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". | ||
}} | }} | ||
Linia 424: | 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ć | 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 | 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 | 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. | ||
Linia 436: | Linia 433: | ||
}} | }} | ||
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 | 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. | ||
{{dowod||| | {{dowod||| | ||
Przeprowadzamy redukcję w pamięci logarytmicznej z problemu QBF kwantyfikowanych formuł Boolowskich | Przeprowadzamy redukcję w pamięci logarytmicznej z problemu QBF kwantyfikowanych formuł Boolowskich do naszego problemu. | ||
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ą. | 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ą. | ||
Linia 449: | Linia 446: | ||
*Każdy kwantyfikator <math>\exists p_i</math> zamieniamy na <math>\exists x_i\exists 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' | 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>. | ||
Jest oczywiste, że <math>\alpha''</math> daje się obliczyć z <math>\alpha</math> w logarytmicznej pamięci. | Jest oczywiste, że <math>\alpha''</math> daje się obliczyć z <math>\alpha</math> w logarytmicznej pamięci. | ||
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 < | 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>. | ||
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 463: | Linia 460: | ||
{{twierdzenie|13.9 (Tarski)|| | {{twierdzenie|13.9 (Tarski)|| | ||
Teoria uporządkowanego ciała liczb rzeczywistych, tj. teoria struktury | Teoria uporządkowanego ciała liczb rzeczywistych, tj. teoria struktury | ||
<math> | <math><\mathbb{R},+,*,0,1,\leq></math> 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ć | 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. |
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, 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 jest symbolem zdaniowym;
- ;
- ;
- .
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
- ,
- ,
- ,
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 13.1, 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:
|
|
|
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 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 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:
|
|
|
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 -argumentowej z z wyjątkiem równości jest -argumentowym wyrażeniem AR.
- Jeśli i są -argumentowymi wyrażeniami AR, to też są -argumentowymi wyrażeniami AR.
- Jeśli i są -argumentowymi wyrażeniami AR, to też są -argumentowymi wyrażeniami AR.
- Jeśli jest -argumentowym wyrażeniem AR oraz jest ciągiem różnych ale niekoniecznie wszystkich elementów zbioru , to jest -argumentowym wyrażeniem AR. W szczególności ciąg ten może być pusty, zaś jest wyrażeniem .
- Jeśli jest -argumentowym, zaś jest -argumentowym wyrażeniem AR, to jest -argumentowym wyrażeniem AR.
- Jeśli jest -argumentowym wyrażeniem AR oraz jest zbiorem równości postaci '' lub '', gdzie zaś zależy do zbioru symboli stałych z sygnatury , to jest -argumentowym wyrażeniem AR.
Semantyka algebry relacyjnej jest następująca: dla danej struktury nad , każdemu -argumentowemu wyrażeniu algebry relacyjnej przypisujemy -argumentową relację w .
Definicja oczywiście przebiega indukcyjnie względem budowy .
- Jeśli należy do , to .
- Parser nie mógł rozpoznać (nieznana funkcja „\cupF”): {\displaystyle [[E\cupF]]=[[E]]\cup[[F]]} oraz .
- .
- .
- .
Warto zauważyć, że czyli jest zbiorem złożonym z ciągu pustego, gdy jest niepusty, oraz jest pusty w przeciwnym wypadku. Z kolei
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 , oraz struktury określimy interpretację tej formuły w , oznaczaną , jak następuje:
Intuicyjnie, to relacja definiowana przez formułę w danej strukturze.
Definicja 13.5
Aktywną dziedziną struktury nazwiemy podzbiór 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 , to sytuacja sie zmienia. Wyrazem tego jest poniższe twierdzenie.
Twierdzenie 13.6 (Codd)
- Dla każdego wyrażenia algebry relacyjnej istnieje taka formuła logiki pierwszego rzędu, że dla każdej struktury spełniającej , zachodzi .
- Dla każdej formuły logiki pierwszego rzędu istnieje wyrażenie algebry relacyjnej takie, że dla każdej struktury spełniającej , zachodzi .
Dowód
Obu części twierdzenia będziemy dowodzić przez indukcję ze względu na budowę: w pierwszym punkcie wyrażenia , a w drugim formuły .
Przy konstrukcji będziemy dbać o to, żeby , gdzie to liczba argumentów .
Gdy jest -argumentowym symbolem relacyjnym , to ma postać , a prawdziwość tezy jest oczywista.
definiujemy jako , zaś jako . I w tym przypadku teza jest oczywista.
Aby skonstruować tworzymy formułę , gdzie to wypisane w obojętnej kolejności elementy zbioru . Następnie dokonujemy w niej zamiany nazw zmiennych związanych tak, by ich numery były większe niż , a zmienne wolne przemianowujemy z na . Niech będzie otrzymaną w ten sposób formułą. Wówczas definiujemy jako . Widać, że ta formuła spełnia tezę.
Przy konstrukcji postępujemy następująco: dokonujemy zamiany nazw zmiennych związanych w formule w ten sposób, by miały one numery większe niż , zaś za zmienne wolne podstawiamy kolejno . Niech powstała formuła nazywa się . Wtedy definiujemy jako . Oczyiście ta formuła spełnia tezę.
Na zakończenie tej cześci dowodu określamy formułę jako
.
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 takiego, że dla każdej struktury , mamy .
Jest ono -sumą wyrażeń dla wszystkich symboli relacyjnych w sygnaturze i wszystkich takich, że ma co najmniej argumentów.
Możemy teraz przystąpić do konstrukcji. Dla każdego zadanego nie mniejszego niż wszystkie numery zmiennych wolnych w konstruujemy -argumentowe wyrażenie takie, że
.
Oznacza to, że zawiera dodatkowe współrzędne, które pozwalają zarejestrować indeksy zmiennych wolnych występujących w . Aby otrzymać wystarczy wziąć rzut , gdzie to posortowany rosnąco ciąg numerów zmiennych wolnych , co eliminuje przy okazji zbędne współrzędne.
to .
jest zdefiniowane jako , gdzie jest taką permutacją , która współrzędne mieszcza na pozycjach o kolejnych numerach .
jest zdefiniowane jako , natomiast to .
Wreszcie w wypadku możemy bez utraty
ogólności założyć, że . Wtedy jest zdefiniowane jako .
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 jest zupełna. Ponadto zauważmy, że , 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 jest oczywistym skrótem notacyjnym dla formuły .
Na mocy twierdzenia o pełności .
Pozostaje więc wykazać rozstrzygalność .
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 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 , gdzie , 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 zastępujemy przez . Teraz po kolei zastępujemy kwantyfikatory:
- Każdy kwantyfikator zamieniamy na .
- Każdy kwantyfikator zamieniamy na .
Niech formułą otrzymana po tych operacjach będzie . Wtedy wynikiem naszej redukcji jest formuła .
Jest oczywiste, że daje się obliczyć z w logarytmicznej pamięci.
Widać, że formuły atomowe pełnią rolę zmiennych zdaniowych , przy czym w każdej strukturze o co najmniej dwóch elementach mogą przyjmować obie wartości logiczne. Kwantyfikatory i swoją funkcją wiernie odpowiadają kwantyfikatorom oraz . Z kolei klauzula 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 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ę dla różnych szczególnych klas formuł, pojawiających się w praktyce.