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)
Linia 271: Linia 271:
y=z_1\vee y=z_2)\to y=x_1\vee y=x_2\vee y=\varepsilon)</math></center>
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
jest prawdziwe w strukturze <math>< \{a,b\}^*, \cdot, \varepsilon></math> słów nad
alfabetem <math>\{a,b\}^*</math> z konkatenacją i słowem pustym,  
alfabetem <math>\{a,b\}^*</math> z konkatenacją i słowem pustym,  
ale nie w modelu słów nad alfabetem  
ale nie w modelu słów nad alfabetem  
trzyliterowym <math><{a,b,c}^*, \cdot, \varepsilon\></math>. Inaczej mówiąc, nasze  
trzyliterowym <math><{a,b,c}^*, \cdot, \varepsilon></math>. Inaczej mówiąc, nasze  
zdanie ''rozróżnia'' te dwie struktury.
zdanie ''rozróżnia'' te dwie struktury.
}}
}}

Wersja z 22:07, 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ę:

Każdy kot ma wąsy.
Pewien kot ma wąsy.

Ale ich tłumaczenia na język rachunku predykatów nie są już takie podobne:

x(Kot(x)MaWąsy(x));

x(Kot(x)MaWąsy(x)).

Dość częstym błędem jest właśnie mylenie koniunkcji z implikacją w zasięgu działania kwantyfikatora. A oto inny przykład: Zdania

Liczba n jest parzysta; Liczba n jest dwukrotnością pewnej liczby

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

Liczba n nie jest parzysta,

ale zaprzeczeniem drugiego nie jest zdanie

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 implikacji, 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

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:

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

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

a nie formuła

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

Wielu takich dwuznaczności unikniemy, gdy przypomnimy sobie, że w języku polskim istnieją takie słowa jak ani i żaden.


Siła wyrazu logiki pierwszego rzędu

Język logiki pierwszego rzędu, dzięki możliwości uż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 definiowanieelementó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 3.5

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 A=<A,fA,gA,RA,SA>, w których obraz iloczynu kartezjańskiego RA×SA przy przekształceniu f zawiera się w zwykłym iloczynie RASA

Przykład 3.6

Teraz niech nasza sygnatura składa się z jednej operacji dwuargumentowej i z jednej stałej ε. Zdanie

x1x2y(z1z2(y=z1z2y=z1y=z2)y=x1y=x2y=ε)

jest prawdziwe w strukturze <{a,b}*,,ε> słów nad alfabetem {a,b}* z konkatenacją i słowem pustym, ale nie w modelu słów nad alfabetem trzyliterowym <a,b,c*,,ε>. Inaczej mówiąc, nasze zdanie rozróżnia te dwie struktury.

Nierozstrzygalność

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}

Headline text