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 5: Linia 5:
Przyjrzyjmy się teraz kilku ważnym tautologiom.  
Przyjrzyjmy się teraz kilku ważnym tautologiom.  


{{fakt||trkd|  
{{fakt|3.1|trkd|  


Następujące formuły są tautologiami (dla dowolnych <math>\var\varphi</math> i <math>\psi</math>).  
Następujące formuły są tautologiami (dla dowolnych <math>\var\varphi</math> i <math>\psi</math>).  

Wersja z 05:59, 22 wrz 2006

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

Przyjrzyjmy się teraz kilku ważnym tautologiom.

Fakt 3.1

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:<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  A można zdefiniować jako krotkę M=<Δ,Q,δ,q0,qa>, gdzie:

  • Δ jest skończonym alfabetem, zawierającym A oraz symbol B∉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 utoż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 Cw=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ą.

Relację M na konfiguracjach definiuje się tak:

  • Jeśli δ(q,a)=(b,p,+1) to wqavMwbpv;
  • Jeśli δ(q,a)=(b,p,0) to wqavMwpbv;
  • Jeśli δ(q,a)=(b,p,1) to wcqavMwpcbv oraz qavMpbv (gdy ruch w lewo jest niemożliwy.)

Symbolem M oznaczamy przechodnio-zwrotne domknięcie relacji M. Jeżeli CwMC, gdzie C 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.

Lemat 3.7

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 𝔄 zawiera nieskończony ciąg różnych elementów c𝔄=a0,a1,a2,, takich że (ai,ai+1)P𝔄 dla każdego i.

Dowód

Ćwiczenie.

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 M utworzy formułę Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi_\M} o takiej własności:

Makceptuje słowo puste wtedy i tylko wtedy, gdy 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łę ψM, że

M zapętla się na słowie pustym wtedy i tylko wtedy, gdyψ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 M (bo tak jest łatwiej) chociaż tak być nie musi (Ćwiczenie 13). 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 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 a0,a1,a2,, który posłuży nam jako substytut ciągu liczb naturalnych (o elemencie 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. Oto 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;
  6. xyG(x,y);
  7. xyz(G(x,y)G(x,z)y=z);
  8. xyz(Sq(x)G(x,y)Ca(x,y)P(x,z)Sp(z)Cb(z,y)), gdy δ(q,a)=(p,b,i);
  9. xyz(¬G(x,y)Ca(x,y)P(x,z)Ca(z,y));
  10. xyzv(Sq(x)G(x,y)P(x,z)P(y,v)G(z,v)), gdy δ(q,a)=(p,b,+1);
  11. xyz(Sq(x)G(x,y)P(x,z)G(z,y)), gdy δ(q,a)=(p,b,0);
  12. xyzv(Sq(x)G(x,y)P(x,z)P(v,y)G(z,v)), gdy δ(q,a)=(p,b,1);
  13. xyzv(Sq(x)G(x,c)P(x,z)G(z,c)), gdy δ(q,a)=(p,b,1);
  14. x¬Sqf(x).


Przypuśćmy teraz, że maszyna M 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łą c interpretujemy jako zero, relacja P𝔄 to relacja następnika, a R𝔄 to (ostra) relacja mniejszości. Relacje SqA, CaA i GA 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 ai 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 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 jednym elementem struktury 𝔄 --- tu używamy składowych (4)--(7).

Rozpatrzmy obliczenie maszyny M dla słowa pustego. Pokażemy, że jest to obliczenie nieskończone.

Jeśli obliczenie maszyny M składa się z co najmniej n kroków, to przez qn oznaczmy stan, w którym znajduje się maszyna 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ę ze względu na n dowodzimy, że dla dowolnego n obliczenie składa się z co najmniej n kroków, oraz:

anSqn𝔄 (an,am)Cbnm𝔄(an,akn)G𝔄.

Inaczej mówiąc, model 𝔄 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 3.8 można wzmocnić, pokazując (Ćwiczenie 13), ż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ń 25 do Logika dla informatyków/Logika w informatyce.

Przypisy

<references/>