Logika dla informatyków/Logika pierwszego rzędu. Sposób użycia: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Tprybick (dyskusja | edycje)
Tprybick (dyskusja | edycje)
Nie podano opisu zmian
Linia 176: Linia 176:
"''albo''" bywa czasem rozumiane w znaczeniu alternatywy  wykluczającej. My jednak umawiamy się, że rozumiemy je tak samo   
"''albo''" bywa czasem rozumiane w znaczeniu alternatywy  wykluczającej. My jednak umawiamy się, że rozumiemy je tak samo   
jak "''lub''".
jak "''lub''".
====Konfuzje składniowe====
Przy tłumaczeniu z języka polskiego na język logiki formalnej i na odwrót
można  łatwo popełnić błąd nawet wtedy gdy nie powstają problemy semantyczne.
Składnia tych języków jest oparta na innych zasadach. Na przykład te dwa
zdania mają bardzo podobną budowę:
\begin{center}\it
Każdy kot ma wąsy.\\
Pewien kot ma wąsy.
\end{center}
<!--%
-->Ale ich tłumaczenia na język rachunku predykatów nie są już takie podobne:
<!--%
-->\begin{center}\it
<math>\forall x(''Kot''(x) \to ''MaW\hspace{-1mm''\mbox''ą}sy''(x))</math>;\\
<math>\exists x(''Kot''(x) \wedge ''MaW\hspace{-1mm''\mbox''ą}sy''(x))</math>.
\end{center}
Dość częstym błędem jest właśnie mylenie koniunkcji z \rightarrowlikacją
w zasięgu działania kwantyfikatora. A \leftrightarrow inny przykład: Zdania
\hfil ''Liczba <math>n</math> jest parzysta;\/''
\hfil ''Liczba <math>n</math> jest dwukrotnością pewnej liczby\/''
oznaczają to samo. Zaprzeczeniem pierwszego z nich jest oczywiście
zdanie
\hfil ''Liczba <math>n</math> nie jest parzysta\/'',
ale zaprzeczeniem drugiego nie jest zdanie
\hfil ''Liczba <math>n</math> nie jest dwukrotnością pewnej liczby,\/''
otrzymane przecież przez analogiczną operację ,,podstawienia''. Użycie
słowa ,,pewnej'' powoduje bowiem, że to zdanie rozumiemy jako
<math>\exists x(\neg n=2x)</math>, a nie jako <math>\neg \exists x(n=2x)</math>.
Innym popularnym błędem jest mylenie koniunkcji z alternatywą w przesłance
\rightarrowlikacji, zwłaszcza gdy występuje tam negacja. Mamy bowiem skłonność do
powtarzania słowa ,,nie'' w obu członach założenia i nie razi nas zdanie
\hfil {\it Kto nie ma biletu lub nie jest pracownikiem teatru, ten nie
wejdzie na przedstawienie.}
Ale od tekstu matematycznego oczekujemy więcej ścisłości i w takim tekście
zdanie:
\hfil {\it Jeśli <math>x</math> nie jest równe <math>2</math> lub nie jest równe <math>3</math>,
to <math>x^2-5x+6</math> nie jest zerem.}
może wprowadzić czytelnika w błąd. ,,Dosłowne'' tłumaczenie tego zdania
na język logiki predykatów, to przecież formuła
\hfil <math>\neg(x=2)\vee \neg(x=3) \to \neg(x^2-5x+6 = 0)</math>,
a nie formuła
\hfil <math>\neg(x=2\vee x=3)\to \neg(x^2-5x+6 = 0)</math>.
Wielu takich dwuznaczności\boldsymbol{s}}\def\blank{\hbox{\sf Bnikniemy, gdy
przypomnimy sobie, że w języku polskim istnieją takie słowa jak
''ani\/'' i ''żaden\/''.
Język logiki pierwszego rzędu, dzięki możliwości\boldsymbol{s}}\def\blank{\hbox{\sf Bżywania kwantyfikatorów,
jest dośćelastyczny. Można z jego pomocą wyrazić wiele nietrywialnych
własności obiektów matematycznych.
W szczególności interesować nas może ''definiowanie\/''elementów
i wyodrębnianie struktur o&nbsp;pewnych szczególnych własnościach, czy też
formułowanie kryteriów ''odróżniających\/''
jakieś struktury od innych.
{{przyklad||drzwizamknela|
Przypuśćmy, że sygnatura sk{ł}ada się z&nbsp;dwóch jednoargumentowych symboli
relacyjnych&nbsp;<math>R</math> i&nbsp;<math>S</math>,
dwuargumentowego symbolu funkcyjnego&nbsp;<math>f</math> i jednoargumentowego
symbolu funkcyjnego&nbsp;<math>g</math>. Wtedy formuła
<!--%
--><center><math>\forall x\forall y(R(x)\wedge S(y)\to R(f(x,y))\wedge S(f(x,y))</math></center>
<!--%
-->jest prawdziwa dokładnie w tych modelach <math>\A = \<A, f^\A, g^\A, R^\A, S^\A\></math>,
w&nbsp;których obraz iloczynu
kartezjańskiego <math>R^\A\times S^\A</math> przy przekształceniu&nbsp;<math>f</math> zawiera
się w zwykłym iloczynie \mbox{<math>R^\A\cap S^\A</math>}.
}}
{{przyklad||malpa|
Teraz niech nasza sygnatura składa się z jednej operacji dwuargumentowej
<math>\cdot</math> i&nbsp;z&nbsp;jednej stałej <math>\varepsilon</math>. Zdanie
<!--%
--></math></center>\exists x_1\exists x_2\forall y(\forall z_1\forall z_2(y=z_1\cdot z_2 \to
y=z_1\vee y=z_2)\to y=x_1\vee y=x_2\vee y=\varepsilon)</math></center>
<!--%
-->jest prawdziwe w strukturze <math>\<\{a,b\}^*, \cdot, \varepsilon\></math> słów nad
alfabetem <math>\{a,b\}^*</math> z konkatenacją i słowem pustym,
ale nie w modelu słów nad alfabetem
trzyliterowym <math>\<\{a,b,c\}^*, \cdot, \varepsilon\></math>. Inaczej mówiąc, nasze
zdanie ''rozróżnia\/'' te dwie struktury.
}}
Niestety, konsekwencją znacznej siły wyrazu logiki pierwszego rzędu jest
jej nierozstrzygalność. Dokładniej, nierozstrzygalny jest następujący
problem decyzyjny:\footnote{W istocie, nazwa ,,problem decyzyjny''
(Entscheidungsproblem) została\boldsymbol{s}}\def\blank{\hbox{\sf Bżyta po raz pierwszy właśnie w&nbsp;tym
kontekście.} {\it Czy dana formuła logiki pierwszego rzędu jest
tautologią?\/} Aby wykazać, że tak jest, posłużymy się znaną nam
nierozstrzygalnością problemu stopu dla maszyn Turinga.
Przypomnijmy, że (deterministyczną, jednotaśmową)
''maszynę Turinga nad alfabetem&nbsp;<math>\A</math>\/'' można zdefiniować
jako krotkę <math>\M = \<\Delta, Q, \delta, q_0, q_a\></math>, gdzie:
<!--%
-->
*<math>\Delta</math> jest skończonym alfabetem, zawierającym&nbsp;<math>\A</math>
oraz symbol&nbsp;<math>\blank\not\in \A</math> (blank);
*<math>Q</math> jest skończonym zbiorem ''stanów'';
*<math>q_0\in Q</math> jest stanem ''początkowym'';
*<math>q_f\in Q</math> jest stanem ''końcowym'' lub
''akceptującym\/'';
*<math>\delta :(Q -\{q_f\})\times\Delta \to \Delta\times Q\times\{-1,0,+1\}</math>
jest ''funkcją przejścia''.
Zakładając, że zbiory <math>\Delta</math> i <math>Q</math> są rozłączne, można zdefiniować
''konfigurację\/'' maszyny jako słowo postaci&nbsp;<math>wqv</math>, gdzie&nbsp;<math>q\in Q</math>
oraz <math>w,v\in\Delta^*</math>, przy czym\boldsymbol{s}}\def\blank{\hbox{\sf Btożsamiamy konfiguracje&nbsp;<math>wqv</math>
i <math>wqv\blank</math>.
<!--%% (Zawsze można więc zakładać, że słowo&nbsp;<math>v</math> nie kończy się blankiem.)
-->Interpretacja tej definicji jest następująca. Taśma maszyny jest nieskończona
w prawo. Na początku taśmy zapisane jest słowo <math>wv</math>, dalej w&nbsp;prawo
są same blanki, a głowica maszyny ,,patrzy''
na pierwszy znak na prawo od&nbsp;<math>w</math>. Konfigurację
postaci&nbsp;<math>\C_w = q_0w</math>, gdzie <math>w\in \A</math>, nazywamy ''początkową\/'',
a&nbsp;konfigurację postaci&nbsp;<math>wq_fv</math> nazywamy ''końcową\/'' lub
''akceptującą\/''.
\bigbreak
Relację <math>\to_\M</math> na konfiguracjach definiuje się tak:
*Jeśli <math>\delta(q,a)=(b,p,+1)</math> to <math>wqav \to_\M wbpv</math>;
*Jeśli <math>\delta(q,a)=(b,p,0)</math> to <math>wqav \to_\M wpbv</math>;
*Jeśli <math>\delta(q,a)=(b,p,-1)</math> to <math>wcqav \to_\M wpcbv</math>
oraz <math>qav\to_\M pbv</math> (gdy ruch w lewo jest niemożliwy.)
Symbolem <math>\rarrow_\M</math> oznaczamy przechodnio-zwrotne domknięcie
relacji&nbsp;<math>\to_\M</math>. Jeżeli&nbsp;<math>\C_w\rarrow_\M \C'</math>, gdzie&nbsp;<math>\C'</math> jest
konfiguracją akceptującą to mówimy, że maszyna ''akceptuje\/'' słowo&nbsp;<math>w</math>.
W naszej konstrukcji skorzystamy z następującej postaci problemu stopu:
''Czy dana maszyna Turinga akceptuje słowo puste?'' Nietrudno jest
zredukować do niego ogólny przypadek problemu stopu (ćwiczenie).
Następujący lemat będzie przydatny w dowodzie nierozstrzygalności.
\begin{lemat} <span id="nieKronecker" \> \parskip=2pt
Niech <math>\vartheta</math> oznacza koniunkcję następujących formuł
*<math>\forall y \neg P(y,c)</math>
*<math>\forall x\exists y P(x,y)</math>
*<math>\forall x\forall y (P(x,y)\to R(x,y))</math>
*<math>\forall x\forall y\forall z(R(x,y)\to (R(y,z)\to R(x,z)))</math>
*<math>\forall x\neg R(x,x)</math>
Zdanie <math>\vartheta</math> jest spełnialne, a każdy jego model <math>\strA</math>
zawiera nieskończony ciąg różnychelementów <math>c^\strA=a_0, a_1, a_2,\ldots</math>,
takich że <math>(a_i,a_{i+1})\in P^\strA</math> dla każdego <math>i</math>.
\end{lemat}
{{dowod||
}}
{{twierdzenie||entscheidungsproblem|
Nie istnieje algorytm rozstrzygający czy dana formuła logiki pierwszego rzędu
jest tautologią.
}}{{dowod||
Naszym celem jestefektywna konstrukcja, która dla dowolnej maszyny
Turinga&nbsp;<math>\M</math>\boldsymbol{s}}\def\blank{\hbox{\sf Btworzy formułę <math>\var\varphi_\M</math> o takiej własności:
\hfil ''<math>\M</math> akceptuje słowo puste'' \quad \wtw, gdy\quad
''<math>\var\varphi_\M</math> jest tautologią. ''
Stąd natychmiast wynika teza twierdzenia. W przeciwnym razie
taka konstrukcja pozwalałaby bowiem na rozstrzyganie problemu stopu.
W istocie, wygodniej będzie skonstruować taką formułę <math>\psi_\M</math>, że
\hfil ''<math>\M</math> zapętla się na słowie pustym''
\quad \wtw, gdy\quad ''<math>\psi_\M</math> jest spełnialna,''
i na koniec przyjąć <math>\var\varphi_\M=\neg \psi_\M</math>. Sygnatura naszej formuły
będzie zależała od maszyny <math>\M</math> (bo tak jest łatwiej) chociaż tak być nie musi
(Ćwiczenie&nbsp;[[#stalasygnatura]]). Składa się ona z:
*jednoargumentowych symboli relacyjnych <math>S_q</math>, dla wszystkich
stanów <math>q\in Q</math>;
*dwuargumentowych symboli relacyjnych <math>C_a</math>,
dla wszystkich symboli <math>a\in\Delta</math>;
*dwuargumentowego symbolu relacyjnego <math>G</math>;
*stałej <math>c</math> i symboli <math>P</math> i <math>Q</math>
występujących w formule <math>\vartheta</math> z Lematu&nbsp;[[#nieKronecker]].
Formuła <math>\var\varphi_\M</math> jest koniunkcją złożoną z wielu składowych, które
teraz opiszemy. Pierwszą składową jest formuła <math>\vartheta</math>
z Lematu&nbsp;[[#nieKronecker]]. Każdy model tej formuły zawiera
różnowartościowy ciąg <math>a_0, a_1, a_2,\ldots</math>, który posłuży nam
jako substytut ciągu liczb naturalnych (oelemencie <math>a_i</math> myślimy
jak o liczbie&nbsp;<math>i</math>). Intuicyjny sens formuł atomowych naszej
sygnatury jest taki:
*Formułę <math>S_q(x)</math> czytamy: po <math>x</math> krokach obliczenia
maszyna jest w stanie <math>q</math>.
*Formułę <math>G(x,y)</math> czytamy: po <math>x</math> krokach
głowica maszyny znajduje się w pozycji <math>y</math>.
*Formułę <math>C_a(x,y)</math> czytamy: po <math>x</math> krokach na pozycji
<math>y</math> znajduje się symbol&nbsp;<math>a</math>.
Dalsze składowe naszej formuły <math>\var\varphi_\M</math> są tak dobrane, aby każdy
jej model reprezentował nieskończone obliczenie maszyny zaczynające
się od słowa pustego. \Leftrightarrow te składowe:
#<math>S_{q_0}(c)\wedge G(c,c)\wedge \forall x\,C_{\sf B}(c,x)</math>;
#<math>\forall x(\bigvee_{q\in Q}S_q(x))</math>;
#<math>\forall x(S_q(x)\to\neg S_{p}(x))</math>, dla <math>q,p\in Q</math>, <math>q\neq p</math>;
#<math>\forall x\forall y(\bigvee_{a\in\Delta}C_a(x,y))</math>;
#<math>\forall x\forall y(C_a(x,y)\to\neg C_b(x,y))</math>, dla <math>a,b\in\Delta</math>,
<math>a\neq b</math>;
#<math>\forall x\exists y\,G(x,y)</math>;
#<math>\forall x\forall y\forall z(G(x,y)\wedge G(x,z)\to y=z)</math>;
#</math>\forall x\forall y\forall z(S_q(x)\wedge G(x,y)\wedge C_a(x,y)
\wedge P(x,z)\to S_p(z)\wedge C_b(z,y))</math>, gdy <math>\delta(q,a)=(p,b,i)</math>;
#</math>\forall x\forall y\forall z(\neg G(x,y)\wedge C_a(x,y) \wedge P(x,z)
\to C_a(z,y))</math>;
#</math>\forall x\forall y\forall z\forall v(S_q(x)\wedge G(x,y)\wedge P(x,z)
\wedge P(y,v)\to G(z,v))</math>, gdy <math>\delta(q,a)=(p,b,+1)</math>;
#</math>\forall x\forall y\forall z(S_q(x)\wedge G(x,y)\wedge P(x,z)
\to G(z,y))</math>, gdy <math>\delta(q,a)=(p,b,0)</math>;
#</math>\forall x\forall y\forall z\forall v(S_q(x)\wedge G(x,y)\wedge P(x,z)
\wedge P(v,y)\to G(z,v))</math>, gdy <math>\delta(q,a)=(p,b,-1)</math>;
#</math>\forall x\forall y\forall z\forall v(S_q(x)\wedge G(x,c)\wedge P(x,z)
\to G(z,c))</math>, gdy <math>\delta(q,a)=(p,b,-1)</math>;
#<math>\forall x\neg S_{q_f}(x)</math>.
Przypuśćmy teraz, że maszyna <math>\M</math> ma nieskończone obliczenie dla
pustego słowa wejściowego. Zbudujemy model <math>\strA</math> dla
formuły <math>\var\varphi_\M</math>. Dziedziną tego modelu jest zbiór <math>\NN</math>
liczb naturalnych. Stałą <math>c</math> interpretujemy jako zero, relacja
<math>P^\strA</math> to relacja następnika, a <math>R^\strA</math> to (ostra) relacja mniejszości.
Relacje <math>S_q^\A</math>, <math>C_a^\A</math> i <math>G^\A</math> określamy zgodnie z ich intuicyjną
interpretacją na podstawie przebiegu nieskończonego obliczenia maszyny.
Nietrudno się przekonać, że wszystkie człony koniunkcji są prawdziwe
w&nbsp;<math>\strA</math>, czyli zdanie&nbsp;<math>\var\varphi_\M</math> jest spełnialne.
Przystąpmy więc do trudniejszej części dowodu. Załóżmy mianowicie,
że <math>\strA\models\var\varphi_\M</math> dla pewnej struktury&nbsp;<math>\strA</math>. Wtedy także
<math>\strA\models\vartheta</math>, niech więc
<math>a_i</math> będąelementami <math>\strA</math>, o których mowa w&nbsp;Lemacie&nbsp;[[#nieKronecker]].
Struktura <math>\strA</math> spełnia też wszystkie pozostałe składowe
formuły&nbsp;<math>\var\varphi_\M</math>. Składowe (2) i&nbsp;(3) gwarantują, że każdy zelementów
<math>a_i</math> należy do dokładnie jednej z relacji&nbsp;<math>S_q</math>. Podobnie, każda para
<math>(a_i,a_j)</math> należy do dokładnie jednej z relacji&nbsp;<math>C_a</math>, oraz każde <math>a_i</math>
jest w relacji <math>G</math> z&nbsp;dokładnie jednymelementem struktury&nbsp;<math>\strA</math> --- tu
używamy składowych (4)--(7).
Rozpatrzmy obliczenie maszyny <math>\M</math> dla słowa pustego. Pokażemy, że jest
to obliczenie nieskończone.
Jeśli obliczenie maszyny&nbsp;<math>\M</math> składa się z co najmniej <math>n</math> kroków,
to przez <math>q_n</math> oznaczmy stan, w&nbsp;którym znajduje się maszyna&nbsp;<math>\M</math>
po wykonaniu tych <math>n</math> kroków, a przez <math>k_n</math> pozycję głowicy w&nbsp;tym
momencie. Zawartością <math>m</math>-tej komórki taśmy po <math>n</math>-tym kroku obliczenia
niech zaś będzie symbol&nbsp;<math>b_{nm}</math>.
Przez indukcję \zwn&nbsp;<math>n</math> dowodzimy, że dla dowolnego <math>n\in\NN</math>
obliczenie składa się z co najmniej <math>n</math> kroków, oraz:
\hfil <math>a_n\in S_{q_n}^\strA</math>\qquad <math>(a_n,a_m)\in C_{b_{nm}}^\strA</math>
\qquad<math>(a_n,a_{k_n})\in G^\strA</math>.
Inaczej mówiąc, model <math>\strA</math> prawidłowo reprezentuje kolejne konfiguracje
maszyny. Dla <math>n=0</math> powyższe związki wynikają wprost z prawdziwości członu (1)
naszej koniunkcji. W kroku indukcyjnym skorzystamy
przede wszystkim z członu (14), który gwarantuje, że stan <math>q_n</math> nie
jest końcowy. Określona jest więc wartość funkcji przejścia
<math>\delta(q_n,b_{mk_n})</math>. Możemy więc odwołać się do składowych
(9--12), które zapewniają poprawną zmianę stanu i symbolu pod głowicą&nbsp;(8),
zachowanie bez zmian reszty taśmy (9) i przesunięcie głowicy (10--12).
Szczegóły dowodu pozostawiamy Czytelnikowi.
}}
Twierdzenie&nbsp;[[#entscheidungsproblem]] można wzmocnić, pokazując
(Ćwiczenie&nbsp;[[#stalasygnatura]]), że problem jest nierozstrzygalny
nawet dla formuł nad pewną\boldsymbol{s}}\def\blank{\hbox{\sf Bstaloną sygnaturą. W istocie, jest tak
dla większości sygnatur, z wyjątkiem bardzo ,,ubogich'' przypadków.
Dwa takie przypadki są przedmiotem Ćwiczeń&nbsp;[[#rJ1]] i&nbsp;[[#rJ2]]
do Rozdziału&nbsp;[[#trzynasty]].
\subsection*{Ćwiczenia}\begin{small}
#Stosując schematy&nbsp;([[#trk6]]--[[#9]]) z Faktu&nbsp;[[#teerka]],
pokazać, że następujące formuły są tautologiami:
##</math>(\exists y p(y) \to \forall z q(z)) \to
\forall y\forall z(p(y)\to q(z))</math>; %95b
##</math>(\forall x\exists y r(x,y) \to \exists x\forall y r(y,x))\to
\exists x\forall y(r(x,y) \to r(y,x))</math>; %99a
##</math>\forall x\exists y((p(x)\to q(y))\to r(y))
\to ((\forall x p(x)\to \forall y q(y))\to \exists y r(y))</math>; %109a
##</math>\forall x(p(x)\to \exists y q(y))\to
\exists y(\exists x p(x)\to q(y))</math>.% 110a
\item Jak rozumiesz następujące zdania? Jak je sformułować, żeby nie
budziły wątpliwości?
#''Nie wolno pić i grać w karty.''
#''Nie wolno pluć i łapać.''
#''Zabrania się zaśmiecania i zanieczyszczania drogi.''\footnote{Kodeks
Drogowy przed nowelizacją w roku 1997.}
#{\it Zabrania się zaśmiecania lub zanieczyszczania
drogi.}\footnote{Kodeks Drogowy po nowelizacji w roku 1997.}
#{\it Wpisać, gdy osoba\boldsymbol{s}}\def\blank{\hbox{\sf Bbezpieczona nie posiada numerów identyfikacyjnych
NIP lub \mbox{PESEL}.}\footnote{Instrukcja wypełniania formularza ZUS ZCZA
(Zgłoszenie danych o członkach rodziny\dots)}
#{\it Podaj przykład liczby, która jest pierwiastkiem pewnego
równania kwadratowego o&nbsp;współczynnikach
całkowitych i takiej, która nie jest.}
#''Warunek zachodzi dla każdego <math>x</math> i dla pewnego <math>y</math>.\/''
\item Czy następujące definicje można lepiej sformułować?
#''Zbiór <math>A</math> jest {\sf dobry}, jeśli ma co najmniej 2elementy.''
#''Zbiór <math>A</math> jest {\sf dobry'', jeśli dla każdego <math>x\in A</math>,
jeśli <math>x</math> jest parzyste, to <math>x</math> jest podzielne przez&nbsp;<math>3</math>.}
#''Zbiór <math>A</math> jest {\sf dobry'', jeśli dla pewnego <math>x\in A</math>,
jeśli <math>x</math> jest parzyste, to <math>x</math> jest podzielne przez&nbsp;<math>3</math>.}
\item Wskazać  błąd w rozumowaniu:
#{\it Aby wykazać prawdziwość tezy\\
{\sf ,,Dla dowolnego <math>n</math>, jeśli
zachodzi warunek <math>W(n)</math> to zachodzi warunek <math>U(n)</math>''}\\
załóżmy, że dla
dowolnego <math>n</math> zachodzi <math>W(n)</math>\dots}
#{\it Aby wykazać prawdziwość tezy\\
{\sf ,,Dla pewnego <math>n</math>, jeśli
zachodzi warunek <math>W(n)</math> to zachodzi warunek <math>U(n)</math>''}\\
załóżmy, że dla
pewnego <math>n</math> zachodzi <math>W(n)</math>\dots}
\item Sformułować poprawnie zaprzeczenia stwierdzeń:
*''Liczby <math>m</math> i <math>n</math> są pierwsze.''
*''Liczby <math>m</math> i <math>n</math> są względnie pierwsze.''
\item Czy zdanie {\it ,,Liczba&nbsp;<math>a</math> nie jest kwadratem pewnej liczby
całkowitej''\/}
jest poprawnym zaprzeczeniem zdania {\it ,,Liczba&nbsp;<math>a</math> jest kwadratem
pewnej liczby całkowitej''\/}?
\item
Sygnatura <math>\Sigma</math> składa się z symboli
<math>r, s \in \Sigma^R_1</math>, <math>R, S \in \Sigma^R_2</math> i <math>g\in \Sigma_2^F</math>.
Napisać takie zdania <math>\var\varphi</math>&nbsp;i&nbsp;<math>\psi</math>,&nbsp;że:%61 jest rozwiazanie
#zdanie <math>\var\varphi</math> jest prawdziwe dokładnie w&nbsp;tych modelach
<math>\A = \<A, R^\A, S^\A, r^\A, s^\A, g^\A\></math>,
w&nbsp;których obie relacje <math>R^\A</math>, <math>S^\A</math>
są przechodnie, ale ich suma nie jest przechodnia;
#zdanie  <math>\psi</math> jest prawdziwe dokładnie w&nbsp;tych modelach
<math>\A = \<A, R^\A, S^\A,  r^\A, s^\A, g^\A\></math>,
w&nbsp;których <math>s^\A</math> jest obrazem iloczynu
kartezjańskiego <math>r^\A\times r^\A</math> przy funkcji <math>g^\A</math>.
\item  Sygnatura <math>\Sigma</math> składa się z dwuargumentowych symboli
relacyjnych <math>r</math> i&nbsp;<math>s</math> oraz dwuargumentowego symbolu funkcyjnego&nbsp;<math>f</math>.
Napisać (możliwie najkrótsze) zdanie, które jest prawdziwe dok{ł}adnie
w&nbsp;tych modelach%77 jest rozwiazanie
<math>\A = \<A, r^{\A}, s^{\A}, f^{\A}\></math>, w&nbsp;których:
#Złożenie relacji <math>r^{\A}</math> i <math>s^{\A}</math> zawiera się w ich iloczynie
<math>r^\A\cap s^\A</math>;
#Zbiór wartości funkcji&nbsp;<math>f^{\A}</math> jest rzutem sumy <math>r^\A\cup s^\A</math> na
pierwszą współrzędną;
#Relacja <math>r^\A</math> nie jest funkcją z&nbsp;<math>A</math> w&nbsp;<math>A</math>;
#Obraz <math>r^\A</math> przy funkcji&nbsp;<math>f^\A</math> jest podstrukturą w&nbsp;<math>\A</math>;
#Obraz zbioru <math>A\times A</math> przy funkcji&nbsp;<math>f^\A</math> jest pusty.
\item
Dla każdej z par struktur:
#<math>\<\NN,\leq\></math> i <math>\<\{m-{1\over n}\ |\ m,n\in\NN-\{0\}\}, \leq\></math>;
#<math>\<\NN, +\></math> i <math>\<\ZZ, +\></math>;
#<math>\<\NN, \leq\></math> i <math>\<\ZZ, \leq\></math>,
wskaż zdanie prawdziwe w jednej z nich a w drugiej nie.
\item Napisać takie zdania <math>\var\varphi</math> i&nbsp;<math>\psi</math>, że:
#zdanie <math>\var\varphi</math> jest prawdziwe w&nbsp;modelu <math>\A = \<\ZZ, +, 0 \></math>,
ale nie w&nbsp;modelu <math>\B = \<\NN, +, 0 \></math>;
#zdanie  <math>\psi</math> jest prawdziwe w&nbsp;modelu <math>\B = \<\ZZ, +, 0 \></math>,
ale nie w&nbsp;modelu <math>\C = \<\QQ, +, 0 \></math>.
\item Wskazać formułę pierwszego rzędu:
#spełnialną w
ciele liczb rzeczywistych ale nie w ciele liczb wymiernych;
#spełnialną w algebrze <math>\NN</math> z mnożeniem,
ale nie w algebrze <math>\NN</math> z dodawaniem;
#spełnialną w <math>\<\{a,b\}^*,\cdot,\varepsilon\></math>
ale nie w <math>\<\{a,b,c\}^*,\cdot,\varepsilon\></math>.
\item <span id="bezrownosci" \> Zmodyfikować konstrukcję
z dowodu Twierdzenia&nbsp;[[#entscheidungsproblem]] w ten sposób,
aby w formule  <math>\psi_\M</math> nie występował symbol równości
ani stała </math>c<math>. %%{1. Napisać </math>\forall x\forall y\forall z(G(x,y)\wedge
<!--%% R(y,z)\to \neg G(x,z))</math>.\quad
--><!--%% 2. Użyć wszędzie prefiksu <math>\forall x(\forall y \neg P(y,x)\to \cdots)</math>.}
-->\item <span id="stalasygnatura" \>  Zmodyfikować konstrukcję
z dowodu Twierdzenia&nbsp;[[#entscheidungsproblem]] w ten sposób,
aby <math>\psi_\M</math> była zawsze formułą\boldsymbol{s}}\def\blank{\hbox{\sf Bstalonej sygnatury (niezależnej
od maszyny&nbsp;<math>\M</math>). Wywnioskować stąd, że logika pierwszego rzędu
nad tą\boldsymbol{s}}\def\blank{\hbox{\sf Bstaloną sygnaturą jest nierozstrzygalna.
\end{small}

Wersja z 21:52, 21 wrz 2006

Logika pierwszego rzędu. Sposób użycia.

Przyjrzyjmy się teraz kilku ważnym tautologiom.

Fakt

Następujące formuły są tautologiami (dla dowolnych Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} i ψ).

  1. Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \forall x(\var\varphi\to\psi)\to(\exists x\var\varphi\to\exists x\psi)} ;
  2. xφφ, o ile x∉FV(φ);
  3. φ[x:=s]xφ;
  4. ¬xφx¬φ;
  5. ¬xφx¬φ;
  6. x(φψ)xφxψ;
  7. x(φψ)xφxψ;
  8. x(φψ)φxψ,o ile x∉FV(φ);
  9. x(φψ)φxψ, o ile x∉FV(φ);
  10. xφxφ;
  11. xyφyxφ;
  12. xyφyxφ;
  13. xyφyxφ;

Dowód

Ćwiczenie.

Formuły (1-3) powyżej wyrażają własności kwantyfikatora szczegółowego i są odpowiednikami formuł z Faktu 2.7. Zauważmy, że zamiast rozdzielności kwantyfikatora szczegółowego, mamy tu jeszcze jedno prawo rozkładu kwantyfikatora ogólnego. Zakłóca to nieco symetrię pomiędzy i , wyrażoną prawami de Morgana (4) i (4).

Kolejne dwie tautologie przypominają o bliskim związku kwantyfikatora ogólnego z koniunkcją i kwantyfikatora szczegółowego z alternatywą. (Uwaga: zmienna x może być wolna w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi}ψ.) Analogiczna rozdzielność kwantyfikatora ogólnego względem alternatywy (8) i kwantyfikatora szczegółowego względem koniunkcji (9) nie zawsze jest prawdą, ale zachodzi pod warunkiem, że zmienna wiązana kwantyfikatorem nie występuje w jednym z członów formuły. (Prawo (8) nazywane bywa prawem Grzegorczyka.)

Formuła (10) jest odbiciem naszego założenia o niepustości świata. Jest to tautologia, ponieważ umówiliśmy się, że rozważamy tylko struktury o niepustych nośnikach.

Prawa (11)--(13) charakteryzują możliwości permutowania kwantyfikatorów. Implikacja odwrotna do (13) zazwyczaj nie jest tautologią.

Stosując równoważności (4--[9) możemy każdą formułę sprowadzić do postaci, w której wszystkie kwantyfikatory znajdują się na początku.

Definicja 3.2

Mówimy, że formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest w preneksowej postaci normalnej, gdy

Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi = Q_1y_1Q_2y_2\ldots Q_ny_n\,\psi} ,

gdzie każde z Qi to lub , a ψ jest formułą otwartą. (Oczywiście n może być zerem.)

Fakt 3.3

Dla każdej formuły pierwszego rzędu istnieje równoważna jej formuła w preneksowej postaci normalnej.

Dowód

Indukcja (ćwiczenie).

Przykład 3.3

Formuła yp(y)zq(z) jest równoważna każdej z następujących formuł:

¬yp(y)zq(z);

y¬p(y)zq(z);

y(¬p(y)zq(z));

yz(¬p(y)q(z));

yz(p(y)q(z)).


Logika formalna i język polski

Systemy logiki formalnej są, jak już mówiliśmy, tylko pewnymi modelami, czy też przybliżeniami rzeczywistych sposobów wyrażania różnych stwierdzeń i wnioskowania o ich poprawności. Poziom dokładności takich przybliżeń może być większy lub mniejszy. Większy tam, gdzie mamy do czynienia z dobrze określoną teorią matematyczną, lub językiem programowania. Mniejszy wtedy, gdy używamy logiki do weryfikacji poprawności stwierdzeń języka potocznego, choćby takiego jak podręcznikowy przykład: Janek idzie do szkoły. Oczywiście przypisanie temu stwierdzeniu wartości logicznej jest zgoła niemożliwe, nie wiemy bowiem, który Janek do jakiej ma iść szkoły i czy może już doszedł? Więcej sensu ma zastosowanie logiki predykatów do analizy np. takiego rozumowania:

Każdy cyrulik sewilski goli tych wszystkich mężczyzn w Sewilli, którzy się sami nie golą.

Ale nie goli żadnego z tych, którzy golą się sami.

A zatem w Sewilli nie ma ani jednego cyrulika.


W tym przypadku aparat logiki formalnej może być pomocny. Łatwiej zrozumieć o co chodzi, tłumacząc nasz problem na język logiki predykatów, i przedstawiając go jako pytanie o poprawność pewnego stwierdzenia postaci Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \Gamma \models\var\varphi} . Można więc zapytać, czy

x(C(x)S(x)y(G(x,y)S(y)¬G(y,y)))¬x(C(x)S(x))?

Stwierdziwszy poprawność powyższego stwierdzenia, wywnioskujemy, że w Sewilli cyrulika nie ma. I będzie to wniosek ... błędny, bo cyrulik być może jest kobietą.

W powyższym przykładzie po prostu źle\boldsymbol{s}}\def\blank{\hbox{\sf Bstalono logiczną interpretację naszego zadania, zapominając o jednym z jego istotnychelementów. Błąd ten można łatwo naprawić, co jest zalecane jako ćwiczenie. Ale nie zawsze język logiki formalnej wyraża ściśle to samo, co p\leftrightarrowczny język polski, a nawet język w którym pisane są prace matematyczne. Zarówno składnia jak i semantyka tych języków rządzi się zupełnie innymi prawami, i o tym należy pamiętać tłumacząc jeden na drugi.


Implikacja materialna i związek przyczynowo-skutkowy

Implikacja, o której mówimy w logice klasycznej to tzw. implikacja materialna. Wartość logiczna, którą przypisujemy wyrażeniu Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi \to\psi} zależy wyłącznie od wartości logicznych przypisanych jego częściom składowym Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} i ψ. Nie zależy natomiast zupełnie od treści tych wyrażeń, czy też jakichkolwiek innych związków pomiędzy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} i ψ. W szczególności, wypowiedzi Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi}ψ mogą mówić o zajściu jakichś zdarzeń i wtedy wartość logiczna implikacji Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi\to\psi} nie ma nic wspólnego z ichewentualnym następstwem w czasie, lub też z tym, że jedno z tych zdarzeń spowodowało drugie. W języku polskim stwierdzenie "jeśli Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} to ψ" oczywiście sugeruje taki związek, np. w zdaniu:

Jeśli zasilanie jest włączone, to terminal działa.

Tymczasem implikacja materialna nie zachodzi, o czym dobrze wiedzą użytkownicy terminali. Co więcej, w istocie materialną prawdą jest stwierdzenie odwrotne:

Jeśli terminal działa to zasilanie jest włączone.

Natomiast zdanie

Terminal działa, ponieważ zasilanie jest włączone,

stwierdza nie tylko związek przyczynowo-skutkowy, ale też faktyczne zajście wymienionych zdarzeń i w ogóle nie ma odpowiednika w logice klasycznej.

Inne spójniki w mniejszym stopniu grożą podobnymi nieporozumieniami. Ale na przykład spójnik "i"" w języku polskim może też sugerować następstwo czasowe <ref name="szesc">W językach programowania jest podobnie, ale to już inna historia.</ref> zdarzeń: "Poszedł i zrobił." A wyrażenie "A, chyba że B" ma inny odcień znaczeniowy niż proste "A lub B". Przy tej okazji zwróćmy uwagę na to, że słowo "albo" bywa czasem rozumiane w znaczeniu alternatywy wykluczającej. My jednak umawiamy się, że rozumiemy je tak samo jak "lub".


Konfuzje składniowe

Przy tłumaczeniu z języka polskiego na język logiki formalnej i na odwrót można łatwo popełnić błąd nawet wtedy gdy nie powstają problemy semantyczne. Składnia tych języków jest oparta na innych zasadach. Na przykład te dwa zdania mają bardzo podobną budowę:


\begin{center}\it Każdy kot ma wąsy.\\ Pewien kot ma wąsy. \end{center} Ale ich tłumaczenia na język rachunku predykatów nie są już takie podobne: \begin{center}\it Parser nie mógł rozpoznać (błąd składni): {\displaystyle \forall x(''Kot''(x) \to ''MaW\hspace{-1mm''\mbox''ą}sy''(x))} ;\\ Parser nie mógł rozpoznać (błąd składni): {\displaystyle \exists x(''Kot''(x) \wedge ''MaW\hspace{-1mm''\mbox''ą}sy''(x))} . \end{center} Dość częstym błędem jest właśnie mylenie koniunkcji z \rightarrowlikacją w zasięgu działania kwantyfikatora. A \leftrightarrow inny przykład: Zdania

\hfil Liczba n jest parzysta;\/

\hfil Liczba n jest dwukrotnością pewnej liczby\/

oznaczają to samo. Zaprzeczeniem pierwszego z nich jest oczywiście zdanie

\hfil Liczba n nie jest parzysta\/,

ale zaprzeczeniem drugiego nie jest zdanie

\hfil Liczba n nie jest dwukrotnością pewnej liczby,\/

otrzymane przecież przez analogiczną operację ,,podstawienia. Użycie słowa ,,pewnej powoduje bowiem, że to zdanie rozumiemy jako x(¬n=2x), a nie jako ¬x(n=2x).

Innym popularnym błędem jest mylenie koniunkcji z alternatywą w przesłance \rightarrowlikacji, zwłaszcza gdy występuje tam negacja. Mamy bowiem skłonność do powtarzania słowa ,,nie w obu członach założenia i nie razi nas zdanie

\hfil {\it Kto nie ma biletu lub nie jest pracownikiem teatru, ten nie wejdzie na przedstawienie.}

Ale od tekstu matematycznego oczekujemy więcej ścisłości i w takim tekście zdanie:

\hfil {\it Jeśli x nie jest równe 2 lub nie jest równe 3, to x25x+6 nie jest zerem.}

może wprowadzić czytelnika w błąd. ,,Dosłowne tłumaczenie tego zdania na język logiki predykatów, to przecież formuła

\hfil ¬(x=2)¬(x=3)¬(x25x+6=0),

a nie formuła

\hfil ¬(x=2x=3)¬(x25x+6=0).

Wielu takich dwuznaczności\boldsymbol{s}}\def\blank{\hbox{\sf Bnikniemy, gdy przypomnimy sobie, że w języku polskim istnieją takie słowa jak ani\/ i żaden\/.


Język logiki pierwszego rzędu, dzięki możliwości\boldsymbol{s}}\def\blank{\hbox{\sf Bżywania kwantyfikatorów, jest dośćelastyczny. Można z jego pomocą wyrazić wiele nietrywialnych własności obiektów matematycznych. W szczególności interesować nas może definiowanie\/elementów i wyodrębnianie struktur o pewnych szczególnych własnościach, czy też formułowanie kryteriów odróżniających\/ jakieś struktury od innych.

Przykład


Przypuśćmy, że sygnatura sk{ł}ada się z dwóch jednoargumentowych symboli relacyjnych RS, dwuargumentowego symbolu funkcyjnego f i jednoargumentowego symbolu funkcyjnego g. Wtedy formuła

xy(R(x)S(y)R(f(x,y))S(f(x,y))

jest prawdziwa dokładnie w tych modelach Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle \A = \<A, f^\A, g^\A, R^\A, S^\A\>} , w których obraz iloczynu kartezjańskiego Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle R^\A\times S^\A} przy przekształceniu f zawiera się w zwykłym iloczynie \mbox{Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle R^\A\cap S^\A} }.

Przykład

{{{3}}}

Niestety, konsekwencją znacznej siły wyrazu logiki pierwszego rzędu jest jej nierozstrzygalność. Dokładniej, nierozstrzygalny jest następujący problem decyzyjny:\footnote{W istocie, nazwa ,,problem decyzyjny (Entscheidungsproblem) została\boldsymbol{s}}\def\blank{\hbox{\sf Bżyta po raz pierwszy właśnie w tym kontekście.} {\it Czy dana formuła logiki pierwszego rzędu jest tautologią?\/} Aby wykazać, że tak jest, posłużymy się znaną nam nierozstrzygalnością problemu stopu dla maszyn Turinga.

Przypomnijmy, że (deterministyczną, jednotaśmową) maszynę Turinga nad alfabetem Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle \A} \/ można zdefiniować jako krotkę Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \M = \<\Delta, Q, \delta, q_0, q_a\>} , gdzie:

  • Δ jest skończonym alfabetem, zawierającym Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle \A}

oraz symbol Parser nie mógł rozpoznać (nieznana funkcja „\blank”): {\displaystyle \blank\not\in \A} (blank);

  • Q jest skończonym zbiorem stanów;
  • q0Q jest stanem początkowym;
  • qfQ jest stanem końcowym lub

akceptującym\/;

  • δ:(Q{qf})×ΔΔ×Q×{1,0,+1}

jest funkcją przejścia.


Zakładając, że zbiory Δ i Q są rozłączne, można zdefiniować konfigurację\/ maszyny jako słowo postaci wqv, gdzie qQ oraz w,vΔ*, przy czym\boldsymbol{s}}\def\blank{\hbox{\sf Btożsamiamy konfiguracje wqv i Parser nie mógł rozpoznać (nieznana funkcja „\blank”): {\displaystyle wqv\blank} . Interpretacja tej definicji jest następująca. Taśma maszyny jest nieskończona w prawo. Na początku taśmy zapisane jest słowo wv, dalej w prawo są same blanki, a głowica maszyny ,,patrzy na pierwszy znak na prawo od w. Konfigurację postaci w=q0w, gdzie Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle w\in \A} , nazywamy początkową\/, a konfigurację postaci wqfv nazywamy końcową\/ lub akceptującą\/.

\bigbreak Relację Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \to_\M} na konfiguracjach definiuje się tak:

  • Jeśli δ(q,a)=(b,p,+1) to Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle wqav \to_\M wbpv} ;
  • Jeśli δ(q,a)=(b,p,0) to Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle wqav \to_\M wpbv} ;
  • Jeśli δ(q,a)=(b,p,1) to Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle wcqav \to_\M wpcbv}

oraz Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle qav\to_\M pbv} (gdy ruch w lewo jest niemożliwy.)



Symbolem Parser nie mógł rozpoznać (nieznana funkcja „\rarrow”): {\displaystyle \rarrow_\M} oznaczamy przechodnio-zwrotne domknięcie relacji Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \to_\M} . Jeżeli Parser nie mógł rozpoznać (nieznana funkcja „\rarrow”): {\displaystyle \C_w\rarrow_\M \C'} , gdzie  jest konfiguracją akceptującą to mówimy, że maszyna akceptuje\/ słowo w.

W naszej konstrukcji skorzystamy z następującej postaci problemu stopu: Czy dana maszyna Turinga akceptuje słowo puste? Nietrudno jest zredukować do niego ogólny przypadek problemu stopu (ćwiczenie).

Następujący lemat będzie przydatny w dowodzie nierozstrzygalności.

\begin{lemat} \parskip=2pt Niech ϑ oznacza koniunkcję następujących formuł

  • y¬P(y,c)
  • xyP(x,y)
  • xy(P(x,y)R(x,y))
  • xyz(R(x,y)(R(y,z)R(x,z)))
  • x¬R(x,x)

Zdanie ϑ jest spełnialne, a każdy jego model Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} zawiera nieskończony ciąg różnychelementów Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle c^\strA=a_0, a_1, a_2,\ldots} , takich że Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle (a_i,a_{i+1})\in P^\strA} dla każdego i. \end{lemat} Dowód

{{{3}}}

Twierdzenie


Nie istnieje algorytm rozstrzygający czy dana formuła logiki pierwszego rzędu jest tautologią.

Dowód

{{{3}}}

\def\blank{\hbox{\sf Btworzy formułę Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi_\M} o takiej własności:

\hfil Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \M} akceptuje słowo puste \quad \wtw, gdy\quad Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi_\M} jest tautologią.

Stąd natychmiast wynika teza twierdzenia. W przeciwnym razie taka konstrukcja pozwalałaby bowiem na rozstrzyganie problemu stopu.

W istocie, wygodniej będzie skonstruować taką formułę Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \psi_\M} , że

\hfil Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \M} zapętla się na słowie pustym \quad \wtw, gdy\quad Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \psi_\M} jest spełnialna,

i na koniec przyjąć Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi_\M=\neg \psi_\M} . Sygnatura naszej formuły będzie zależała od maszyny Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \M} (bo tak jest łatwiej) chociaż tak być nie musi (Ćwiczenie #stalasygnatura). Składa się ona z:


  • jednoargumentowych symboli relacyjnych Sq, dla wszystkich

stanów qQ;

  • dwuargumentowych symboli relacyjnych Ca,

dla wszystkich symboli aΔ;

  • dwuargumentowego symbolu relacyjnego G;
  • stałej c i symboli P i Q

występujących w formule ϑ z Lematu #nieKronecker.


Formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi_\M} jest koniunkcją złożoną z wielu składowych, które teraz opiszemy. Pierwszą składową jest formuła ϑ z Lematu #nieKronecker. Każdy model tej formuły zawiera różnowartościowy ciąg a0,a1,a2,, który posłuży nam jako substytut ciągu liczb naturalnych (oelemencie ai myślimy jak o liczbie i). Intuicyjny sens formuł atomowych naszej sygnatury jest taki:


  • Formułę Sq(x) czytamy: po x krokach obliczenia

maszyna jest w stanie q.

  • Formułę G(x,y) czytamy: po x krokach

głowica maszyny znajduje się w pozycji y.

  • Formułę Ca(x,y) czytamy: po x krokach na pozycji

y znajduje się symbol a.


Dalsze składowe naszej formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi_\M} są tak dobrane, aby każdy jej model reprezentował nieskończone obliczenie maszyny zaczynające się od słowa pustego. \Leftrightarrow te składowe:



  1. Parser nie mógł rozpoznać (błąd składni): {\displaystyle S_{q_0}(c)\wedge G(c,c)\wedge \forall x\,C_{\sf B}(c,x)} ;
  2. x(qQSq(x));
  3. x(Sq(x)¬Sp(x)), dla q,pQ, qp;
  4. xy(aΔCa(x,y));
  5. xy(Ca(x,y)¬Cb(x,y)), dla a,bΔ,

ab;

  1. xyG(x,y);
  2. xyz(G(x,y)G(x,z)y=z);
  3. </math>\forall x\forall y\forall z(S_q(x)\wedge G(x,y)\wedge C_a(x,y)

\wedge P(x,z)\to S_p(z)\wedge C_b(z,y))</math>, gdy δ(q,a)=(p,b,i);

  1. </math>\forall x\forall y\forall z(\neg G(x,y)\wedge C_a(x,y) \wedge P(x,z)

\to C_a(z,y))</math>;

  1. </math>\forall x\forall y\forall z\forall v(S_q(x)\wedge G(x,y)\wedge P(x,z)

\wedge P(y,v)\to G(z,v))</math>, gdy δ(q,a)=(p,b,+1);

  1. </math>\forall x\forall y\forall z(S_q(x)\wedge G(x,y)\wedge P(x,z)

\to G(z,y))</math>, gdy δ(q,a)=(p,b,0);

  1. </math>\forall x\forall y\forall z\forall v(S_q(x)\wedge G(x,y)\wedge P(x,z)

\wedge P(v,y)\to G(z,v))</math>, gdy δ(q,a)=(p,b,1);

  1. </math>\forall x\forall y\forall z\forall v(S_q(x)\wedge G(x,c)\wedge P(x,z)

\to G(z,c))</math>, gdy δ(q,a)=(p,b,1);

  1. x¬Sqf(x).


Przypuśćmy teraz, że maszyna Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \M} ma nieskończone obliczenie dla pustego słowa wejściowego. Zbudujemy model Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} dla formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi_\M} . Dziedziną tego modelu jest zbiór Parser nie mógł rozpoznać (nieznana funkcja „\NN”): {\displaystyle \NN} liczb naturalnych. Stałą c interpretujemy jako zero, relacja Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle P^\strA} to relacja następnika, a Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle R^\strA} to (ostra) relacja mniejszości. Relacje Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle S_q^\A} , Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle C_a^\A} i Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle G^\A} określamy zgodnie z ich intuicyjną interpretacją na podstawie przebiegu nieskończonego obliczenia maszyny. Nietrudno się przekonać, że wszystkie człony koniunkcji są prawdziwe w Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} , czyli zdanie Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi_\M} jest spełnialne.

Przystąpmy więc do trudniejszej części dowodu. Załóżmy mianowicie, że Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA\models\var\varphi_\M} dla pewnej struktury Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} . Wtedy także Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA\models\vartheta} , niech więc ai będąelementami Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} , o których mowa w Lemacie #nieKronecker. Struktura Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} spełnia też wszystkie pozostałe składowe formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi_\M} . Składowe (2) i (3) gwarantują, że każdy zelementów ai należy do dokładnie jednej z relacji Sq. Podobnie, każda para (ai,aj) należy do dokładnie jednej z relacji Ca, oraz każde ai jest w relacji G z dokładnie jednymelementem struktury Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} --- tu używamy składowych (4)--(7).

Rozpatrzmy obliczenie maszyny Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \M} dla słowa pustego. Pokażemy, że jest to obliczenie nieskończone.

Jeśli obliczenie maszyny Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \M} składa się z co najmniej n kroków, to przez qn oznaczmy stan, w którym znajduje się maszyna Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \M} po wykonaniu tych n kroków, a przez kn pozycję głowicy w tym momencie. Zawartością m-tej komórki taśmy po n-tym kroku obliczenia niech zaś będzie symbol bnm.

Przez indukcję \zwn n dowodzimy, że dla dowolnego Parser nie mógł rozpoznać (nieznana funkcja „\NN”): {\displaystyle n\in\NN} obliczenie składa się z co najmniej n kroków, oraz:

\hfil Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle a_n\in S_{q_n}^\strA} \qquad Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle (a_n,a_m)\in C_{b_{nm}}^\strA} \qquadParser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle (a_n,a_{k_n})\in G^\strA} .

Inaczej mówiąc, model Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} prawidłowo reprezentuje kolejne konfiguracje maszyny. Dla n=0 powyższe związki wynikają wprost z prawdziwości członu (1) naszej koniunkcji. W kroku indukcyjnym skorzystamy przede wszystkim z członu (14), który gwarantuje, że stan qn nie jest końcowy. Określona jest więc wartość funkcji przejścia δ(qn,bmkn). Możemy więc odwołać się do składowych (9--12), które zapewniają poprawną zmianę stanu i symbolu pod głowicą (8), zachowanie bez zmian reszty taśmy (9) i przesunięcie głowicy (10--12). Szczegóły dowodu pozostawiamy Czytelnikowi. }}

Twierdzenie #entscheidungsproblem można wzmocnić, pokazując (Ćwiczenie #stalasygnatura), że problem jest nierozstrzygalny nawet dla formuł nad pewną\boldsymbol{s}}\def\blank{\hbox{\sf Bstaloną sygnaturą. W istocie, jest tak dla większości sygnatur, z wyjątkiem bardzo ,,ubogich przypadków. Dwa takie przypadki są przedmiotem Ćwiczeń #rJ1#rJ2 do Rozdziału #trzynasty.

\subsection*{Ćwiczenia}\begin{small}

  1. Stosując schematy (#trk6--#9) z Faktu #teerka,

pokazać, że następujące formuły są tautologiami:

    1. </math>(\exists y p(y) \to \forall z q(z)) \to

\forall y\forall z(p(y)\to q(z))</math>; %95b

    1. </math>(\forall x\exists y r(x,y) \to \exists x\forall y r(y,x))\to

\exists x\forall y(r(x,y) \to r(y,x))</math>; %99a

    1. </math>\forall x\exists y((p(x)\to q(y))\to r(y))

\to ((\forall x p(x)\to \forall y q(y))\to \exists y r(y))</math>; %109a

    1. </math>\forall x(p(x)\to \exists y q(y))\to

\exists y(\exists x p(x)\to q(y))</math>.% 110a


\item Jak rozumiesz następujące zdania? Jak je sformułować, żeby nie budziły wątpliwości?

  1. Nie wolno pić i grać w karty.
  2. Nie wolno pluć i łapać.
  3. Zabrania się zaśmiecania i zanieczyszczania drogi.\footnote{Kodeks

Drogowy przed nowelizacją w roku 1997.}

  1. {\it Zabrania się zaśmiecania lub zanieczyszczania

drogi.}\footnote{Kodeks Drogowy po nowelizacji w roku 1997.}

  1. {\it Wpisać, gdy osoba\boldsymbol{s}}\def\blank{\hbox{\sf Bbezpieczona nie posiada numerów identyfikacyjnych

NIP lub \mbox{PESEL}.}\footnote{Instrukcja wypełniania formularza ZUS ZCZA (Zgłoszenie danych o członkach rodziny\dots)}

  1. {\it Podaj przykład liczby, która jest pierwiastkiem pewnego

równania kwadratowego o współczynnikach całkowitych i takiej, która nie jest.}

  1. Warunek zachodzi dla każdego x i dla pewnego y.\/


\item Czy następujące definicje można lepiej sformułować?

  1. Zbiór A jest {\sf dobry}, jeśli ma co najmniej 2elementy.
  2. Zbiór A jest {\sf dobry, jeśli dla każdego xA,

jeśli x jest parzyste, to x jest podzielne przez 3.}

  1. Zbiór A jest {\sf dobry, jeśli dla pewnego xA,

jeśli x jest parzyste, to x jest podzielne przez 3.}


\item Wskazać błąd w rozumowaniu:

  1. {\it Aby wykazać prawdziwość tezy\\

{\sf ,,Dla dowolnego n, jeśli zachodzi warunek W(n) to zachodzi warunek U(n)}\\ załóżmy, że dla dowolnego n zachodzi W(n)\dots}

  1. {\it Aby wykazać prawdziwość tezy\\

{\sf ,,Dla pewnego n, jeśli zachodzi warunek W(n) to zachodzi warunek U(n)}\\ załóżmy, że dla pewnego n zachodzi W(n)\dots}



\item Sformułować poprawnie zaprzeczenia stwierdzeń:

  • Liczby m i n są pierwsze.
  • Liczby m i n są względnie pierwsze.


\item Czy zdanie {\it ,,Liczba a nie jest kwadratem pewnej liczby całkowitej\/} jest poprawnym zaprzeczeniem zdania {\it ,,Liczba a jest kwadratem pewnej liczby całkowitej\/}?

\item Sygnatura Σ składa się z symboli r,sΣ1R, R,SΣ2R i gΣ2F. Napisać takie zdania Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi}  i ψ, że:%61 jest rozwiazanie


  1. zdanie Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest prawdziwe dokładnie w tych modelach

Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle \A = \<A, R^\A, S^\A, r^\A, s^\A, g^\A\>} , w których obie relacje Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle R^\A} , Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle S^\A} są przechodnie, ale ich suma nie jest przechodnia;

  1. zdanie ψ jest prawdziwe dokładnie w tych modelach

Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle \A = \<A, R^\A, S^\A, r^\A, s^\A, g^\A\>} , w których Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle s^\A} jest obrazem iloczynu kartezjańskiego Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle r^\A\times r^\A} przy funkcji Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle g^\A} .


\item Sygnatura Σ składa się z dwuargumentowych symboli relacyjnych rs oraz dwuargumentowego symbolu funkcyjnego f. Napisać (możliwie najkrótsze) zdanie, które jest prawdziwe dok{ł}adnie w tych modelach%77 jest rozwiazanie Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle \A = \<A, r^{\A}, s^{\A}, f^{\A}\>} , w których:

  1. Złożenie relacji Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle r^{\A}} i Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle s^{\A}} zawiera się w ich iloczynie

Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle r^\A\cap s^\A} ;

  1. Zbiór wartości funkcji Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle f^{\A}} jest rzutem sumy Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle r^\A\cup s^\A} na

pierwszą współrzędną;

  1. Relacja Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle r^\A} nie jest funkcją z AA;
  2. Obraz Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle r^\A} przy funkcji Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle f^\A} jest podstrukturą w Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle \A} ;
  3. Obraz zbioru A×A przy funkcji Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle f^\A} jest pusty.


\item Dla każdej z par struktur:

  1. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \<\NN,\leq\>} i Parser nie mógł rozpoznać (błąd składni): {\displaystyle \<\{m-{1\over n}\ |\ m,n\in\NN-\{0\}\}, \leq\>} ;
  2. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \<\NN, +\>} i Parser nie mógł rozpoznać (błąd składni): {\displaystyle \<\ZZ, +\>} ;
  3. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \<\NN, \leq\>} i Parser nie mógł rozpoznać (błąd składni): {\displaystyle \<\ZZ, \leq\>} ,

wskaż zdanie prawdziwe w jednej z nich a w drugiej nie.

\item Napisać takie zdania Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi}ψ, że:

  1. zdanie Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest prawdziwe w modelu Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle \A = \<\ZZ, +, 0 \>} ,

ale nie w modelu Parser nie mógł rozpoznać (nieznana funkcja „\B”): {\displaystyle \B = \<\NN, +, 0 \>} ;


  1. zdanie ψ jest prawdziwe w modelu Parser nie mógł rozpoznać (nieznana funkcja „\B”): {\displaystyle \B = \<\ZZ, +, 0 \>} ,

ale nie w modelu Parser nie mógł rozpoznać (błąd składni): {\displaystyle \C = \<\QQ, +, 0 \>} .


\item Wskazać formułę pierwszego rzędu:

  1. spełnialną w

ciele liczb rzeczywistych ale nie w ciele liczb wymiernych;

  1. spełnialną w algebrze Parser nie mógł rozpoznać (nieznana funkcja „\NN”): {\displaystyle \NN} z mnożeniem,

ale nie w algebrze Parser nie mógł rozpoznać (nieznana funkcja „\NN”): {\displaystyle \NN} z dodawaniem;

  1. spełnialną w Parser nie mógł rozpoznać (błąd składni): {\displaystyle \<\{a,b\}^*,\cdot,\varepsilon\>}

ale nie w Parser nie mógł rozpoznać (błąd składni): {\displaystyle \<\{a,b,c\}^*,\cdot,\varepsilon\>} .




\item Zmodyfikować konstrukcję z dowodu Twierdzenia #entscheidungsproblem w ten sposób, aby w formule Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \psi_\M} nie występował symbol równości ani stała </math>cParser nie mógł rozpoznać (błąd składni): {\displaystyle . %%{1. Napisać } \forall x\forall y\forall z(G(x,y)\wedge \item Zmodyfikować konstrukcję z dowodu Twierdzenia #entscheidungsproblem w ten sposób, aby Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \psi_\M} była zawsze formułą\boldsymbol{s}}\def\blank{\hbox{\sf Bstalonej sygnatury (niezależnej od maszyny Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \M} ). Wywnioskować stąd, że logika pierwszego rzędu nad tą\boldsymbol{s}}\def\blank{\hbox{\sf Bstaloną sygnaturą jest nierozstrzygalna.



\end{small}