Logika dla informatyków/Logika pierwszego rzędu. Sposób użycia: Różnice pomiędzy wersjami
Linia 436: | Linia 436: | ||
nawet dla formuł nad pewną ustaloną sygnaturą. W istocie, jest tak dla większości sygnatur, z wyjątkiem bardzo "ubogich" przypadków. | nawet dla formuł nad pewną ustaloną 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]]. | Dwa takie przypadki są przedmiotem Ćwiczeń [[#rJ1]] i [[#rJ2]] do Rozdziału [[#trzynasty]]. | ||
Wersja z 05:50, 22 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:
może wprowadzić czytelnika w błąd. ""Dosłowne" tłumaczenie tego zdania na język logiki predykatów, to przecież formuła
a nie formuła
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 i , dwuargumentowego symbolu funkcyjnego i jednoargumentowego symbolu funkcyjnego . Wtedy formuła
jest prawdziwa dokładnie w tych modelach , w których obraz iloczynu kartezjańskiego przy przekształceniu zawiera się w zwykłym iloczynie
Przykład 3.6
Teraz niech nasza sygnatura składa się z jednej operacji dwuargumentowej i z jednej stałej . Zdanie
jest prawdziwe w strukturze słów nad alfabetem z konkatenacją i słowem pustym, ale nie w modelu słów nad alfabetem trzyliterowym . 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:<ref name="siedem">W istocie, nazwa 'problem decyzyjny" (Entscheidungsproblem) została użyta po raz pierwszy właśnie w tym kontekście.</ref>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 można zdefiniować jako krotkę , gdzie:
- jest skończonym alfabetem, zawierającym oraz symbol (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 utoż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ą.
Relację na konfiguracjach definiuje się tak:
- Jeśli to ;
- Jeśli to ;
- Jeśli to oraz (gdy ruch w lewo jest niemożliwy.)
Symbolem oznaczamy przechodnio-zwrotne domknięcie relacji . Jeżeli , 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.
Lemat 3.7
Niech oznacza koniunkcję następujących formuł
Zdanie jest spełnialne, a każdy jego model zawiera nieskończony ciąg różnych elementów , takich że dla każdego .
Dowód
Twierdzenie 3.8
Nie istnieje algorytm rozstrzygający czy dana formuła logiki pierwszego rzędu jest tautologią.
Dowód
Naszym celem jestefektywna konstrukcja, która dla dowolnej maszyny Turinga utworzy formułę Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi_\M} o takiej własności:
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łę , że
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 (bo tak jest łatwiej) chociaż tak być nie musi (Ćwiczenie 13). 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 3.7.
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 3.7. Każdy model tej formuły zawiera
różnowartościowy ciąg , który posłuży nam
jako substytut ciągu liczb naturalnych (o elemencie 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. Oto 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 ,;
- ;
- ;
- , gdy ;
- ;
- , gdy ;
- , gdy ;
- , gdy ;
- , gdy ;
- .
Przypuśćmy teraz, że maszyna ma nieskończone obliczenie dla pustego słowa wejściowego. Zbudujemy model dla formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi_M} . Dziedziną tego modelu jest zbiór liczb naturalnych. Stałą interpretujemy jako zero, relacja to relacja następnika, a to (ostra) relacja mniejszości. Relacje , i 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 , 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 „\var”): {\displaystyle \mathfrak A\models\var\varphi_M} dla pewnej struktury . Wtedy także , niech więc będą elementami , o których mowa w Lemacie 3.7. Struktura 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 z elementó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 jednym elementem struktury --- tu używamy składowych (4)--(7).
Rozpatrzmy obliczenie maszyny dla słowa pustego. Pokażemy, że jest to obliczenie nieskończone.
Jeśli obliczenie maszyny składa się z co najmniej kroków, to przez oznaczmy stan, w którym znajduje się maszyna 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ę ze względu na dowodzimy, że dla dowolnego obliczenie składa się z co najmniej kroków, oraz:
Inaczej mówiąc, model 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 3.8 można wzmocnić, pokazując (Ćwiczenie #stalasygnatura), że problem jest nierozstrzygalny nawet dla formuł nad pewną ustaloną 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.