Test GR3: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Rogoda (dyskusja | edycje)
Rogoda (dyskusja | edycje)
Linia 807: Linia 807:
Napisz formuły które mówią:
Napisz formuły które mówią:


* każdy odcinek ma dokładnie dwa końce
:* każdy odcinek ma dokładnie dwa końce


* dla każdego okręgu wszystkie jego średnice przecinają się w dokładnie jednym punkcie
:* dla każdego okręgu wszystkie jego średnice przecinają się w dokładnie jednym punkcie


* dla dowolnego odcinka istnieje dłuższy odcinek, który go zawiera
:* dla dowolnego odcinka istnieje dłuższy odcinek, który go zawiera


* dla dowolnych trzech punktów niewspółliniowych istnieje okrąg który przechodzi przez
:* dla dowolnych trzech punktów niewspółliniowych istnieje okrąg który przechodzi przez wszystkie trzy punkty
wszystkie trzy punkty


* istnieją dwa okręgi, które przecinają się w dokładnie 5 punktach.
:* istnieją dwa okręgi, które przecinają się w dokładnie '''5''' punktach.


; Solution.
; Solution.
}}
}}


{{cwiczenie|[Uzupelnij]||
{{cwiczenie|4.4||


Dla każdej z poniższych formuł znajdź model w którym jest
Dla każdej z poniższych formuł znajdź model w którym jest prawdziwa oraz model w którym jest fałszywa
prawdziwa oraz model w którym jest fałszywa


# <math>\forall_x \forall_y p(x,y) \Rightarrow p(y,x)</math>
:1. <math>\forall_x \forall_y p(x,y) \Rightarrow p(y,x)</math>


# <math>(\forall_x \exists_y p(x,y)) \Rightarrow \exists_y \forall_x p(x,y)</math>
:2. <math>(\forall_x \exists_y p(x,y)) \Rightarrow \exists_y \forall_x p(x,y)</math>


# <math>(\forall_x (p(x)\vee q(x))) \Rightarrow (\forall_x(p(x)) \vee \forall_x q(x))</math>
:3. <math>(\forall_x (p(x)\vee q(x))) \Rightarrow (\forall_x(p(x)) \vee \forall_x q(x))</math>


# <math>\forall_y [(\forall_x (p(x) \Rightarrow q(x)) \wedge q(y)) \Rightarrow p(z)]</math>
:4. <math>\forall_y [(\forall_x (p(x) \Rightarrow q(x)) \wedge q(y)) \Rightarrow p(z)]</math>


# <math>\forall_x \forall_y(p(x,y) \Rightarrow \exists_z (p(x,z)\wedge
:5. <math>\forall_x \forall_y(p(x,y) \Rightarrow \exists_z (p(x,z)\wedge p(z,y))</math>
p(z,y))</math>
 
:6. ...
}}


# ...
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">


; Solution.
Poniższe przykłady to tylko jedne z wielu możliwych rozwiązań.
: Poniższe przykłady to tylko jedne z wielu możliwych rozwiązań.


:#  
:1.  


:## Formuła jest prawdziwa w zbiorze trójkątów, jeśli <math>p</math> jest interpretowany jako
::(a) Formuła jest prawdziwa w zbiorze trójkątów, jeśli <math>\textnormal{p}</math> jest interpretowany jako podobieństwo trójkątów.
podobieństwo trójkątów.


:## Formuła jest fałszywa w zbiorze odcinków, jeśli <math>p(x,y)</math> jest
::(b) Formuła jest fałszywa w zbiorze odcinków, jeśli <math>p(x,y)</math> jest prawdziwy wtedy i tylko wtedy gdy odcinek oznaczony przez <math>\textnormal{x}</math> jest krótszy od odcinka oznaczonego przez <math>\textnormal{y}</math>.
prawdziwy wtedy i tylko wtedy gdy odcinek oznaczony przez
<math>x</math> jest krótszy od odcinka oznaczonego przez <math>y</math>.


:#  
:2.  


:## Formuła jest prawdziwa w liczbach naturalnych,
::(a) Formuła jest prawdziwa w liczbach naturalnych, jeśli <math>\textnormal{p}</math> jest interpretowane jako słaba mniejszość (czyli <math>p(x,y)</math> jest prawdą jeśli <math>\textnormal{x}</math> jest mniejsze lub równe <math>\textnormal{y}</math>). Wtedy rzeczywiście dla każdej liczby istnieje liczba słabo mniejsza (poprzednik implikacji jest prawdziwy) oraz istnieje liczba (zero) która jest słabo mniejsza od wszyskich innych (następnik prawdziwy). Cała implikacja jest więc prawdziwa.
jeśli <math>p</math> jest interpretowane jako słaba mniejszość (czyli
<math>p(x,y)</math> jest prawdą jeśli <math>x</math> jest mniejsze lub równe
<math>y</math>). Wtedy rzeczywiście dla każdej liczby istnieje
liczba słabo mniejsza (poprzednik implikacji jest prawdziwy) oraz
istnieje liczba (zero) która jest słabo mniejsza od wszyskich
innych (następnik prawdziwy). Cała implikacja jest więc
prawdziwa.


:## Formuła jest fałszywa w liczbach całkowitych,
::(b) Formuła jest fałszywa w liczbach całkowitych, jeśli <math>\textnormal{p}</math> jest interpretowane jako słaba mniejszość. Wtedy rzeczywiście dla każdej liczby istnieje liczba słabo mniejsza (poprzednik implikacji jest prawdziwy) ale nie istnieje najmniejsza liczba całkowita (następnik implikacji jest fałszywy). Cała implikacja jest więc fałszywa. <math>(\forall_x \exists_y p(x,y)) \Rightarrow \exists_y \forall_x p(x,y)</math>
jeśli <math>p</math> jest interpretowane jako słaba mniejszość. Wtedy rzeczywiście dla każdej liczby istnieje
liczba słabo mniejsza (poprzednik implikacji jest prawdziwy) ale
nie istnieje najmniejsza liczba całkowita (następnik
implikacji jest fałszywy). Cała implikacja jest więc
fałszywa.
<math>(\forall_x \exists_y p(x,y)) \Rightarrow \exists_y \forall_x p(x,y)</math>


:#  
:3.  


:## Formuła jest prawdziwa w zbiorze liczb naturalnych
::(a) Formuła jest prawdziwa w zbiorze liczb naturalnych przy następującej interpretacji symboli predykatywncych jeśli <math>{p(x)}</math> jest prawdziwe gdy <math>\textnormal{x}</math> jest liczbą złożoną, a <math>{q(x)}</math> jest prawdziwe gdy <math>\textnormal{x}</math> jest liczbą nieparzystą. Ponieważ istnieje liczba parzysta która jest liczbą pierwszą to poprzednik implikacji jest fałszywy więc cała implikacja jest prawdziwa.
przy następującej interpretacji symboli predykatywncych
jeśli <math>p(x)</math> jest prawdziwe gdy <math>x</math> jest liczbą
złożoną, a <math>q(x)</math> jest prawdziwe gdy <math>x</math> jest liczbą
nieparzystą. Ponieważ istnieje liczba parzysta która
jest liczbą pierwszą to poprzednik implikacji jest
fałszywy więc cała implikacja jest prawdziwa.


:## Formuła jest prawdziwa w zbiorze liczb naturalnych
::(b) Formuła jest prawdziwa w zbiorze liczb naturalnych przy następującej interpretacji symboli predykatywncych jeśli <math>{p(x)}</math> jest prawdziwe gdy <math>\textnormal{x}</math> jest liczbą parzystą, a <math>{q(x)}</math> jest prawdziwe gdy <math>\textnormal{x}</math> jest liczbą nieparzystą. Każda liczba naturalna jest parzysta lub nieparzysta (poprzednik jest prawdziwe), ale nie prawda, że każda jest parzysta ani nie prawda że każda jest nieparzysta (następnik fałszywy). Cała implikacja jest więc fałszywa.
przy następującej interpretacji symboli predykatywncych
jeśli <math>p(x)</math> jest prawdziwe gdy <math>x</math> jest liczbą
parzystą, a <math>q(x)</math> jest prawdziwe gdy <math>x</math> jest liczbą
nieparzystą. Każda liczba naturalna jest parzysta lub
nieparzysta (poprzednik jest prawdziwe), ale nie prawda,
że każda jest parzysta ani nie prawda że każda jest
nieparzysta (następnik fałszywy). Cała implikacja jest
więc fałszywa.


:#  
:4.  
<math>(\forall_y [\forall_x (p(x) \Rightarrow q(x)) \wedge q(y)) \Rightarrow p(y)]</math>
::<math>(\forall_y [\forall_x (p(x) \Rightarrow q(x)) \wedge q(y)) \Rightarrow p(y)]</math>


:## Formuła jest prawdziwa a dowolnym modelu w którym
::(a) Formuła jest prawdziwa a dowolnym modelu w którym <math>p(y)</math> jest zawsze prawdą. Na przykład w zbiorze liczb naturalnych podzielnych przez '''10''', gdzie <math>{q(x)}</math> prawdziwa, gdy <math>\textnormal{x}</math> jest mniejsze od '''1000''', a <math>p(y)</math> jest prawdziwe gdy <math>\textnormal{y}</math> jest parzyste.
<math>p(y)</math> jest zawsze prawdą. Na przykład w zbiorze liczb
naturalnych
podzielnych przez 10, gdzie <math>q(x)</math> prawdziwa, gdy <math>x</math> jest mniejsze od 1000, a <math>p(y)</math>
jest prawdziwe gdy <math>y</math> jest parzyste.


:## Formuła jest fałszywa w zbiorze czworokątów, gdzie
::(b) Formuła jest fałszywa w zbiorze czworokątów, gdzie <math>{p(x)}</math> jest prawdą jeśli <math>\textnormal{x}</math> jest kwadratem, a <math>{q(x)}</math> jest prawdą gdy <math>\textnormal{x}</math> jest prostokątem. Wtedy, prawdziwa jest formuła <math>\forall_x (p(x) \Rightarrow q(x))</math> (każdy kwadrat jest prostokątem). Jeśli więc w roli <math>\textnormal{y}</math> w formule <math>(\forall_x (p(x) \Rightarrow q(x)) \wedge q(y)) \Rightarrow p(y)]</math> wystąpi prostokąt to poprzednik implikacji będzie prawdziwy, a następnik nie. Nie jest więc prawdą, ze formuła <math>\forall_x (p(x) \Rightarrow q(x)) \wedge q(y)) \Rightarrow p(y)</math> jest prawdziwa dla każdego <math>\textnormal{y}</math>.
<math>p(x)</math> jest prawdą jeśli <math>x</math> jest kwadratem, a <math>q(x)</math>
jest prawdą gdy <math>x</math> jest prostokątem. Wtedy, prawdziwa
jest formuła <math>\forall_x (p(x) \Rightarrow q(x))</math> (każdy
kwadrat jest prostokątem). Jeśli więc w roli <math>y</math> w formule
<math>(\forall_x (p(x) \Rightarrow q(x)) \wedge q(y)) \Rightarrow p(y)]</math>
wystąpi prostokąt to poprzednik implikacji będzie prawdziwy, a następnik nie.
Nie jest więc prawdą, ze formuła <math>\forall_x (p(x) \Rightarrow q(x)) \wedge q(y)) \Rightarrow p(y)</math>
jest prawdziwa dla każdego <math>y</math>.


:#  
:5.  


:## Formuła jest prawdziwa w liczbach wymiernych gdzie
::(a) Formuła jest prawdziwa w liczbach wymiernych gdzie <math>p(x,y)</math> jest prawdziwe wtedy i tylko wtedy gdy <math>\textnormal{x}</math> jest silnie mniejsze od <math>\textnormal{y}</math>. Wtedy rzeczywiście dla dowolnych dwóch liczb wymiernych <math>{x,y}</math> takich, że <math>{x<y}</math> istnieje trzecia liczba która znajduje się pomiędzy nimi (np. <math>\frac{x+y}{2}</math>).
<math>p(x,y)</math> jest prawdziwe wtedy i tylko wtedy gdy <math>x</math> jest
silnie mniejsze od <math>y</math>. Wtedy rzeczywiście dla dowolnych
dwóch liczb wymiernych <math>x,y</math> takich, że <math>x<y</math> istnieje trzecia liczba
która znajduje się pomiędzy nimi (np. <math>\frac{x+y}{2}</math>).


:## Formuła jest fałszywa w zbiorze liczb naturalnych
::(b) Formuła jest fałszywa w zbiorze liczb naturalnych w którym <math>p(x,y)</math> interpretujemy jako silną mniejszość. Na przykład dla jeśli <math>\textnormal{x}</math> będziemy wartościować na '''0''', a <math>\textnormal{y}</math> na '''1''' to prawdą będzie <math>p(x,y)</math> (poprzednik implikacji) ale nie będzie prawdą <math>\exists_z (p(x,z)\wedge
w którym <math>p(x,y)</math> interpretujemy jako silną mniejszość.
p(z,y))</math> bo pomiędzy liczbami '''0''' a '''1''' nie ma żadnej liczby naturalnej.
Na przykład dla jeśli <math>x</math> będziemy wartościować na 0, a
<math>y</math> na 1 to prawdą będzie <math>p(x,y)</math> (poprzednik
implikacji) ale nie będzie prawdą <math>\exists_z (p(x,z)\wedge
p(z,y))</math> bo pomiędzy liczbami 0 a 1 nie ma żadnej liczby
naturalnej.


}}
</div></div>


{{cwiczenie|[Uzupelnij]||
{{cwiczenie|4.5||


Udowodnij, że w dowolnym ustalonym modelu <math>M</math> prawdziwe są
Udowodnij, że w dowolnym ustalonym modelu <math>M</math> prawdziwe są następujące formuły
następujące formuły


# <math>\forall_x p(x) \Rightarrow (p(c))</math>
:1. <math>\forall_x p(x) \Rightarrow (p(c))</math>


# <math>p(c) \Rightarrow \forall_x p(c)</math>
:2. <math>p(c) \Rightarrow \forall_x p(c)</math>


# <math>\forall_x(p(x) \Rightarrow q(x)) \Rightarrow ((\forall_x p(x))\Rightarrow(\forall_x q(x)))</math>
:3. <math>\forall_x(p(x) \Rightarrow q(x)) \Rightarrow ((\forall_x p(x))\Rightarrow(\forall_x q x)))</math>


# <math>\exists_x p(x) \Leftrightarrow \neg \forall_x \neg p(x)</math>
:4. <math>\exists_x p(x) \Leftrightarrow \neg \forall_x \neg p(x)</math>


# <math>\neg \forall_x p(x) \Leftrightarrow \exists_x \neg p(x)</math>
:5. <math>\neg \forall_x p(x) \Leftrightarrow \exists_x \neg p(x)</math>


# <math>\forall_x r(x, f(x)) \Rightarrow \forall_x \exists_y r(x,y)</math>
:6. <math>\forall_x r(x, f(x)) \Rightarrow \forall_x \exists_y r(x,y)</math>


; Solution.
; Solution.
}}
}}


{{cwiczenie|[Uzupelnij]||
{{cwiczenie|4.6||


Rozważmy formułę
Rozważmy formułę
Linia 956: Linia 903:
</math></center>
</math></center>


(golibroda <math>b</math> goli wszystkich tych i tylko tych, którzy nie golą się sami).
(golibroda <math>\textnormal{b}</math> goli wszystkich tych i tylko tych, którzy nie golą się sami).
Udowodnij, że nie istnieje model dla powyższej formuły.
Udowodnij, że nie istnieje model dla powyższej formuły.
}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none">


; Solution.
:(Idea dowodu: kto w goli golibrodę?) Dla dowodu nie wprost przypuśćmy, że istnieje model <math>M</math> w którym ta formuła jest prawdziwa. Skoro tak to dla dowolnego wartościowania zmiennej <math>\textnormal{x}</math> prawdziwa jest formuła
: (Idea dowodu: kto w goli golibrodę?)
Dla dowodu nie wprost przypuśćmy, że istnieje model <math>M</math> w którym ta formuła jest
prawdziwa. Skoro tak to dla dowolnego wartościowania zmiennej
<math>x</math> prawdziwa jest formuła


<center><math>
<center><math>
Linia 970: Linia 915:
</math></center>
</math></center>


W szczególności dla wartościowania które <math>x</math> przypisuje ten sam
:W szczególności dla wartościowania które <math>\textnormal{x}</math> przypisuje ten sam obiekt co stałej <math>\textnormal{b}</math> powyższa formuła ma tę samą wartość co
obiekt co stałej <math>b</math> powyższa formuła ma tę samą wartość co


<center><math>
<center><math>
Linia 978: Linia 922:
</math></center>
</math></center>


a taka formuła nigdy nie jest spełniona. Wobec tego formuła z
:a taka formuła nigdy nie jest spełniona. Wobec tego formuła z zadania jest nieprawdziwa w <math>M</math>.
zadania jest nieprawdziwa w <math>M</math>.
</div></div>
}}
 
{amsplain}
 
</div>

Wersja z 01:28, 4 sie 2006

Wprowadzenie

Na początku rozdziału o logice zdaniowej rozważaliśmy zdanie

Jeśli Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} jest liczbą pierwszą to Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} jest liczbą nieparzystą lub Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} jest równe 2.

Opisaliśmy je wtedy formułą

p(qr).

w której p,q,r odpowiadały odpowiednio zdaniom

1. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} jest liczbą pierwszą,
2. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} jest liczbą nieparzystą,
3. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} jest równe 2.

Podstawiając zamiast zdania Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} jest liczbą pierwszą zmienną zdaniową Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{p}} ukrywamy jednak część informacji. Zdanie to mówi przecież o pewnej liczbie Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} , co więcej zdania p,q i Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{r}} dotyczą tej samej liczby Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} . Zapiszmy więc p(n) zamiast Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{p}} aby podkreślić fakt że prawdziwość Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{p}} zależy od tego jaką konkretną wartość przypiszemy zmiennej Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} . Zdanie p(n) będzie prawdziwe jeśli za Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} podstawimy jakąś liczbę pierwszą i fałszywe w przeciwnym przypadku. Zgodnie z tą konwencją nasze zdanie przyjmie postać

p(n)(q(n)r(n)).


Zwróćmy uwagę jednak, że trudno ocenić prawdziwość zdania Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{p}} dopóki nie podstawimy w miejsce Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} jakiejś konkretnej liczby. Z drugiej strony jednak zdanie jakąkolwiek liczbę nie postawimy w miejsce Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} zdanie będzie prawdziwe. Możemy więc przeformułować je jako

Dla każdej liczby naturalnej Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} , jeśli Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} jest liczbą pierwszą to Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} jest liczbą nieparzystą lub Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} jest równe 2.

Aby móc formalnie zapisywać zdania takie jak powyższe wprowadzimy kwantyfikator który będzie oznaczał ,,dla każdego" oraz który będzie oznaczał ,,istnieje". Każde wystąpienie kwantyfikatora będzie dotyczyło pewnej zmiennej. W naszym przykładzie napiszemy

np(n)(q(n)r(n)).

Możemy teraz powiedzieć, że powyższa formuła jest prawdziwa w zbiorze liczb naturalnych, gdzie p(n),q(n),r(n) będą oznaczać odpowiednio Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} jest liczbą pierwszą, Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} jest liczbą nieparzystą, Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{n}} jest równe 2.

Przy tej samej interpretacji p(n),q(n) moglibyśmy wyrazić zdanie

Istnieje parzysta liczba pierwsza.

jako

np(n)¬q(n)

Język rachunku predykatów

Podobnie jak dla rachunku zdań zaczniemy od zdefiniowania języka rachunku predykatów.

Definicja 2.1

Alfabet języka rachunku predykatów składa się z:

1. symboli stałych (a,b,c,)
2. symboli zmiennych (x,y,z,)
3. symboli funkcji (f1,f2,f3,,g1,g2,g3,,h1,h2,h3,)
4. symboli predykatów (p1,p2,p3,,q1,q2,q3,,r1,r2,r3,)
5. spójników logicznych: ,¬
6. kwantyfikatorów: ,
7. nawiasów i przecinków (niekonieczne)

Przyjmujemy, że cztery pierwsze alfabety są nieskończone, w tym sensie że nigdy nam nie braknie ich symboli. Z każdym symbolem funkcyjnym oraz predykatywnym jest związana liczba (którą zapisujemy w indeksie górnym) która będzie oznaczała liczbę jego argumetów.

Zwykle będą nam wystarczały symbole wymienione w nawiasach. Zanim przystąpimy do konstrukcji formuł zdefiniujemy tzw. termy.

Definicja 2.2 [Termy]

1. każdy symbol stałej jest termem
2. każdy symbol zmiennej jest termem
3. jeśli t1,..,tn są termami, a αn jest symbolem funkcyjnym, to αn(t1,..,tn) jest termem
4. nic innego nie jest termem

Przykład 2.3

Jeśli rozważymy język, w którym 1,2,3 są symbolami stałych, x,y są symbolami zmiennych a +2,×2,1,s1 są symbolami funkcji to poniższe napisy będą termami

1. +2(1,x)
2. 1(3)
3. s1(1(3))
4. ×2(y,+2(x,1(2)))

Dla uproszczenia zapisu będziemy często pomijać liczby opisujące ilość argumentów symbolu. Symbole binarne będziemy czasem zapisywać w notacji infiksowej. Zgodnie z tą konwencją powyższe termy możemy zapisać jako

1. 1+x
2. 3
3. s(3)
4. y×(x+(3))

Kiedy będziemy mówić o modelach zobaczymy, że termy będą interpretowane jako elementy rozważanej dziedziny, np. jeśli tą dziedziną będą liczby naturalne to termy będą interpretowane jako liczby naturalne. Formuły rachunku predykatów zdefiniujemy w dwóch krokach. Zaczniemy od formuł atomowych.

Definicja 2.4 [Formuły atomowe]

Jeśli t1,..,tn są termami, a βn jest symbolem predykatu, to βn(t1,..,tn) jest formułą atomową.

Przykład 2.5

Kontynuując przykład dotyczący termów przyjmijmy dodatkowo, że w rozważanym języku p3,q1,=2 są symbolami predykatów wtedy formułami atomowymi będą

1. p3(1+x,3,y×(x+(3)))
2. q1(1)
3. =2(y×(x+(3)),2)

Stosując analogiczną konwencję jak dla termów powyższe formuły atomowe zapiszemy jako

1. p(1+x,3,y×(x+(3)))
2. q(1)
3. y×(x+(3))=2

Symbole predykatywne będą odpowiadały funkcjom, które elementom rozważanej dziedziny (lub parom, trójkom itd. elementów) przypisują wartość prawdy lub fałszu. Takie funkcje nazywamy predykatami. W przypadku liczb naturalnych możemy na przykład mówić o predykacie pierwszości p(n), który przyjmuje wartość prawdy jeśli n jest liczbą pierwszą i fałszu w przeciwnym przypadku. Podobnie możemy mówić o binarnym predykacie równości (zwyczajowo oznaczanym przez =). Dla argumentów x,y przyjmuje on wartość prawdy wtedy kiedy Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest tą samą liczbą co Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} i fałszu w przeciwnym przypadku. Formuły atomowe będą opisywały proste zdania typu Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest liczbą pierwszą, Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} dzieli Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} , Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest równe Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} . Innymi słowy sprowadzają sie do stwierdzania czy dany zestaw argumentów ma pewną własność opisywaną predykatem.

Uwaga 2.6 W oznaczeniach z poprzednich przykładów, napis y×(x+(3))=q(1) nie jest formułą atomową ani termem. Gdyby predykat Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{q}} oznaczał np. bycie liczbą nieparzystą to powyższy napis powinniśmy przeczytać jako

y×(x+(3)) jest równe temu, że 1 jest liczbą nieparzystą.

Nie wolno porównywać elementów dziedziny (opisywanych przez termy) z wartościami prawdy i fałszu.

Z formuł atomowych będziemy budować bardziej złożone formuły zgodnie z poniższą definicją

Definicja 2.7 [Formuły rachunku predykatów]

1. Formuły atomowe są formułami.
2. Jeśli Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{A}} i B są formułami, to (AB) oraz ¬A są formułami.
3. Jeśli Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{A}} jest formułą i Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest zmienną, to xA jest formułą.
4. Nic innego nie jest formułą.

Przyjmujemy analogiczną konwencję dotyczącą nawiasowania jak dla rachunku zdań.

Przykład 2.8

W oznaczeniach z poprzednich przykładów poniższe napisy nie są formułami rachunku predykatów

  • x+1
  • (x=1)2
  • x(x+y)
  • x(¬x)

Poniższe napisy są formułami rachunku predykatów

  • x=1
  • x=1x=2
  • xq(x+y)
  • x¬(x=0)
  • xz¬(x=0)
  • xy¬(x=y)

Ćwiczenie 2.1

{{{3}}}


Często będziemy używać dodatkowych spójników ,,. Ponieważ wszystkie dadzą się zdefiniować przy pomocy i ¬ nie włączamy ich do języka, a napisy w których występują będziemy traktować jako skróty. Ustalmy poniższe definicje

1. ϕψdefϕ(ϕψ) (może jakoś inaczej?)
2. ϕψdef¬(ϕ¬ψ)
3. ϕψdef(ϕψ)(ψϕ)

Kwantyfikator egzystencjaly

Wprowadzimy jeszcze jeden bardzo ważny skrót - kwantyfikator egzystencjalny, oznaczamy go przez i definiujemy w następujący sposób

xϕdef¬(x¬ϕ)


Nieformalnie kwantyfikator egzystencjalny mówi o tym, że istnieje jakiś obiekt, który podstawiony w miejsce Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} uczyni formułę ϕ prawdziwą. Zdefiniowaliśmy go poprzez równoważne stwierdzenie które mówi że nieprawdą jest, że każdy obiekt podstawiony w miejsce Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} falsyfikuje ϕ. Zgodnie z powyższą konwencją formułę ze wstępu

n[p(n)¬q(n)]

powinniśmy rozumieć jako

¬n¬(p(n)¬q(n)).

Kwantyfikatory ograniczone

Kwantyfikatory ograniczone są skrótami które definujemy następująco

1. x:ϕψdefxϕψ
2. x:ϕψdefxϕψ

i czytamy

1. dla każdego Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} które spełnia ϕ spełnione jest ψ
2. istnieje Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} spełniające ϕ które spełnia ψ

Zgodnie z tą konwencją formułę 1.1 możemy zapisać następująco


n:p(n)q(n)r(n).


Podobnie formułę ?? zapiszemy jako

n:p(n)¬q(n)


Ćwiczenie 2.2

{{{3}}}

Zmienne wolne i związane

Jeśli Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest zmienną, a ϕ jest formułą to każda pozycję w napisie ϕ na której występuje symbol Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} i nie jest poprzedzony bezpośrednio kwantyfikatorem, nazywamy wystąpieniem zmiennej Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} . Wystąpienia dzielimy na wolne i związanie. Wystąpienie jest związane jeśli znajduje się ,,pod działaniem" jakiegoś kwantyfikatora.

Definicja 2.9

Rodzaj wystąpienia zmiennej w formule określamy zgodnie z poniższymi regułami:

1. Jeśli γ jest formułą atomową to wszystkie wystąpienia zmiennych w napisie γwolne.
2. Jeśli formuła jest postaci ϕψ lub ¬ϕ to wystąpienia zmiennych pozostają takie same jak wystąpienia w w ϕ oraz ψ.
3. Jeśli formuła jest postaci xϕ to wszystkie wystąpienia zmiennej Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} w xϕzwiązane.

Przykład 2.10

Rozważamy język z przykładu 2.5

1. w formule y×(x+(3))=x wszystkie wystąpienia zmiennych są wolne. Zmienna Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} ma dwa wystąpienia a zmienna Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} jedno.
2. w formule xy×(x+(3))=x wszystkie wystąpienia zmiennej Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} są wolne, i wszystkie wystąpienia zmiennej Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} są związane (nadal są tylko dwa wystąpienia Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} ponieważ zgodnie z definicją nie liczymy symbolu Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} w x)
3. w formule xyy×(x+(3))=x wszystkie wystąpienia zmiennych Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} oraz Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} są związane
4. w formule x=2xx=2 zmienna Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} ma jedno wystąpienie wolne (pierwsze) i jedno związane (drugie).
5. w formule x(x=2xx=2) obydwa wystąpienia zmiennej Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} są związane.

Ćwiczenie 2.3

W podanych poniżej formułach podkreśl wszystkie wolne wystąpienia zmiennych.

1. p(z)zp(z)
2. y((zq(y,z))q(y,z))
3. q(x,y)x(q(x,y)(yq(x,y)))
4. xyq(x,y)xyq(x,y)
5. (zp(z))(zq(z,z)xq(z,x))
Rozwiązanie

Definicja 2.11

Formułę ϕ nazywamy domkniętą jeśli żadna zmienna nie ma wolnych wystąpień w ϕ.

Ćwiczenie 2.4

Które z formuł z ćwiczenia 2.3 są domknięte?

Hint 1.

Rozwiązanie

Podstawienia

Aksjomatyka Rachunku Predykatów

Rachunek predykatów podobnie jak klasyczny rachunek zdań może być wprowadzony aksjomatycznie. Pierwsza grupa aksjomatów to aksjomaty klasycznego rachunku zdań. Druga dotyczy kwantyfikatora oraz jego interakcji z implikacją. Przypomnijmy, że kwantyfikator traktujemy jako pewien skrót zapisu.

Definicja 3.1

Schematy aksjomatów rachunku predykatów

1. (Aksjomaty logiki zdaniowej) Każda formuła pasująca do któregokolwiek z poniższych schematów jest tautologią
(a) (ϕ(ψϕ))
(b) (ϕ(νψ)((ϕν)(ϕν))
(c) (¬ϕψ)(¬ϕ¬ψ)ϕ
2. (Aksjomaty dotyczące kwantyfikatora)
(a) Dla dowolnej formuły ϕ oraz termu Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{t}} następująca formuła jest aksjomatem xϕ(ϕ[xt]) (uwaga na podstawienie)
(b) Dla dowolnej formuły ϕ oraz zmiennej Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} , która nie ma wolnych wystąpień w ϕ następująca formuła jest aksjomatem ϕxϕ
(c) Dla dowolnych formuł ϕ i ψ aksjomatem jest formuła x(ϕψ)((xϕ)(xψ))

Podobnie jak w rachunku zdań dowodem formuły ϕ nazwiemy ciąg formuł ϕ0,,ϕn taki, że ϕn jest tym samym napisem co ϕ a każda formuła ϕi dla i<n jest aksjomatem rachunku predykatów lub powstaje z dwóch formuł występujących wcześniej w dowodzie poprzez zastosowanie reguły Modus Ponens Modus Ponens (Wykład2).

Definicja 3.2

Twierdzeniem rachunku predykatów nazywamy dowolną formułę którą da się dowieść z aksjomatów rachunku predykatów.

Przykład 3.3

np. p(t)xp(x).

Modele

Dotychczas wprowadziliśmy rachunek predykatów aksjomatycznie. Zaletą takiego definiowania jest niewielka ilość potrzebnych pojęć. Z drugiej strony jednak dowody z aksjomatów są żmudne i nie sprzyjają budowaniu intuicji. W przypadku rachunku zdań widzieliśmy, że ten sam zbiór formuł można równoważnie zdefiniować za pomocą matrycy Boolowskiej matryca boolowska(Wykład2). Niestety w przypadku rachunku predykatów nie istnieje taka skończona struktura, która pozwalałaby nam stwierdzać czy formuła jest twierdzeniem. Zobaczymy jednak, że pewne struktury warto rozważać. Mówiąc o modelach będziemy musieli użyć naiwnej teorii zbiorów opisanej w pierwszym rozdziale. Decydujemy się na to nadużycie w celu zdobycia dobrych intuicji i sprawności w posługiwaniu się kwantyfikatorami.

Przykład 4.1

Rozważmy następujące zdanie

xyxy


Sytuacja 1.

Przypuśćmy, że to zdanie mówi o liczbach naturalnych, a xy jest prawdą wtedy i tylko wtedy gdy liczba Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest silnie mniejsza od liczby Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} . Wtedy zdanie to powinniśmy uznać za nieprawdziwe, gdyż dla liczby 0 nie istnieje silnie mniejsza liczba naturalna.

Sytuacja 2.

Przypuśćmy, że to zdanie mówi o liczbach całkowitych, a xy jest prawdą wtedy i tylko wtedy gdy liczba Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest silnie mniejsza od liczby Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} . Wtedy zdanie to powinniśmy uznać prawdziwe. Istotnie, dla każdej liczby całkowitej Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} możemy dobrać liczbę Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} (na przykład równą x1) która jest od niej silnie mniejsza.

Sytuacja 3.

Przypuśćmy, że to zdanie mówi o liczbach naturalnych, a xy jest prawdą wtedy i tylko wtedy gdy liczba Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest równa liczbie Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} . Wtedy zdanie to powinniśmy uznać prawdziwe (do każdej liczby Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} możemy dobrać liczbę Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} tak aby była równa Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} ).

Powyższe przykłady pokazują różne interpretacje tej samej formuły. Wydaje się również że prawdziwość zdania zmienia się w zależności od interpretacji. Aby mówić o interpretacji danej formuły powinniśmy powiedzieć w jakim zbiorze będziemy interpretować zmienne i stałe (w naszym przykładzie były to kolejno zbiory N,Z,N) oraz jak interpretujemy symbole funkcyjne i predykatywne (w naszym przykładzie występował jedynie symbol predykatywny który był interpretowany kolejno jako silna mniejszość, silna mniejszość, równość). Poniżej definiujemy formalnie pojęcie modelu.

Definicja 4.2 [Model]

Modelem języka rachunku predykatów nazywamy M=(D,I), gdzie:

1. D - jest niepustym zbiorem (dziedziną).
2. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{I}} - jest interpretacją symboli języka taką, że:
(a) dla symboli stałych: I(c)D (symbole stałych są interpretowane jako elementy dziedziny)
(b) dla symboli funkcyjnych: I(f):DkD, gdzie Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{k}} jest ilością argumentów Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{f}} (symbole funkcyjne są interpretowane jako funkcje z potęgi dziedziny w dziedzinę)
(c) dla symboli predykatów: I(p):Dk0,1, gdzie k jest ilością argumentów Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{p}} (symbole predykatywne są interpretowane jako funkcje przekształcające ciągi elementów z dziedziny w prawdę lub fałsz)

Definicja 4.3

Mówimy, że model M jest odpowiedni dla formuły ϕ jeśli są w nim zdefiniowane interpretacje wszystkich symboli stałych funkcji oraz predykatów występujących w formule ϕ.

Zanim ustalimy co to znaczy że formuła jest prawdziwa w modelu zdefiniujemy tzw. wartościowanie zmiennych

Definicja 4.4

Wartościowanie zmiennych modelu M=(D,I) to funkcja która zmiennym przypisuje wartości dziedziny.

Jeśli ustalimy już ocenę zmiennych w modelu to możemy też mówić o wartościach przyjmowanych przez termy.

Definicja 4.5 [Wartościowanie termów]

Przy ustalonym modelu M=(D,I) wartościowanie zmiennych σ możemy rozszerzyć na wszytekie termy. Oznaczymy je przez σ^. Rozszerzenie definiujemy w następujący sposób

1. jeśli term Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{t}} jest zmienną, σ^(t)=σ(t)
2. jeśli term Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{t}} jest stałą, to σ^(t)=I(t) (stałe wartościujemy zgodnie z interpretacją w modelu)
3. jeśli term Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{t}} jest postaci f(t0,..,tn), to
σ^(f(t0,..,tn))=I(f)(σ^(t0),..,σ^(tn))


czyli aby poznać wartość termu najpierw obliczamy wartości poddtermów a potem obliczamy wartość funkcji odpowiadającej w modelu M symbolowi Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{f}} na wartościach poddtermów. Funkcję wartościującą termy będziemy często oznaczali tym samym

symbolem co wartościowanie zmiennych.

Przykład 4.6

Przypuśćmy, że w rozważanym języku symbol o jest symbolem stałej, symbole s,+,× są symbolami funkcji, symbole <,= są symbolami predykatów, x,y,z są zmiennymi. Ustalmy model w którym dziedziną jest zbiór liczb naturalnych, a symbole są interpretowane zgodnie z ich zwyczajowym znaczeniem (Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{s}} będziemy interpretować jako jednoargumentową funkcję która każdej liczbie przypisuje liczbę większą o jeden, o interpretujemy jako 0). Jeśli ustalimy ocenę zmiennych tak, że σ(x)=2,σ(y)=3,σ(z)=5 to

1. term x+y będzie wartościowany na 5
2. term s(x) będzie wartościowany na 3
3. term o będzie wartościowany na 0 (zgodnie z interpretacją stałych)
4 term s(o)×s(z) będzie wartościowany na 6

Definicja 4.7 [Waluacja formuł]

Zdefiniujemy teraz prawdziwość formuł w ustalonym modelu M=(D,I) przy ustalonym wartościowaniu zmiennych σ.

1. Jeśli formuła jest postaci p(t0,..,tn) (czyli jest formułą atomową), to jest ona prawdziwa wtedy i tylko wtedy jeśli wartością predykatu odpowiadającego w modelu M symbolowi Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{p}} (czyli I(p)) na elementach dziedziny odpowiadających termom t0,,tn jest prawdą.
2. Jeśli formuła jest postaci AB, to jest ona prawdziwa wtedy i tylko wtedy, gdy formuła Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{A}} jest wartościowana na fałsz lub formuła B jest wartościowana na prawdę (zgodnie z tabelą dla implikacji ??)
3. Jeśli formuła jest postaci ¬A to jest ona prawdziwa wtedy i tylko wtedy gdy formuła Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{A}} jest wartościowana na fałsz (zgodnie z tabelą dla negacji ??)
4. Jeśli formuła jest postaci xA, to jest ona prawdziwa jeśli prawdziwe jest Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{A}} i dla każdego wartościowania zmiennych różniącego się od σ co najwyżej interpretacją symbolu Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} prawdziwe jest Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{A}} .
5. Jeśli formuła jest postaci xA, to jest ona prawdziwa jeśli istnieje ocena zmiennych różniąca się od σ co najwyżej interpretacją symbolu Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} taka, że przy tej ocenie prawdziwe jest Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{A}} .

Interpretacje kwantyfikatorów, jest w gruncie rzeczy bardzo intuicyjna. Formuła xA jest prawdziwa wtedy i tylko wtedy gdy dla każdego elementu dziedziny ,,podstawionego" w miejsce Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} w formule Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{A}} prawdziwa jest formuła Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{A}} (uwaga! podstawiamy jedynie w miejsca wolnych wystąpień Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} ). Analogicznie formuła xA jest prawdziwa wtedy i tylko wtedy gdy istnieje taki element dziedziny, który ,,podstawiony" w miejsce Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} w formule Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{A}} uczyni ją prawdziwa. Dotąd rozważaliśmy kwantyfikator jako skrót pewnego napisu, jednak ze względu na jego naturalną interpretacje zdecydowaliśmy się dodać go do definicji waluacji formuł. W ćwiczeniu 4 pokażemy, że zdefiniowana powyżej waluacja formuł z kwantyfikatorem egzystencjalnym jest zgodna z waluacją zdefiniowanego wcześniej skrótu.

Przykład 4.8

Możemy teraz powiedzieć, że formuła

y(x<yx=y)

jest prawdziwa w modelu z przykładu 4.6 przy ocenie zmiennych σ1 takiej, że σ1(x)=0, oraz że jest fałszywa w tym samym modelu dla przy ocenie zmiennej σ2 takiej, że σ2(x)=7 (bo na przykład wartościując Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} na 3 formuła x<yx=y nie będzie prawdziwa).

Istnieją jednak formuły które są prawdziwe w modelu z przykładu 4.6 niezależnie od oceny zmiennych. Przykładem może być

y(x<y+xy=o).

Definicja 4.9

Formuła ϕ jest prawdziwa w modelu M jeśli jest prawdziwa w tym modelu przy każdej ocenie zmiennych. Mówimy wtedy, że model M jest modelem formuły ϕ.

Ciekawe, że istnieją również formuły które są prawdziwe we wszystkich modelach. Rozważmy formułę

(xp(x))(xp(x)).

Rozważmy dowolny model M odpowiedni dla powyższej formuły (odpowiedni to znaczy taki który ustala interpretację symbolu predykatywnego Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{p}} ). Jeśli w tym modelu nie jest prawdziwa formuła (xp(x)) to cała implikacja 4.1 jest prawdziwa a więc wszystkie te modele są modelami formuły 4.1. Pozostają więc do rozważenia te modele w których prawdziwe jest (xp(x)). Weźmy dowolny taki model i oznaczmy go przez M. Aby pokazać, że (xp(x)) jest prawdziwe w M wystarczy wskazać że istnieje w dziedzinie taka wartość, że podstawiona w miejsce Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} uczyni predykat oznaczony przez Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{p}} prawdziwym. Formuła (xp(x)) jest prawdziwa w M więc każda wartość podstawiona pod Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} czyni predykat odpowiadający Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{p}} prawdziwym. Ponieważ dziedzina modelu M zgodnie z definicją 4.2 nie może być pusta więc istnieje przynajmniej jeden element dziedziny. Ponieważ w dziedzinie istnieje przynajmiej jeden element, oraz że formuła p(x) jest prawdziwy niezależnie od tego co podstawimy w miejsce Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} , to rzeczywiście istnieje taki element dziedziny, który podstawiony w miejsce Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} uczyni formułę p(x) prawdziwą. A więc formuła xp(x) również jest prawdziwa. Wobec tego cała implikacja 4.1 jest prawdziwa w M. Pokazaliśmy więc, że formuła 4.1 jest prawdziwa w każdym modelu.

Definicja 4.10

Formułę rachunku predykatów nazywamy tautologią rachunku predykatów jeśli jest prawdziwa w każdym odpowiednim dla niej modelu .

Podobnie jak klasycznym rachunku zdań, w rachunku predykatów również tautologie okazują się tym samym co twierdzenia. Mówi o tym następujące klasyczne twierdzenie udowodnione przez Kurt Godel.

Twierdzenie 4.11 [Kurt Godel]

Formuła rachunku predykatów jest tautologią rachunku predykatów wtedy i tylko wtedy gdy jest twierdzeniem rachunku predykatów.

Dowód powyższego twierdzenia jest przedstawiony na wykładzie Logika dla informatyków. Zauważmy, że zgodnie z powyższym twierdzeniem aby udowodnić, że formuła nie jest twierdzeniem rachunku predykatów wystarczy wskazać model w którym nie jest prawdziwa.

Ćwiczenie 4.1

Rozważmy model M, którego dziedziną będą liczby naturalne, oraz w którym jest jeden predykat binarny oznaczony symbolem Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{p}} , który przyjmuje wartość prawdy jeśli pierwszy z jego argumentów dzieli drugi. Napisz formuły które w modelu M są równowążne następującym zdaniom (w kolejnych formułach można wykorzystywać skróty dla formuł zdefiniowanych wcześniej)

1. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest równe Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}}
2. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest zerem
3. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest jedynką
4. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest liczbą pierwszą
5. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest kwadratem pewnej liczby pierwszej
6. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest iloczynem dwóch różnych liczb pierwszych
7. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest iloczynem dwóch liczb pierwszych
8. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest potęgą liczby pierwszej
9. dla każdych dwóch liczb istnieje ich największy wspólny dzielnik
10. dla każdych dwóch liczb istnieje ich najmniejsza wspólna wielokrotność
11 liczby Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} i Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} są względnie pierwsze
Podpowiedź
Rozwiązanie

Ćwiczenie 4.2

Rozważmy model M, którego dziedziną będą wszytkie punkty, odcinki i okręgi płaszyczny, oraz w którym jest jeden predykat binarny oznaczony symbolem Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{p}} , który przyjmuje wartość prawdy jeśli jego argumenty mają przynajmniej jeden punkt wspólny. Napisz formuły które w modelu M są równowążne następującym zdaniom (w kolejnych formułach można wykorzystywać skróty dla formuł zdefiniowanych wcześniej)

1. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest równe Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}}
2. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest nadzbiorem Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}}
3. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest punktem
4. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest odcinkiem
5. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest okręgiem
6. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest równoległe do Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}}
7. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} i Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} mają dokładenie jeden punkt wspólny
8. okręgi Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} i Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} są do siebie styczne
9. okręgi Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} i Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} są do siebie wewnętrznie styczne i okrąg Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest okręgiem wewnętrznym
10. okręgi Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} i Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} są do siebie zewnętrzenie styczne
11. punkt Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest końcem odcinka Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}}
12. odcinek Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest styczny do okręgu Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}}
13. okręgi Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} i Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}} mają taką samą średnicę
14. okrąg Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} ma średnicę mniejszą niż okrąg Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}}
15. odcinek Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest krótszy od odcinka Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}}
16. odcinek Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest średnicą okręgu Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}}
17. Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{x}} jest prostopadłe do Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{y}}
18. odcinki x,y,z,w tworzą kwadrat
Podpowiedź

Ćwiczenie 4.3

Napisz formuły które mówią:

  • każdy odcinek ma dokładnie dwa końce
  • dla każdego okręgu wszystkie jego średnice przecinają się w dokładnie jednym punkcie
  • dla dowolnego odcinka istnieje dłuższy odcinek, który go zawiera
  • dla dowolnych trzech punktów niewspółliniowych istnieje okrąg który przechodzi przez wszystkie trzy punkty
  • istnieją dwa okręgi, które przecinają się w dokładnie 5 punktach.
Solution.

Ćwiczenie 4.4

Dla każdej z poniższych formuł znajdź model w którym jest prawdziwa oraz model w którym jest fałszywa

1. xyp(x,y)p(y,x)
2. (xyp(x,y))yxp(x,y)
3. (x(p(x)q(x)))(x(p(x))xq(x))
4. y[(x(p(x)q(x))q(y))p(z)]
5. xy(p(x,y)z(p(x,z)p(z,y))
6. ...
Rozwiązanie

Ćwiczenie 4.5

Udowodnij, że w dowolnym ustalonym modelu M prawdziwe są następujące formuły

1. xp(x)(p(c))
2. p(c)xp(c)
3. x(p(x)q(x))((xp(x))(xqx)))
4. xp(x)¬x¬p(x)
5. ¬xp(x)x¬p(x)
6. xr(x,f(x))xyr(x,y)
Solution.

Ćwiczenie 4.6

Rozważmy formułę

x(¬g(x,x)g(b,x))

(golibroda Parser nie mógł rozpoznać (błąd składni): {\displaystyle \textnormal{b}} goli wszystkich tych i tylko tych, którzy nie golą się sami). Udowodnij, że nie istnieje model dla powyższej formuły.

Rozwiązanie