Logika dla informatyków/Logika pierwszego rzędu. Sposób użycia: Różnice pomiędzy wersjami
Linia 225: | Linia 225: | ||
<center> ''Jeśli ''<math>x</math> ''nie jest równe ''<math>2</math> ''lub nie jest równe 3 | <center> ''Jeśli ''<math>x</math> ''nie jest równe ''<math>2</math> ''lub nie jest równe 3 | ||
to ''<math>x^2-5x+6</math>'' nie jest zerem''. | to ''<math>x^2-5x+6</math>'' nie jest zerem''.</center> | ||
==TEST== | ==TEST== |
Wersja z 21:59, 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 ).
- Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \forall x(\var\varphi\to\psi)\to(\exists x\var\varphi\to\exists x\psi)} ;
- , o ile ;
- ;
- ;
- ;
- ;
- ;
- ,o ile ;
- , o ile ;
- ;
- ;
- ;
- ;
Dowód
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 może być wolna w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} i .) 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
gdzie każde z to lub , a jest formułą otwartą. (Oczywiście 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
Przykład 3.3
Formuła jest równoważna każdej z następujących formuł:
;
;
;
;
.
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:
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
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} i 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:
Tymczasem implikacja materialna nie zachodzi, o czym dobrze wiedzą użytkownicy terminali. Co więcej, w istocie materialną prawdą jest stwierdzenie odwrotne:
Natomiast zdanie
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ę:
Pewien kot ma wąsy.
Ale ich tłumaczenia na język rachunku predykatów nie są już takie podobne:
MaWąsy.
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
oznaczają to samo. Zaprzeczeniem pierwszego z nich jest oczywiście zdanie
ale zaprzeczeniem drugiego nie jest zdanie
otrzymane przecież przez analogiczną operację "podstawienia". Użycie słowa "pewnej" powoduje bowiem, że to zdanie rozumiemy jako , a nie jako .
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
Ale od tekstu matematycznego oczekujemy więcej ścisłości i w takim tekście zdanie:
TEST
może wprowadzić czytelnika w błąd. ,,Dosłowne tłumaczenie tego zdania na język logiki predykatów, to przecież formuła
\hfil ,
a nie formuła
\hfil .
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 i , dwuargumentowego symbolu funkcyjnego i jednoargumentowego symbolu funkcyjnego . Wtedy formuła
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 zawiera się w zwykłym iloczynie \mbox{Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle R^\A\cap S^\A} }.
Przykład
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);
- jest skończonym zbiorem stanów;
- jest stanem początkowym;
- jest stanem końcowym lub
akceptującym\/;
jest funkcją przejścia.
Zakładając, że zbiory i są rozłączne, można zdefiniować
konfigurację\/ maszyny jako słowo postaci , gdzie
oraz , przy czym\boldsymbol{s}}\def\blank{\hbox{\sf Btożsamiamy konfiguracje
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 , dalej w prawo
są same blanki, a głowica maszyny ,,patrzy
na pierwszy znak na prawo od . Konfigurację
postaci , gdzie Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle w\in \A}
, nazywamy początkową\/,
a konfigurację postaci 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 to Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle wqav \to_\M wbpv} ;
- Jeśli to Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle wqav \to_\M wpbv} ;
- Jeśli 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 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ł
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 . \end{lemat} Dowód
Twierdzenie
Nie istnieje algorytm rozstrzygający czy dana formuła logiki pierwszego rzędu jest tautologią.
Dowód
\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 , dla wszystkich
stanów ;
- dwuargumentowych symboli relacyjnych ,
dla wszystkich symboli ;
- dwuargumentowego symbolu relacyjnego ;
- stałej i symboli i
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 , który posłuży nam
jako substytut ciągu liczb naturalnych (oelemencie myślimy
jak o liczbie ). Intuicyjny sens formuł atomowych naszej
sygnatury jest taki:
- Formułę czytamy: po krokach obliczenia
maszyna jest w stanie .
- Formułę czytamy: po krokach
głowica maszyny znajduje się w pozycji .
- Formułę czytamy: po krokach na pozycji
znajduje się symbol .
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:
- 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)} ;
- ;
- , dla , ;
- ;
- , dla ,
;
- ;
- ;
- </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>\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>\forall x\forall y\forall z(S_q(x)\wedge G(x,y)\wedge P(x,z)
\to G(z,y))</math>, gdy ;
- </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>\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 ;
- .
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łą 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 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 należy do dokładnie jednej z relacji . Podobnie, każda para należy do dokładnie jednej z relacji , oraz każde jest w relacji 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 kroków, to przez oznaczmy stan, w którym znajduje się maszyna Parser nie mógł rozpoznać (nieznana funkcja „\M”): {\displaystyle \M} po wykonaniu tych kroków, a przez pozycję głowicy w tym momencie. Zawartością -tej komórki taśmy po -tym kroku obliczenia niech zaś będzie symbol .
Przez indukcję \zwn dowodzimy, że dla dowolnego Parser nie mógł rozpoznać (nieznana funkcja „\NN”): {\displaystyle n\in\NN} obliczenie składa się z co najmniej 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 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 nie jest końcowy. Określona jest więc wartość funkcji przejścia . 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 i #rJ2 do Rozdziału #trzynasty.
\subsection*{Ćwiczenia}\begin{small}
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 współczynnikach całkowitych i takiej, która nie jest.}
- Warunek zachodzi dla każdego i dla pewnego .\/
\item Czy następujące definicje można lepiej sformułować?
- Zbiór jest {\sf dobry}, jeśli ma co najmniej 2elementy.
- Zbiór jest {\sf dobry, jeśli dla każdego ,
jeśli jest parzyste, to jest podzielne przez .}
- Zbiór jest {\sf dobry, jeśli dla pewnego ,
jeśli jest parzyste, to jest podzielne przez .}
\item Wskazać błąd w rozumowaniu:
- {\it Aby wykazać prawdziwość tezy\\
{\sf ,,Dla dowolnego , jeśli zachodzi warunek to zachodzi warunek }\\ załóżmy, że dla dowolnego zachodzi \dots}
- {\it Aby wykazać prawdziwość tezy\\
{\sf ,,Dla pewnego , jeśli zachodzi warunek to zachodzi warunek }\\ załóżmy, że dla pewnego zachodzi \dots}
\item Sformułować poprawnie zaprzeczenia stwierdzeń:
- Liczby i są pierwsze.
- Liczby i są względnie pierwsze.
\item Czy zdanie {\it ,,Liczba nie jest kwadratem pewnej liczby
całkowitej\/}
jest poprawnym zaprzeczeniem zdania {\it ,,Liczba jest kwadratem
pewnej liczby całkowitej\/}?
\item Sygnatura składa się z symboli , i . Napisać takie zdania Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} i , że:%61 jest rozwiazanie
- 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;
- 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 i oraz dwuargumentowego symbolu funkcyjnego .
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:
- 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} ;
- 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ą;
- Relacja Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle r^\A} nie jest funkcją z w ;
- 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} ;
- Obraz zbioru przy funkcji Parser nie mógł rozpoznać (nieznana funkcja „\A”): {\displaystyle f^\A} jest pusty.
\item
Dla każdej z par struktur:
- 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\>} ;
- Parser nie mógł rozpoznać (błąd składni): {\displaystyle \<\NN, +\>} i Parser nie mógł rozpoznać (błąd składni): {\displaystyle \<\ZZ, +\>} ;
- 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} i , że:
- 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 \>} ;
- 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:
- spełnialną w
ciele liczb rzeczywistych ale nie w ciele liczb wymiernych;
- 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;
- 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}