Logika dla informatyków/Język logiki pierwszego rzędu: Różnice pomiędzy wersjami
Nie podano opisu zmian |
|||
Linia 1: | Linia 1: | ||
__TOC__ | __TOC__ | ||
<!--%% --> | |||
==Język logiki pierwszego rzędu.== | |||
\setcounte\prooftree twierdzenie \justifies 0 \using \textrm{(W)}\endprooftree | |||
Język logiki pierwszego rzędu\footnote{Logika pierwszego rzędu | |||
nazywana jest też {\it rachunkiem | |||
predykatów\/} lub ''rachunkiem kwantyfikatorów\/}.'' | |||
można traktować jak rozszerzenie rachunku zdań, | |||
pozwalające formułować stwierdzenia o zależnościach pomiędzy obiektami | |||
indywiduowymi (np. relacjach i funkcjach). | |||
==Język logiki pierwszego rzędu.== | ==Język logiki pierwszego rzędu.== | ||
Linia 8: | Linia 19: | ||
predykatów'' lub ''rachunkiem kwantyfikatorów.''</ref> | predykatów'' lub ''rachunkiem kwantyfikatorów.''</ref> | ||
można traktować jak rozszerzenie rachunku zdań, | można traktować jak rozszerzenie rachunku zdań, | ||
pozwalaj±ce formułować stwierdzenia o | pozwalaj±ce formułować stwierdzenia o zależnościach pomiędzy obiektami | ||
indywiduowymi | indywiduowymi (np. relacjach i funkcjach). | ||
Dzięki zastosowaniu {\em kwantyfikatorów\/}, odwołujących się | Dzięki zastosowaniu {\em kwantyfikatorów\/}, odwołujących się | ||
do całej zbiorowości rozważanych obiektów, | do całej zbiorowości rozważanych obiektów, | ||
Linia 17: | Linia 28: | ||
Do zestawu symboli rachunku zdań dodajemy następujące | Do zestawu symboli rachunku zdań dodajemy następujące | ||
nowe składniki syntaktyczne: | nowe składniki syntaktyczne: | ||
*{\em Symbole operacji i relacji\/} | *{\em Symbole operacji i relacji\/} (w tym symbol równości <math>=</math>); | ||
*{\em Zmienne indywiduowe\/}, których wartości mają przebiegać rozważane | *{\em Zmienne indywiduowe\/}, których wartości mają przebiegać rozważane | ||
dziedziny; | dziedziny; | ||
Linia 30: | Linia 41: | ||
{{definicja||| | {{definicja||| | ||
Przez ''sygnaturę | Przez ''sygnaturę'' <math>\Sigma</math> rozumieć | ||
będziemy rodzinę zbiorów <math>\Sigma^F_n</math>, dla <math>n\geq0</math> | będziemy rodzinę zbiorów <math>\Sigma^F_n</math>, dla <math>n\geq0</math> | ||
oraz rodzinę zbiorów <math>\Sigma^R_n</math>, dla <math>n\geq 1</math>. Elementy | oraz rodzinę zbiorów <math>\Sigma^R_n</math>, dla <math>n\geq 1</math>. Elementy | ||
<math>\Sigma^F_n</math> będziemy nazywać {\em symbolami operacji | <math>\Sigma^F_n</math> będziemy nazywać {\em symbolami operacji | ||
<math>n</math>-ar\-gu\-men\-to\-wych}, | <math>n</math>-ar\-gu\-men\-to\-wych}, aelementy <math>\Sigma^R_n</math> będziemy nazywać {\em | ||
symbolami relacji <math>n</math>-argumentowych}. Przyjmujemy, że wszystkie te | symbolami relacji <math>n</math>-argumentowych}. Przyjmujemy, że wszystkie te | ||
zbiory są parami rozłączne. | zbiory są parami rozłączne. | ||
Linia 42: | Linia 53: | ||
W praktyce, sygnatura zwykle jest skończona | W praktyce, sygnatura zwykle jest skończona | ||
i zapisuje się ją jako ciąg symboli. Np. ciąg złożony ze znaków | i zapisuje się ją jako ciąg symboli. Np. ciąg złożony ze znaków | ||
<math>+,\cdot,0,1</math> | <math>+,\cdot,0,1</math> (o znanej każdemu | ||
liczbie argumentów | liczbie argumentów) tworzy sygnaturę języka teorii ciał. | ||
}} | }} | ||
Linia 54: | Linia 65: | ||
*Zmienne indywiduowe są termami. | *Zmienne indywiduowe są termami. | ||
*Dla każdego <math>n\geq 0</math> i każdego symbolu operacji <math>f\in\Sigma^F_n</math>, jeśli | *Dla każdego <math>n\geq 0</math> i każdego symbolu operacji <math>f\in\Sigma^F_n</math>, jeśli | ||
<math>t_1,\ldots,t_n</math> są termami, to <math>f | <math>t_1,\ldots,t_n</math> są termami, to <math>f(t_1,\ldots,t_n)</math> jest też termem. | ||
}} | }} | ||
Zauważmy, że z powyższej definicji wynika iż stałe sygnatury <math>\Sigma</math> | Zauważmy, że z powyższej definicji wynika iż stałe sygnatury <math>\Sigma</math> (czyli | ||
symbole operacji zeroargumentowych | symbole operacji zeroargumentowych) są termami. | ||
{{definicja||| | {{definicja||| | ||
Dla każdego termu <math>t\in\termy</math> definiujemy zbiór <math>\fv t</math> zmiennych | Dla każdego termu <math>t\in\termy</math> definiujemy zbiór <math>\fv t</math> zmiennych | ||
''występujących | ''występujących'' | ||
w <math>t</math>. Definicja jest indukcyjna: | w <math>t</math>. Definicja jest indukcyjna: | ||
*<math>\fv x=\{x\}</math>. | *<math>\fv x=\{x\}</math>. | ||
*<math>\fv {f | *<math>\fv {f(t_1,\ldots, t_n)}=\bigcup_{i=1}^n \fv{t_i}</math>. | ||
}} | }} | ||
Linia 78: | Linia 89: | ||
*Dla każdego <math>n\geq 1</math>, każdego symbolu <math>r\in\Sigma^R_n</math> relacji | *Dla każdego <math>n\geq 1</math>, każdego symbolu <math>r\in\Sigma^R_n</math> relacji | ||
<math>n</math>-argumentowej, oraz dla dowolnych termów <math>t_1,\ldots,t_n\in\termy</math>, napis | <math>n</math>-argumentowej, oraz dla dowolnych termów <math>t_1,\ldots,t_n\in\termy</math>, napis | ||
<math>r | <math>r(t_1,\ldots,t_n)</math> jest formułą atomową. | ||
*Dla dowolnych termów <math>t_1, t_2</math>, napis <math> | *Dla dowolnych termów <math>t_1, t_2</math>, napis <math>(t_1=t_2)</math> jest formułą atomową. | ||
}} | }} | ||
'''Konwencja:''' Niektóre dwuargumentowe symbole relacyjne | '''Konwencja:''' Niektóre dwuargumentowe symbole relacyjne (np. <math>\leq</math>) | ||
i funkcyjne | i funkcyjne (np. <math>+,\cdot</math>) są zwyczajowo pisane pomiędzy argumentami. | ||
Na przykład formułę atomową <math>{\leq} | Na przykład formułę atomową <math>{\leq}(x,y)</math> zwykle piszemy jako ,,<math>x\leq y</math>''. | ||
{{definicja||def-form| | {{definicja||def-form| | ||
Linia 92: | Linia 103: | ||
<math>\ZI</math> definiujemy indukcyjnie. | <math>\ZI</math> definiujemy indukcyjnie. | ||
*Każda formuła atomowa jest formułą. | *Każda formuła atomowa jest formułą. | ||
*Jeśli <math>\var\varphi,\psi</math> są formułami, to <math> | *Jeśli <math>\var\varphi,\psi</math> są formułami, to <math>(\var\varphi\to\psi)</math> | ||
jest też formułą. | jest też formułą. | ||
*Jeśli <math>\var\varphi</math> jest formułą a <math>x\in\ZI</math> jest zmienną indywiduową, to | *Jeśli <math>\var\varphi</math> jest formułą a <math>x\in\ZI</math> jest zmienną indywiduową, to | ||
Linia 101: | Linia 112: | ||
występujących w tej formule: | występujących w tej formule: | ||
*<math>\fv\bot=\emptyset</math>; | *<math>\fv\bot=\emptyset</math>; | ||
*<math>\fv{r | *<math>\fv{r(t_1,\ldots,t_n)} =\bigcup_{i=1}^n \fv{t_i}</math>; | ||
*<math>\fv{t_1=t_2}=\fv{t_1}\cup\fv{t_2}</math>; | *<math>\fv{t_1=t_2}=\fv{t_1}\cup\fv{t_2}</math>; | ||
*<math>\fv{\var\varphi\to\psi}=\fv\var\varphi\cup\fv\psi</math>; | *<math>\fv{\var\varphi\to\psi}=\fv\var\varphi\cup\fv\psi</math>; | ||
*<math>\fv{\forall x\var\varphi}=\fv\var\varphi-\{x\}</math>. | *<math>\fv{\forall x\var\varphi}=\fv\var\varphi-\{x\}</math>. | ||
Formułę bez kwantyfikatorów nazywamy ''formułą otwartą | Formułę bez kwantyfikatorów nazywamy ''formułą otwartą''. | ||
Natomiast formuła bez zmiennych wolnych nazywa się \textit{zdaniem}, | Natomiast formuła bez zmiennych wolnych nazywa się \textit{zdaniem}, | ||
lub ''formułą zamkniętą | lub ''formułą zamkniętą''. | ||
}} | }} | ||
Negację, koniunkcję, alternatywę, symbol prawdy i równoważność formuł | Negację, koniunkcję, alternatywę, symbol prawdy i równoważność formuł | ||
definiujemy podobnie jak w przypadku rachunku zdań. | definiujemy podobnie jak w przypadku rachunku zdań. | ||
Kwantyfikatoregzystencjalny | |||
zdefiniujemy jako skrót notacyjny przy pomocy \textit{uogólnionego prawa | zdefiniujemy jako skrót notacyjny przy pomocy \textit{uogólnionego prawa | ||
De Morgana}: | De Morgana}: | ||
Linia 129: | Linia 140: | ||
rozumiemy tu zwykłe pojawienie się <math>x</math> w jakimkolwiek termie w <math>\var\varphi</math>. I tak | rozumiemy tu zwykłe pojawienie się <math>x</math> w jakimkolwiek termie w <math>\var\varphi</math>. I tak | ||
na przykład w formule\footnote{Zakładamy tu, że <math>s</math> oraz <math>r</math> są symbolami | na przykład w formule\footnote{Zakładamy tu, że <math>s</math> oraz <math>r</math> są symbolami | ||
relacji.} <math>\exists x\forall | relacji.} <math>\exists x\forall u(r(x,y)\to \forall y\exists x\,s(x,y,z))</math> zmienna | ||
<math>u</math> nie występuje, podczas gdy <math>x</math> i <math>y</math> wystepują po dwa razy, a <math>z</math> występuje | <math>u</math> nie występuje, podczas gdy <math>x</math> i <math>y</math> wystepują po dwa razy, a <math>z</math> występuje | ||
jeden raz. | jeden raz. | ||
Linia 135: | Linia 146: | ||
\textit{związanych} w formułach. Wszystkie wystąpienia zmiennych | \textit{związanych} w formułach. Wszystkie wystąpienia zmiennych | ||
w formułach | w formułach | ||
atomowych są wolne. Wolne | atomowych są wolne. Wolne (związane) wystąpienia w formułach | ||
\mbox{<math>\var\varphi</math> i <math>\psi</math>} | \mbox{<math>\var\varphi</math> i <math>\psi</math>} | ||
pozostają wolne | pozostają wolne (związane) w formule <math>\var\varphi\to\psi</math>. Wszystkie wolne | ||
wystąpienia <math>x</math> w <math>\var\varphi</math> stają się związanymi wystąpieniami w formule | wystąpienia <math>x</math> w <math>\var\varphi</math> stają się związanymi wystąpieniami w formule | ||
<math>\exists x\var\varphi</math> | <math>\exists x\var\varphi</math> (związanymi przez dopisanie kwantyfikatora <math>\exists</math>), a | ||
charakter pozostałych wystąpień jest taki sam w </math>\var\varphi<math> i w </math>\exists | charakter pozostałych wystąpień jest taki sam w </math>\var\varphi<math> i w </math>\exists | ||
x\var\varphi</math>. | x\var\varphi</math>. | ||
Przykładowo w formule </math>\exists x\forall | Przykładowo w formule </math>\exists x\forall u(r(x,\underline{y})\to | ||
\forall y\exists x\,s | \forall y\exists x\,s(x,y,z))</math> podkreślone wystąpienie <math>y</math> jest wolne, a nie | ||
podkreślone jest związane. Obydwa wystąpienia <math>x</math> są zwiazane, ale przez różne | podkreślone jest związane. Obydwa wystąpienia <math>x</math> są zwiazane, ale przez różne | ||
kwantyfikatory. | kwantyfikatory. | ||
Na koniec | Na koniec uwaga o nazwach zmiennych związanych. Rozróżnienie pomiędzy zmiennymi | ||
wolnymi a związanymi jest analogiczne do rozróżnenia pomiedzy identyfikatorami | wolnymi a związanymi jest analogiczne do rozróżnenia pomiedzy identyfikatorami | ||
lokalnymi a globalnymi w językach programowania. Globalne identyfikatory, | lokalnymi a globalnymi w językach programowania. Globalne identyfikatory, | ||
widoczne na zewnątrz, odpowiadają zmiennym wolnym, podczas gdy lokalne | widoczne na zewnątrz, odpowiadają zmiennym wolnym, podczas gdy lokalne | ||
identyfikatory | identyfikatory (związane np. deklaracją w bloku) nie są widoczne na zewnątrz | ||
zakresu ich deklaracji. | zakresu ich deklaracji. | ||
Intuicyjnie naturalne jest oczekiwanie, | Intuicyjnie naturalne jest oczekiwanie, | ||
że zmiana zmiennej | że zmiana zmiennej | ||
związanej na inną zmienną | związanej na inną zmienną (tak aby nie wprowadzić konfliktu wynikającego ze | ||
zmiany struktury wiązań | zmiany struktury wiązań) nie powinna zmieniać znaczenia formuły.\footnote{Taka | ||
zamiana zmiennych bywa nazywana <math>\alpha</math>-\textit{konwersją}.} Tak w istocie | zamiana zmiennych bywa nazywana <math>\alpha</math>-\textit{konwersją}.} Tak w istocie | ||
będzie, jak się przekonamy poniżej | będzie, jak się przekonamy poniżej (Fakt [[#alfa-konw]]). | ||
===Semantyka formuł=== | ===Semantyka formuł=== | ||
Niech <math>\Sigma</math> będzie sygnaturą. {\em Struktura} <math>\strA</math> nad | Niech <math>\Sigma</math> będzie sygnaturą. {\em Struktura} <math>\strA</math> nad | ||
sygnaturą <math>\Sigma</math> | sygnaturą <math>\Sigma</math> (lub po prostu <math>\Sigma</math>-struktura) to | ||
niepusty zbiór <math>A</math>, zwany {\em nośnikiem}, wraz z | niepusty zbiór <math>A</math>, zwany {\em nośnikiem}, wraz z | ||
interpretacją każdego symbolu operacji <math>f\in\Sigma^F_n</math> jako | interpretacją każdego symbolu operacji <math>f\in\Sigma^F_n</math> jako | ||
Linia 169: | Linia 180: | ||
relacji <math>r\in\Sigma^R_n</math> | relacji <math>r\in\Sigma^R_n</math> | ||
jako relacji <math>n</math>-argumentowej <math>r^{\strA}\subseteq A^n</math>. | jako relacji <math>n</math>-argumentowej <math>r^{\strA}\subseteq A^n</math>. | ||
(Na przykład, jeśli <math>\Sigma</math> składa się z jednego symbolu relacji | |||
dwuargumentowej, to każdy graf zorientowany jest <math>\Sigma</math>-strukturą. | dwuargumentowej, to każdy graf zorientowany jest <math>\Sigma</math>-strukturą.) | ||
W praktyce, strukturę relacyjną przedstawia się jako | W praktyce, strukturę relacyjną przedstawia się jako | ||
krotkę postaci | krotkę postaci | ||
Linia 183: | Linia 194: | ||
{\em Wartościowaniem} w <math>\Sigma</math>-strukturze <math>\strA</math> nazwiemy | {\em Wartościowaniem} w <math>\Sigma</math>-strukturze <math>\strA</math> nazwiemy | ||
dowolną funkcję <math>\varrho:X\to A</math>. Dla wartościowania <math>\varrho</math>, zmiennej | dowolną funkcję <math>\varrho:X\to A</math>. Dla wartościowania <math>\varrho</math>, zmiennej | ||
<math>x\in\ZI</math> | <math>x\in\ZI</math> orazelementu <math>a\in A</math> definiujemy nowe wartościowanie | ||
<math>\varrho_x^a:X\to A</math>, będące modyfikacją wartościowania <math>\varrho</math> na | <math>\varrho_x^a:X\to A</math>, będące modyfikacją wartościowania <math>\varrho</math> na | ||
argumencie <math>x</math>, w następujący sposób, | argumencie <math>x</math>, w następujący sposób, | ||
Linia 189: | Linia 200: | ||
<span id=""/> <math> | <span id=""/> <math> | ||
\varrho_x^a | \varrho_x^a(y)=\przypadk\prooftree \varrho(y)}{<math>y\neq x</math> \justifies a \using \textrm{(W)}\endprooftree | ||
</math> | </math> | ||
Linia 196: | Linia 207: | ||
<math>\wartt t\strA\varrho</math>, lub <math>\wfz t\varrho</math>, gdy <math>\strA</math> jest znane. | <math>\wartt t\strA\varrho</math>, lub <math>\wfz t\varrho</math>, gdy <math>\strA</math> jest znane. | ||
Definicja jest indukcyjna: | Definicja jest indukcyjna: | ||
*<math>\wartt x\strA\varrho=\varrho | *<math>\wartt x\strA\varrho=\varrho(x)</math>. | ||
*</math>\wartt {f | *</math>\wartt {f(t_1,\ldots,t_n)}\strA\varrho= f^\strA(\wartt | ||
{t_1}\strA\varrho,\ldots,\wartt {t_1}\strA\varrho | {t_1}\strA\varrho,\ldots,\wartt {t_1}\strA\varrho)</math>. | ||
Linia 207: | Linia 218: | ||
\sat\strA\varrho\var\varphi. | \sat\strA\varrho\var\varphi. | ||
</math> | </math> | ||
czytamy: formuła <math>\var\varphi</math> jest ''spełniona | czytamy: formuła <math>\var\varphi</math> jest ''spełniona'' | ||
w strukturze <math>\strA</math> przy | w strukturze <math>\strA</math> przy | ||
wartościowaniu <math>\varrho</math>. Zakładamy tu, że <math>\var\varphi</math> oraz <math>\strA</math> są nad tą | wartościowaniu <math>\varrho</math>. Zakładamy tu, że <math>\var\varphi</math> oraz <math>\strA</math> są nad tą | ||
Linia 215: | Linia 226: | ||
*Dla dowolnego <math>n\geq 1</math>, <math>r\in\Sigma^R_n</math> oraz dla dowolnych termów | *Dla dowolnego <math>n\geq 1</math>, <math>r\in\Sigma^R_n</math> oraz dla dowolnych termów | ||
<math>t_1,\ldots, t_n</math>, przyjmujemy, że | <math>t_1,\ldots, t_n</math>, przyjmujemy, że | ||
<math>\sat\strA\varrho{r | <math>\sat\strA\varrho{r(t_1,\ldots,t_n)}</math> \wtw, gdy | ||
</math>\<\\\seml t_1}^{\strA}_{\varrho \semr, | </math>\<\\\seml t_1}^{\strA}_{\varrho \semr, | ||
\ldots\\\seml t_1}^{\strA}_{\varrho}\>\in r^{\strA \semr</math>. | \ldots\\\seml t_1}^{\strA}_{\varrho}\>\in r^{\strA \semr</math>. | ||
*</math>\sa\prooftree \strA}{\varrho \justifies t_1=t_2}<math>, \wtw, gdy </math>\\seml t_1 \using \textrm{ | *</math>\sa\prooftree \strA}{\varrho \justifies t_1=t_2}<math>, \wtw, gdy </math>\\seml t_1 \using \textrm{(W) \semr\endprooftree_\varrho^\strA= | ||
\\seml t_2 \semr_\varrho^\strA</math>. | \\seml t_2 \semr_\varrho^\strA</math>. | ||
*<math>\sa\prooftree \strA}{\varrho \justifies \var\varphi\to\psi \using \textrm{ | *<math>\sa\prooftree \strA}{\varrho \justifies \var\varphi\to\psi \using \textrm{(W)}\endprooftree</math>, gdy nie zachodzi | ||
<math>\sa\prooftree \strA}{\varrho \justifies \var\varphi \using \textrm{ | <math>\sa\prooftree \strA}{\varrho \justifies \var\varphi \using \textrm{(W)}\endprooftree</math> lub zachodzi | ||
\mbox{<math>\sa\prooftree \strA}{\varrho \justifies \psi}</math> \using \textrm{ | \mbox{<math>\sa\prooftree \strA}{\varrho \justifies \psi}</math> \using \textrm{(W)}\endprooftree. | ||
*<math>\sa\prooftree \strA}{\varrho \justifies \forall x\var\varphi \using \textrm{ | *<math>\sa\prooftree \strA}{\varrho \justifies \forall x\var\varphi \using \textrm{(W)}\endprooftree</math> \wtw, gdy dla dowolnego <math>a\in A</math> | ||
zachodzi <math>\sa\prooftree \strA}{\varrho_x^a \justifies \var\varphi \using \textrm{ | zachodzi <math>\sa\prooftree \strA}{\varrho_x^a \justifies \var\varphi \using \textrm{(W)}\endprooftree</math>. | ||
Linia 230: | Linia 241: | ||
strukturze zależy jedynie od wartości zmiennych wolnych <math>\fv\var\varphi</math>. | strukturze zależy jedynie od wartości zmiennych wolnych <math>\fv\var\varphi</math>. | ||
Uzasadnia ono następującą konwencję notacyjną: | Uzasadnia ono następującą konwencję notacyjną: | ||
napiszemy na przykład <math>\sa\prooftree \strA}{x:a,y:b \justifies \var\varphi \using \textrm{ | napiszemy na przykład <math>\sa\prooftree \strA}{x:a,y:b \justifies \var\varphi \using \textrm{(W)}\endprooftree</math> zamiast | ||
<math>\sa\prooftree \strA}{\varrho \justifies \var\varphi \using \textrm{ | <math>\sa\prooftree \strA}{\varrho \justifies \var\varphi \using \textrm{(W)}\endprooftree</math>, gdy <math>\varrho(x)=a</math> i <math>\varrho(y)=b</math>, | ||
a przy tym wiadomo, że w formule <math>\var\varphi</math> występują wolno | a przy tym wiadomo, że w formule <math>\var\varphi</math> występują wolno | ||
tylko zmienne <math>x</math> i <math>y</math>. | tylko zmienne <math>x</math> i <math>y</math>. | ||
Linia 251: | Linia 262: | ||
===Prawdziwość i spełnialność formuł=== | ===Prawdziwość i spełnialność formuł=== | ||
Powiemy, że formuła <math>\var\varphi </math> jest ''spełnialna w <math>\strA</math> | Powiemy, że formuła <math>\var\varphi </math> jest ''spełnialna w <math>\strA</math>'', | ||
gdy istnieje | gdy istnieje | ||
wartościowanie <math>\varrho</math> w strukturze <math>\strA</math> takie, że zachodzi | wartościowanie <math>\varrho</math> w strukturze <math>\strA</math> takie, że zachodzi | ||
Linia 261: | Linia 272: | ||
każdego wartościowania <math>\varrho</math> w <math>\strA</math> zachodzi <math>\sat\strA\varrho\var\varphi</math>. | każdego wartościowania <math>\varrho</math> w <math>\strA</math> zachodzi <math>\sat\strA\varrho\var\varphi</math>. | ||
W tym przypadku mówimy też, że <math>\strA</math> jest {\em modelem} dla formuły | W tym przypadku mówimy też, że <math>\strA</math> jest {\em modelem} dla formuły | ||
<math>\var\varphi</math> | <math>\var\varphi</math> (oznaczamy to przez <math>\strA\models\var\varphi</math>). Dla zbioru formuł | ||
<math>\Gamma</math> i <math>\Sigma</math>-struktury <math>\strA</math> | <math>\Gamma</math> i <math>\Sigma</math>-struktury <math>\strA</math> | ||
powiemy, że <math>\strA</math> jest modelem dla <math>\Gamma</math> | powiemy, że <math>\strA</math> jest modelem dla <math>\Gamma</math> (oznaczamy | ||
<math>\strA\models\Gamma</math> | <math>\strA\models\Gamma</math>), gdy dla każdej formuły <math>\var\varphi\in\Gamma</math>, | ||
zachodzi <math>\strA\models\var\varphi</math>. | zachodzi <math>\strA\models\var\varphi</math>. | ||
Formuła <math>\var\varphi</math> jest {\em tautologią} | Formuła <math>\var\varphi</math> jest {\em tautologią} (oznaczamy to przez | ||
<math>\models\var\varphi</math> | <math>\models\var\varphi</math>), gdy jest ona | ||
prawdziwa w każdej <math>\Sigma</math>-strukturze. | prawdziwa w każdej <math>\Sigma</math>-strukturze. | ||
Linia 279: | Linia 290: | ||
Następujące formuły są tautologiami logiki pierwszego rzedu: | Następujące formuły są tautologiami logiki pierwszego rzedu: | ||
\forall x\psi | \forall x\psi)</math>. | ||
</math>x_1=y_1\to | </math>x_1=y_1\to(x_2=y_2\to\cdots\to(x_n=y_n\to f(x_1,\ldots,x_n)= | ||
f | f(y_1,\ldots, y_n))\cdots)</math>,\\ dla <math>f\in\Sigma^F_n</math>, <math>n\geq 0</math>. | ||
r | r(x_1,\ldots,x_n)\to r(y_1,\ldots, y_n))\cdots)</math>, | ||
\\ dla <math>r\in\Sigma^R_n</math>, <math>n\geq 1</math>. | \\ dla <math>r\in\Sigma^R_n</math>, <math>n\geq 1</math>. | ||
Linia 288: | Linia 299: | ||
{{dowod|| | {{dowod|| | ||
Aby się przekonać, że formuła | Aby się przekonać, że formuła ([[#taut1]]) jest tautologią, | ||
rozpatrzmy | rozpatrzmy | ||
dowolną strukturę <math>\strA</math> i jakieś wartościowanie <math>\varrho</math>. | dowolną strukturę <math>\strA</math> i jakieś wartościowanie <math>\varrho</math>. | ||
Załóżmy najpierw, że <math>\sa\prooftree \strA}{\varrho \justifies \forall x | Załóżmy najpierw, że <math>\sa\prooftree \strA}{\varrho \justifies \forall x(\var\varphi\to\psi) \using \textrm{(W)}\endprooftree</math> | ||
oraz <math>\sa\prooftree \strA}{\varrho \justifies \forall x\,\var\varphi \using \textrm{ | oraz <math>\sa\prooftree \strA}{\varrho \justifies \forall x\,\var\varphi \using \textrm{(W)}\endprooftree</math>. Oznacza to, że | ||
dla dowolnego <math>a\in A</math> | dla dowolnego <math>a\in A</math> | ||
zachodzi <math>\sa\prooftree \strA}{\varrho_x^a \justifies \var\varphi \using \textrm{ | zachodzi <math>\sa\prooftree \strA}{\varrho_x^a \justifies \var\varphi \using \textrm{(W)}\endprooftree</math> oraz | ||
<math>\sa\prooftree \strA}{\varrho_x^a \justifies \var\varphi\to\psi \using \textrm{ | <math>\sa\prooftree \strA}{\varrho_x^a \justifies \var\varphi\to\psi \using \textrm{(W)}\endprooftree</math>. Musi więc zajść | ||
\mbox{<math>\sa\prooftree \strA}{\varrho_x^a \justifies \psi}</math> \using \textrm{ | \mbox{<math>\sa\prooftree \strA}{\varrho_x^a \justifies \psi}</math> \using \textrm{(W)}\endprooftree. Z dowolności <math>a</math> mamy | ||
<math>\sa\prooftree \strA}{\varrho \justifies \forall x\,\psi \using \textrm{ | <math>\sa\prooftree \strA}{\varrho \justifies \forall x\,\psi \using \textrm{(W)}\endprooftree</math>, a stąd | ||
\mbox{</math>\sa\prooftree \strA \justifies \varrho \using \textrm{ | \mbox{</math>\sa\prooftree \strA \justifies \varrho \using \textrm{(W)}\endprooftree{\forall x(\var\varphi\to\psi)\to(\forall x\var\varphi\to | ||
\forall x\psi | \forall x\psi)}</math>}. | ||
Jeśli <math>\niesa\prooftree \strA}{\varrho \justifies \forall x | Jeśli <math>\niesa\prooftree \strA}{\varrho \justifies \forall x(\var\varphi\to\psi) \using \textrm{(W)}\endprooftree</math> | ||
lub <math>\niesa\prooftree \strA}{\varrho \justifies \forall x\,\var\varphi \using \textrm{ | lub <math>\niesa\prooftree \strA}{\varrho \justifies \forall x\,\var\varphi \using \textrm{(W)}\endprooftree</math>, | ||
to nasza formuła jest spełniona przez <math>\varrho</math> | to nasza formuła jest spełniona przez <math>\varrho</math> | ||
wprost z definicji. Uzasadnienie części | wprost z definicji. Uzasadnienie części ([[#taut2a]]--[[#taut5]]) | ||
pozostawiamy czytelnikowi. | pozostawiamy czytelnikowi. | ||
}} | }} | ||
Linia 320: | Linia 331: | ||
Uzasadnienie, że dana formuła jest tautologią polega na analizie | Uzasadnienie, że dana formuła jest tautologią polega na analizie | ||
jej spełniania w dowolnych modelach | jej spełniania w dowolnych modelach (por. Fakt [[#fakt-przyklad-taut]]). | ||
Natomiast wykazanie, że tak nie | Natomiast wykazanie, że tak nie | ||
jest polega na podaniu odpowiedniego kontrprzykładu. Takiego jak ten: | jest polega na podaniu odpowiedniego kontrprzykładu. Takiego jak ten: | ||
Linia 326: | Linia 337: | ||
{{przyklad||| | {{przyklad||| | ||
\forall x | \forall x(p(x)\to q(x))</math> nie jest tautologią. Rozpatrzmy bowiem | ||
model <math>\strA = \<\NN, p^\strA, q^\strA\></math>, w którym: | model <math>\strA = \<\NN, p^\strA, q^\strA\></math>, w którym: | ||
*<math>n\in p^\strA</math>, \wtw, gdy <math>n</math> jest parzyste; | *<math>n\in p^\strA</math>, \wtw, gdy <math>n</math> jest parzyste; | ||
Linia 332: | Linia 343: | ||
Ponieważ <math>p^\strA\neq\NN</math>, więc <math>\strA\not\models \forall x p | Ponieważ <math>p^\strA\neq\NN</math>, więc <math>\strA\not\models \forall x p(x)</math>. | ||
(Mamy tu do czynienia ze zdaniem, więc wartościowanie jest nieistotne | |||
i dlatego je pomijamy. | i dlatego je pomijamy.) Stąd otrzymujemy | ||
<math>\strA\models \forall x p | <math>\strA\models \forall x p(x)\to\forall x q(x)</math>. | ||
Z drugiej strony </math>\strA\not\models | Z drugiej strony </math>\strA\not\models | ||
\forall x | \forall x(p(x)\to q(x))</math>, ponieważ | ||
\mbox{<math>\niesa\prooftree \strA}{x:2 \justifies p | \mbox{<math>\niesa\prooftree \strA}{x:2 \justifies p(x)\to q(x)}</math>. \using \textrm{(W)}\endprooftree | ||
Rzeczywiście, \mbox{<math>2\in p^\strA-q^\strA</math>}. %\hfil\qed | Rzeczywiście, \mbox{<math>2\in p^\strA-q^\strA</math>}. %\hfil\qed | ||
}} | }} | ||
Linia 347: | Linia 358: | ||
\textit{wolne} wystąpienia <math>x</math> w <math>\var\varphi</math>. Wykonywanie takiego podstawienia | \textit{wolne} wystąpienia <math>x</math> w <math>\var\varphi</math>. Wykonywanie takiego podstawienia | ||
bez dodatkowych zastrzeżeń może prowadzić do kłopotów. | bez dodatkowych zastrzeżeń może prowadzić do kłopotów. | ||
Na przykład sens formuł <math>\forall y | Na przykład sens formuł <math>\forall y (y \leq x)</math> oraz | ||
<math>\forall z | <math>\forall z (z \leq x)</math> jest taki sam. Tymczasem ,,naiwne'' podstawienie | ||
<math>y</math> w miejsce <math>x</math> w obu tych formułach daje w wyniku odpowiednio | <math>y</math> w miejsce <math>x</math> w obu tych formułach daje w wyniku odpowiednio | ||
<math>\forall y | <math>\forall y (y \leq y)</math> i <math>\forall z (z \leq y)</math>, a te dwie formuły | ||
znaczą całkiem co innego. Przyczyną jest to, że w pierwszym | znaczą całkiem co innego. Przyczyną jest to, że w pierwszym | ||
przypadku zmienną <math>y</math> wstawiono w zasięg kwantyfikatora <math>\forall y</math>. | przypadku zmienną <math>y</math> wstawiono w zasięg kwantyfikatora <math>\forall y</math>. | ||
Linia 357: | Linia 368: | ||
podstawienia pojawiały się nowe wiązania kwantyfikatorem. Sugeruje to | podstawienia pojawiały się nowe wiązania kwantyfikatorem. Sugeruje to | ||
następującą definicję. Powiemy, że term <math>t</math> jest {\em dopuszczalny} dla | następującą definicję. Powiemy, że term <math>t</math> jest {\em dopuszczalny} dla | ||
zmiennej <math>x</math> w formule <math>\var\varphi</math> | zmiennej <math>x</math> w formule <math>\var\varphi</math> (lub, że podstawienie <math>\subst\var\varphi tx</math> | ||
jest {\em dopuszczalne} | jest {\em dopuszczalne}) jeśli dla każdej zmiennej <math>y</math> | ||
występującej w <math>t</math>, żadne wolne wystąpienie <math>x</math> w <math>\var\varphi</math> nie jest zawarte | występującej w <math>t</math>, żadne wolne wystąpienie <math>x</math> w <math>\var\varphi</math> nie jest zawarte | ||
w zasięgu kwantyfikatora <math>\forall y</math> lub <math>\exists y</math>. Mamy więc następującą | w zasięgu kwantyfikatora <math>\forall y</math> lub <math>\exists y</math>. Mamy więc następującą | ||
Linia 366: | Linia 377: | ||
każda lewa strona jest dopuszczalna pod warunkiem, że | każda lewa strona jest dopuszczalna pod warunkiem, że | ||
prawa strona jest dopuszczalna. | prawa strona jest dopuszczalna. | ||
*<math>\subst\bot tx = \bot</math>, gdy <math>x\not\in FV | *<math>\subst\bot tx = \bot</math>, gdy <math>x\not\in FV(\var\varphi)</math>; | ||
*</math>\subst{r | *</math>\subst{r(t_1,\ldots,t_n)}tx = | ||
r | r(\subst{t_1}tx,\ldots,\subst{t_n}tx)</math>; | ||
*</math>\subst{ | *</math>\subst{(t_1=t_2)}tx = | ||
(\subst{t_1}tx=\subst{t_2}tx)</math>; | |||
*<math>\subst{ | *<math>\subst{(\var\varphi\to\psi)}tx = \subst\var\varphi tx\to\subst\psi tx</math>; | ||
*<math>\subst{ | *<math>\subst{(\forall x\,\var\varphi)}tx = \forall x\,\var\varphi</math>; | ||
*<math>\subst{ | *<math>\subst{(\forall y\,\var\varphi)}tx = \forall y\,\subst\var\varphi tx</math>, | ||
gdy <math>y\not= x</math>, oraz <math>y\not\in FV | gdy <math>y\not= x</math>, oraz <math>y\not\in FV(t)</math>; | ||
*W pozostałych przypadkach podstawienie jest niedopuszczalne. | *W pozostałych przypadkach podstawienie jest niedopuszczalne. | ||
Linia 398: | Linia 409: | ||
\begin{dowodbezqed} Część 1 dowodzimy przez indukcję ze względu na | \begin{dowodbezqed} Część 1 dowodzimy przez indukcję ze względu na | ||
budowę termu <math>s</math>. Jeśli <math>s</math> jest zmienną <math>x</math>, to obie strony | budowę termu <math>s</math>. Jeśli <math>s</math> jest zmienną <math>x</math>, to obie strony | ||
są równe <math>\wartt t\strA\varrho</math>. Jeśli <math>s</math> jest zmienną <math>y</math> | są równe <math>\wartt t\strA\varrho</math>. Jeśli <math>s</math> jest zmienną <math>y</math> (różną od <math>x</math>), | ||
to obie strony są równe <math>\varrho | to obie strony są równe <math>\varrho(y)</math>. Jeśli <math>s</math> jest | ||
postaci <math>f | postaci <math>f(s_1,\ldots,s_n)</math>, to mamy następujące równości. | ||
( | |||
\wartt {\subst stx}\strA\varrho &=& | \wartt {\subst stx}\strA\varrho &=& | ||
\wartt {f | \wartt {f(\subst {s_1}tx,\ldots, \subst {s_n}tx)}\strA\varrho \\ | ||
&=& f^\strA | &=& f^\strA(\wartt{\subst{s_1}tx}\strA\varrho,\ldots, | ||
\wartt{\subst{s_n}tx}\strA\varrho | \wartt{\subst{s_n}tx}\strA\varrho) \\ | ||
& =& f^\strA | & =& f^\strA(\wartt{s_1}\strA{\varrho^a_x},\ldots, | ||
\wartt{s_n}\strA{\varrho^a_x} | \wartt{s_n}\strA{\varrho^a_x}) \\ | ||
& = & | & = & | ||
\wartt{f | \wartt{f(s_1,\ldots,s_n)}\strA{\varrho^a_x}= \wartt s\strA {\varrho^a_x}. | ||
) | |||
Dowód części 2 przeprowadzamy przez indukcję ze względu na budowę | Dowód części 2 przeprowadzamy przez indukcję ze względu na budowę | ||
Linia 416: | Linia 427: | ||
postaci <math>\bot</math> to teza jest | postaci <math>\bot</math> to teza jest | ||
oczywista. Jeśli <math>\var\varphi</math> jest formułą atomową, to | oczywista. Jeśli <math>\var\varphi</math> jest formułą atomową, to | ||
tezę natychmiast dostajemy z wyżej | tezę natychmiast dostajemy z wyżej udowodnionej części 1. Na | ||
przykład, jeśli <math>\var\varphi</math> jest postaci <math>s_1=s_2</math> to mamy: | przykład, jeśli <math>\var\varphi</math> jest postaci <math>s_1=s_2</math> to mamy: | ||
( | |||
\sat\strA\varrho{\subst\var\varphi tx} & \textrm{\wtw, gdy} & | \sat\strA\varrho{\subst\var\varphi tx} & \textrm{\wtw, gdy} & | ||
\wartt{\subst{s_1}tx}\strA\varrho= \wartt{\subst{s_1}tx}\strA\varrho\\ | \wartt{\subst{s_1}tx}\strA\varrho= \wartt{\subst{s_1}tx}\strA\varrho\\ | ||
& \textrm{\wtw, gdy} & | & \textrm{\wtw, gdy} & | ||
\wartt{s_1}\strA{\varrho^a_x}=\wartt{s_2}\strA{\varrho^a_x}\\ | \wartt{s_1}\strA{\varrho^a_x}=\wartt{s_2}\strA{\varrho^a_x}\\ | ||
& \textrm{\wtw, gdy} & \sat\str\prooftree \varrho^a_x \justifies s_1=s_2 \using \textrm{ | & \textrm{\wtw, gdy} & \sat\str\prooftree \varrho^a_x \justifies s_1=s_2 \using \textrm{(W)}\endprooftree. | ||
) | |||
Druga z powyższych równoważności wynika z części 1. | Druga z powyższych równoważności wynika z części 1. | ||
Linia 438: | Linia 449: | ||
jest identyczne z <math>\forall y\subst\psi tx</math>. Mamy następujące | jest identyczne z <math>\forall y\subst\psi tx</math>. Mamy następujące | ||
równoważności: | równoważności: | ||
( | |||
\sat\strA\varrho{\forall y\subst\psi tx} &\textrm{\wtw, gdy} & \mbox{dla | \sat\strA\varrho{\forall y\subst\psi tx} &\textrm{\wtw, gdy} & \mbox{dla | ||
każdego } | każdego } | ||
d\in A,\ \sat\str\prooftree \varrho^d_y \justifies \subst\psi tx \using \textrm{ | d\in A,\ \sat\str\prooftree \varrho^d_y \justifies \subst\psi tx \using \textrm{(W)}\endprooftree \\ | ||
& \textrm{\wtw, gdy} & \mbox{dla każdego } d\in A, \ | & \textrm{\wtw, gdy} & \mbox{dla każdego } d\in A, \ | ||
\sat\strA{\varrho^{d\: a'}_{y\: x}}\psi, | \sat\strA{\varrho^{d\: a'}_{y\: x}}\psi, | ||
) | |||
gdzie <math>a'=\wartt t\strA{\varrho^d_y}</math>. Ponieważ <math>y</math> nie występuje w <math>t</math>, | gdzie <math>a'=\wartt t\strA{\varrho^d_y}</math>. Ponieważ <math>y</math> nie występuje w <math>t</math>, | ||
więc <math>a'=\wartt t\strA{\varrho^d_y}=\wartt t\strA{\varrho}=a</math>. | więc <math>a'=\wartt t\strA{\varrho^d_y}=\wartt t\strA{\varrho}=a</math>. | ||
Linia 453: | Linia 464: | ||
dla każdego <math>d\in A</math>. Czyli | dla każdego <math>d\in A</math>. Czyli | ||
\hfil\hfil\hfil <math>\sat\str\prooftree \varrho^a_x \justifies \forall y\psi \using \textrm{ | \hfil\hfil\hfil <math>\sat\str\prooftree \varrho^a_x \justifies \forall y\psi \using \textrm{(W)}\endprooftree</math>.\hfil\qed\hfil | ||
\end{dowodbezqed} | \end{dowodbezqed} | ||
Linia 476: | Linia 487: | ||
<math>y\not\in\fv\var\varphi</math>, to | <math>y\not\in\fv\var\varphi</math>, to | ||
\[ | \[ | ||
\models | \models(\forall x\var\varphi)\\leftrightarrow (\forall y \subst\var\varphi yx). | ||
\] | \] | ||
}} | }} | ||
Linia 483: | Linia 494: | ||
<span id=""/> <math> | <span id=""/> <math> | ||
\models\forall y | \models\forall y(\forall x\var\varphi\to\subst\var\varphi yx). | ||
</math> | </math> | ||
Zatem na mocy Faktu [[#fakt-przyklad-taut]] | Zatem na mocy Faktu [[#fakt-przyklad-taut]]([[#taut1]]) wnioskujemy, że | ||
<span id=""/> <math> | <span id=""/> <math> | ||
\models | \models(\forall y\forall x\var\varphi)\to(\forall y\subst\var\varphi yx). | ||
</math> | </math> | ||
Na mocy Przykładu [[#fakt-przyklad-taut]] | Na mocy Przykładu [[#fakt-przyklad-taut]]([[#taut2]]) otrzymujemy | ||
\rightarrowlikację <math>\to</math>. Odwrotna \rightarrowlikacja wynika z już | \rightarrowlikację <math>\to</math>. Odwrotna \rightarrowlikacja wynika z już udowodnionej | ||
\rightarrowlikacji oraz z następujących prostych obserwacji: | \rightarrowlikacji oraz z następujących prostych obserwacji: | ||
*Jeśli <math>y</math> jest dopuszczalna dla <math>x</math> w | *Jeśli <math>y</math> jest dopuszczalna dla <math>x</math> w | ||
Linia 505: | Linia 516: | ||
do formuły w sytuacji, gdy ten term nie jest dopuszczalny to wystarczy zamienić | do formuły w sytuacji, gdy ten term nie jest dopuszczalny to wystarczy zamienić | ||
nazwy pewnych zmiennych związanych, tak aby term stał się dopuszczalny. | nazwy pewnych zmiennych związanych, tak aby term stał się dopuszczalny. | ||
Łatwo jest | Łatwo jest uogólnić Fakt [[#alfa-konw]]: znaczenie formuły nie ulega zmianie | ||
także przy wymianie | także przy wymianie | ||
zmiennych związanych kwantyfikatorami wystepującymi | zmiennych związanych kwantyfikatorami wystepującymi | ||
Linia 518: | Linia 529: | ||
Zbadać czy formuły | Zbadać czy formuły | ||
##<math>\forall x p | ##<math>\forall x p(x,y) \to \exists x q(x,y)</math>; | ||
##<math>\forall x p | ##<math>\forall x p(x,y) \to \forall x q(x,y)</math>; | ||
##<math>\forall x p | ##<math>\forall x p(x,y) \to \exists x q(x,z)</math>; | ||
są spełnione przy wartościowaniu <math>v | są spełnione przy wartościowaniu <math>v(y) = 7</math>, <math>v(z) = 1</math> | ||
w strukturze <math>\strA</math>. | w strukturze <math>\strA</math>. | ||
Linia 528: | Linia 539: | ||
i <math>\strB = \<\ZZ, f^\strB, r^\strB\></math>, gdzie | i <math>\strB = \<\ZZ, f^\strB, r^\strB\></math>, gdzie | ||
\hfil <math>f^\strA | \hfil <math>f^\strA(m,n) = \min(m,n)</math>, dla <math>m,n\in\ZZ</math>, a <math>r^\strA</math> jest | ||
relacją <math>\geq</math>; | relacją <math>\geq</math>; | ||
\hfil <math>f^\strB | \hfil <math>f^\strB(m,n) = m^2+n^2</math>, dla <math>m,n\in\ZZ</math>, a <math>r^\strB</math> jest | ||
relacją <math>\leq</math>. | relacją <math>\leq</math>. | ||
Zbadać czy formuły | Zbadać czy formuły | ||
#<math>\forall y | #<math>\forall y(\forall x(r(z,f(x,y))\to r(z,y)))</math>; | ||
#<math>\forall y | #<math>\forall y(\forall x(r(z,f(x,y)))\to r(z,y))</math>, | ||
są spełnione przy wartościowaniu <math>v | są spełnione przy wartościowaniu <math>v(z) =5</math>, <math>v(y)=7</math> | ||
w strukturach <math>\strA</math> i <math>\strB</math>. | w strukturach <math>\strA</math> i <math>\strB</math>. | ||
\item Czy formuła <math>\forall x | \item Czy formuła <math>\forall x(\neg r(x,y)\to\exists z(r(f(x,z),g(y))))</math> | ||
jest spełniona przy wartościowaniu <math>v | jest spełniona przy wartościowaniu <math>v(x) =3</math>, <math>w(x) = 6</math> i <math>u(x) = 14</math> | ||
#w strukturze <math>\strA = \<\NN, r^\strA\></math>, gdzie <math>r^\strA</math> jest | #w strukturze <math>\strA = \<\NN, r^\strA\></math>, gdzie <math>r^\strA</math> jest | ||
relacją podzielności? | relacją podzielności? | ||
#[ | #[(b)] w strukturze <math>\B = \<\NN, r^\strB\></math>, gdzie <math>r^\strB</math> jest | ||
relacją przystawania modulo 7? | relacją przystawania modulo 7? | ||
\item W jakich strukturach prawdziwa jest formuła <math>\exists y | \item W jakich strukturach prawdziwa jest formuła <math>\exists y (y\neq x)</math>? | ||
A formuła <math>\exists y | A formuła <math>\exists y (y\neq y)</math> | ||
otrzymana przez ,,naiwne'' podstawienie <math>y</math> na <math>x</math>? | otrzymana przez ,,naiwne'' podstawienie <math>y</math> na <math>x</math>? | ||
\item Podaj przykład modelu i wartościowania, przy którym formuła | \item Podaj przykład modelu i wartościowania, przy którym formuła | ||
\hfil <math>p | \hfil <math>p(x,f(x)) \to \forall x\exists y\, p(f(y),x)</math> | ||
jest:\quad a | jest:\quad a) spełniona;\quad b) nie spełniona. | ||
\item Zbadać, czy następujące formuły są tautologiami | \item Zbadać, czy następujące formuły są tautologiami | ||
i czy są spełnialne: %%Rozwiazanie: %84%97bc | i czy są spełnialne: %%Rozwiazanie: %84%97bc | ||
# | # | ||
<math>\exists x\forall y | <math>\exists x\forall y(p(x) \vee q(y)) \to \forall y(p(f(y))\vee q(y))</math>; | ||
#<math>\forall y | #<math>\forall y(p(f(y))\vee q(y)) \to \exists x\forall y(p(x) \vee q(y))</math>; | ||
#%97b | #%97b | ||
<math>\exists x | <math>\exists x(\forall y q(y)\to p(x))\to \exists x\forall y(q(y)\to p(x))</math>; | ||
#%97c | #%97c | ||
<math>\exists x | <math>\exists x(\forall y q(y)\to p(x)) \to\exists x(q(x)\to p(x))</math>. | ||
Linia 573: | Linia 584: | ||
nie występuje w formule <math>\var\varphi</math>. | nie występuje w formule <math>\var\varphi</math>. | ||
Pokazać, że formuła <math>\forall x\exists y \var\varphi</math> jest spełnialna | Pokazać, że formuła <math>\forall x\exists y \var\varphi</math> jest spełnialna | ||
wtedy i tylko wtedy gdy formuła <math>\forall x \var\varphi[f | wtedy i tylko wtedy gdy formuła <math>\forall x \var\varphi[f(x)/y]</math> jest | ||
spełnialna. | spełnialna. | ||
\item Udowodnić, że zdanie | \item Udowodnić, że zdanie | ||
\hfil </math>\forall x\exists y\,p | \hfil </math>\forall x\exists y\,p(x,y)\wedge \forall x\neg p(x,x) | ||
\wedge \forall x\forall y\forall z | \wedge \forall x\forall y\forall z(p(x,y)\wedge p(y,z)\to p(x,z))</math>. | ||
ma tylko modele nieskończone. | ma tylko modele nieskończone. | ||
Linia 585: | Linia 596: | ||
\item Dla każdego <math>n</math> napisać takie zdanie <math>\var\varphi_n</math>, że | \item Dla każdego <math>n</math> napisać takie zdanie <math>\var\varphi_n</math>, że | ||
<math>\strA\models\var\varphi_n</math> zachodzi \wtw, gdy <math>\strA</math> ma dokładnie | <math>\strA\models\var\varphi_n</math> zachodzi \wtw, gdy <math>\strA</math> ma dokładnie | ||
<math>n</math> | <math>n</math>elementów. | ||
\item Czy jeśli <math>\strA \models \exists x\,\var\varphi</math>, to także | \item Czy jeśli <math>\strA \models \exists x\,\var\varphi</math>, to także | ||
<math>\strA \models \var\varphi[t/x]</math>, dla pewnego termu <math>t</math>? | <math>\strA \models \var\varphi[t/x]</math>, dla pewnego termu <math>t</math>? |
Wersja z 12:14, 20 wrz 2006
Język logiki pierwszego rzędu.
\setcounte\prooftree twierdzenie \justifies 0 \using \textrm{(W)}\endprooftree
Język logiki pierwszego rzędu\footnote{Logika pierwszego rzędu nazywana jest też {\it rachunkiem predykatów\/} lub rachunkiem kwantyfikatorów\/}. można traktować jak rozszerzenie rachunku zdań, pozwalające formułować stwierdzenia o zależnościach pomiędzy obiektami indywiduowymi (np. relacjach i funkcjach).
Język logiki pierwszego rzędu.
Język logiki pierwszego rzędu <ref name="dwa">Logika pierwszego rzędu nazywana jest też rachunkiem predykatów lub rachunkiem kwantyfikatorów.</ref> można traktować jak rozszerzenie rachunku zdań, pozwalaj±ce formułować stwierdzenia o zależnościach pomiędzy obiektami indywiduowymi (np. relacjach i funkcjach). Dzięki zastosowaniu {\em kwantyfikatorów\/}, odwołujących się do całej zbiorowości rozważanych obiektów, można w logice pierwszego rzędu wyrażać własności struktur relacyjnych oraz modelować rozumowania dotyczące takich struktur. Do zestawu symboli rachunku zdań dodajemy następujące nowe składniki syntaktyczne:
- {\em Symbole operacji i relacji\/} (w tym symbol równości );
- {\em Zmienne indywiduowe\/}, których wartości mają przebiegać rozważane
dziedziny;
- {\em Kwantyfikatory\/}, wiążące zmienne indywiduowe w formułach.
Składnia
Symbole operacji i relacji są podstawowymi składnikami do budowy najprostszych formuł, tzw. \textit{formuł atomowych}. Z tego względu w języku pierwszego rzędu rezygnuje się ze zmiennych zdaniowych.
Definicja
Przez sygnaturę rozumieć będziemy rodzinę zbiorów , dla oraz rodzinę zbiorów , dla . Elementy będziemy nazywać {\em symbolami operacji -ar\-gu\-men\-to\-wych}, aelementy będziemy nazywać {\em symbolami relacji -argumentowych}. Przyjmujemy, że wszystkie te zbiory są parami rozłączne. Umawiamy się też, że znak równości nie należy do . Symbol ten nie jest zwykłym symbolem relacyjnym, ale jest traktowany na specjalnych prawach. W praktyce, sygnatura zwykle jest skończona i zapisuje się ją jako ciąg symboli. Np. ciąg złożony ze znaków (o znanej każdemu liczbie argumentów) tworzy sygnaturę języka teorii ciał.
Definicja
Ustalamy pewien nieskończony przeliczalny zbiór Parser nie mógł rozpoznać (nieznana funkcja „\ZI”): {\displaystyle \ZI} symboli, które będziemy nazywać \textit{zmiennymi indywiduowymi} i zwykle oznaczać symbolami . Zbiór \textit{termów} Parser nie mógł rozpoznać (nieznana funkcja „\termy”): {\displaystyle \termy} nad sygnaturą i zbiorem zmiennych Parser nie mógł rozpoznać (nieznana funkcja „\ZI”): {\displaystyle \ZI} definiujemy indukcyjnie:
- Zmienne indywiduowe są termami.
- Dla każdego i każdego symbolu operacji , jeśli
są termami, to jest też termem.
Zauważmy, że z powyższej definicji wynika iż stałe sygnatury (czyli symbole operacji zeroargumentowych) są termami.
Definicja
Dla każdego termu Parser nie mógł rozpoznać (nieznana funkcja „\termy”): {\displaystyle t\in\termy} definiujemy zbiór Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle \fv t} zmiennych występujących w . Definicja jest indukcyjna:
- Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle \fv x=\{x\}} .
- Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle \fv {f(t_1,\ldots, t_n)}=\bigcup_{i=1}^n \fv{t_i}} .
Definicja
Następnie zdefiniujemy \textit{formuły atomowe} języka pierwszego rzędu.
- Symbol fałszu jest formułą atomową.
- Dla każdego , każdego symbolu relacji
-argumentowej, oraz dla dowolnych termów Parser nie mógł rozpoznać (nieznana funkcja „\termy”): {\displaystyle t_1,\ldots,t_n\in\termy} , napis jest formułą atomową.
- Dla dowolnych termów , napis jest formułą atomową.
Konwencja: Niektóre dwuargumentowe symbole relacyjne (np. ) i funkcyjne (np. ) są zwyczajowo pisane pomiędzy argumentami. Na przykład formułę atomową zwykle piszemy jako ,,.
Definicja
\textit{Formuły} nad sygnaturą i zbiorem zmiennych indywiduowych Parser nie mógł rozpoznać (nieznana funkcja „\ZI”): {\displaystyle \ZI} definiujemy indukcyjnie.
- Każda formuła atomowa jest formułą.
- Jeśli Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi,\psi} są formułami, to Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\var\varphi\to\psi)}
jest też formułą.
- Jeśli Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest formułą a Parser nie mógł rozpoznać (nieznana funkcja „\ZI”): {\displaystyle x\in\ZI} jest zmienną indywiduową, to
Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \forall x\var\varphi} jest też formułą.
Ponadto, dla każdej formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} definiujemy zbiór \textit{zmiennych wolnych} Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle \fv\var\varphi} występujących w tej formule:
- Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle \fv\bot=\emptyset} ;
- Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle \fv{r(t_1,\ldots,t_n)} =\bigcup_{i=1}^n \fv{t_i}} ;
- Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle \fv{t_1=t_2}=\fv{t_1}\cup\fv{t_2}} ;
- Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle \fv{\var\varphi\to\psi}=\fv\var\varphi\cup\fv\psi} ;
- Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle \fv{\forall x\var\varphi}=\fv\var\varphi-\{x\}} .
Formułę bez kwantyfikatorów nazywamy formułą otwartą. Natomiast formuła bez zmiennych wolnych nazywa się \textit{zdaniem}, lub formułą zamkniętą.
Negację, koniunkcję, alternatywę, symbol prawdy i równoważność formuł definiujemy podobnie jak w przypadku rachunku zdań. Kwantyfikatoregzystencjalny zdefiniujemy jako skrót notacyjny przy pomocy \textit{uogólnionego prawa De Morgana}: Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \exists x\var\varphi \hspace{1cm} \textrm{oznacza} \hspace{1cm} \neg\forall x \neg\var\varphi. }
\text\\seml Zmienne wolne a zmienne związane. \semr W Definicji #def-form nie zakładamy, że Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle x\in\fv\var\varphi} . Zauważmy też, że zmienna może występować w formule Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} podczas gdy Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle x\not\in\fv\var\varphi} . Przez \textit{wystąpienie} zmiennej indywiduowej rozumiemy tu zwykłe pojawienie się w jakimkolwiek termie w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} . I tak na przykład w formule\footnote{Zakładamy tu, że oraz są symbolami relacji.} zmienna nie występuje, podczas gdy i wystepują po dwa razy, a występuje jeden raz. Bardzo ważną rzeczą jest rozróżnienie wystąpień zmiennych \textit{wolnych} i \textit{związanych} w formułach. Wszystkie wystąpienia zmiennych w formułach atomowych są wolne. Wolne (związane) wystąpienia w formułach \mbox{Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} i } pozostają wolne (związane) w formule Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi\to\psi} . Wszystkie wolne wystąpienia w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} stają się związanymi wystąpieniami w formule Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \exists x\var\varphi} (związanymi przez dopisanie kwantyfikatora ), a charakter pozostałych wystąpień jest taki sam w </math>\var\varphi\exists x\var\varphi</math>. Przykładowo w formule </math>\exists x\forall u(r(x,\underline{y})\to \forall y\exists x\,s(x,y,z))</math> podkreślone wystąpienie jest wolne, a nie podkreślone jest związane. Obydwa wystąpienia są zwiazane, ale przez różne kwantyfikatory.
Na koniec uwaga o nazwach zmiennych związanych. Rozróżnienie pomiędzy zmiennymi wolnymi a związanymi jest analogiczne do rozróżnenia pomiedzy identyfikatorami lokalnymi a globalnymi w językach programowania. Globalne identyfikatory, widoczne na zewnątrz, odpowiadają zmiennym wolnym, podczas gdy lokalne identyfikatory (związane np. deklaracją w bloku) nie są widoczne na zewnątrz zakresu ich deklaracji. Intuicyjnie naturalne jest oczekiwanie, że zmiana zmiennej związanej na inną zmienną (tak aby nie wprowadzić konfliktu wynikającego ze zmiany struktury wiązań) nie powinna zmieniać znaczenia formuły.\footnote{Taka zamiana zmiennych bywa nazywana -\textit{konwersją}.} Tak w istocie będzie, jak się przekonamy poniżej (Fakt #alfa-konw).
Semantyka formuł
Niech będzie sygnaturą. {\em Struktura} Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} nad sygnaturą (lub po prostu -struktura) to niepusty zbiór , zwany {\em nośnikiem}, wraz z interpretacją każdego symbolu operacji jako funkcji argumentowej Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle f^{\strA}:A^n\to A} oraz każdego symbolu relacji jako relacji -argumentowej Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle r^{\strA}\subseteq A^n} . (Na przykład, jeśli składa się z jednego symbolu relacji dwuargumentowej, to każdy graf zorientowany jest -strukturą.) W praktyce, strukturę relacyjną przedstawia się jako krotkę postaci Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA = \<A, f_1^\strA,\ldots,f_n^\strA,r_1^\strA,\ldots, r_m^\strA\>} , gdzie są wszystkimi symbolami danej sygnatury. Często, gdy będzie jasne z kontekstu z jaką strukturą mamy do czynienia, będziemy opuszczać nazwę struktury i pisać po prostu zamiast Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle r^\strA, f^\strA,\dots}
{\em Wartościowaniem} w -strukturze Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA}
nazwiemy
dowolną funkcję . Dla wartościowania , zmiennej
Parser nie mógł rozpoznać (nieznana funkcja „\ZI”): {\displaystyle x\in\ZI}
orazelementu definiujemy nowe wartościowanie
, będące modyfikacją wartościowania na
argumencie , w następujący sposób,
Parser nie mógł rozpoznać (nieznana funkcja „\przypadk”): {\displaystyle \varrho_x^a(y)=\przypadk\prooftree \varrho(y)}{<math>y\neq x} \justifies a \using \textrm{(W)}\endprooftree </math>
Najpierw zdefiniujemy znaczenie termów. Wartość termu Parser nie mógł rozpoznać (nieznana funkcja „\termy”): {\displaystyle t\in\termy} w -strukturze Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} przy wartościowaniu oznaczamy przez Parser nie mógł rozpoznać (nieznana funkcja „\wartt”): {\displaystyle \wartt t\strA\varrho} , lub Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \wfz t\varrho} , gdy Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} jest znane. Definicja jest indukcyjna:
- Parser nie mógł rozpoznać (nieznana funkcja „\wartt”): {\displaystyle \wartt x\strA\varrho=\varrho(x)} .
- </math>\wartt {f(t_1,\ldots,t_n)}\strA\varrho= f^\strA(\wartt
{t_1}\strA\varrho,\ldots,\wartt {t_1}\strA\varrho)</math>.
Znaczenie formuł definiujemy poniżej. Napis Parser nie mógł rozpoznać (nieznana funkcja „\sat”): {\displaystyle \sat\strA\varrho\var\varphi. } czytamy: formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest spełniona w strukturze Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} przy wartościowaniu . Zakładamy tu, że Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} oraz Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} są nad tą samą sygnaturą. Spełnianie definiujemy przez indukcję ze względu na budowę formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} .
- Nie zachodzi Parser nie mógł rozpoznać (nieznana funkcja „\sat”): {\displaystyle \sat\strA\varrho\bot} .
- Dla dowolnego , oraz dla dowolnych termów
, przyjmujemy, że Parser nie mógł rozpoznać (nieznana funkcja „\sat”): {\displaystyle \sat\strA\varrho{r(t_1,\ldots,t_n)}} \wtw, gdy </math>\<\\\seml t_1}^{\strA}_{\varrho \semr, \ldots\\\seml t_1}^{\strA}_{\varrho}\>\in r^{\strA \semr</math>.
- </math>\sa\prooftree \strA}{\varrho \justifies t_1=t_2}Parser nie mógł rozpoznać (nieznana funkcja „\wtw”): {\displaystyle , \wtw, gdy } \\seml t_1 \using \textrm{(W) \semr\endprooftree_\varrho^\strA=
\\seml t_2 \semr_\varrho^\strA</math>.
- Parser nie mógł rozpoznać (nieznana funkcja „\sa”): {\displaystyle \sa\prooftree \strA}{\varrho \justifies \var\varphi\to\psi \using \textrm{(W)}\endprooftree} , gdy nie zachodzi
Parser nie mógł rozpoznać (nieznana funkcja „\sa”): {\displaystyle \sa\prooftree \strA}{\varrho \justifies \var\varphi \using \textrm{(W)}\endprooftree} lub zachodzi \mbox{Parser nie mógł rozpoznać (nieznana funkcja „\sa”): {\displaystyle \sa\prooftree \strA}{\varrho \justifies \psi}} \using \textrm{(W)}\endprooftree.
- Parser nie mógł rozpoznać (nieznana funkcja „\sa”): {\displaystyle \sa\prooftree \strA}{\varrho \justifies \forall x\var\varphi \using \textrm{(W)}\endprooftree} \wtw, gdy dla dowolnego
zachodzi Parser nie mógł rozpoznać (nieznana funkcja „\sa”): {\displaystyle \sa\prooftree \strA}{\varrho_x^a \justifies \var\varphi \using \textrm{(W)}\endprooftree} .
Nastepujące twierdzenie pokazuje, że spełnianie formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi}
w dowolnej
strukturze zależy jedynie od wartości zmiennych wolnych Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle \fv\var\varphi}
.
Uzasadnia ono następującą konwencję notacyjną:
napiszemy na przykład Parser nie mógł rozpoznać (nieznana funkcja „\sa”): {\displaystyle \sa\prooftree \strA}{x:a,y:b \justifies \var\varphi \using \textrm{(W)}\endprooftree}
zamiast
Parser nie mógł rozpoznać (nieznana funkcja „\sa”): {\displaystyle \sa\prooftree \strA}{\varrho \justifies \var\varphi \using \textrm{(W)}\endprooftree}
, gdy i ,
a przy tym wiadomo, że w formule Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi}
występują wolno
tylko zmienne i .
Jeśli Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi}
jest zdaniem, to wartościowanie można całkiem pominąć.
Fakt
Dla dowolnej -struktury Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} i dowolnej formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jeśli wartościowania i przyjmują równe wartości dla wszystkich zmiennych wolnych w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} , to \[ \sat\strA\varrho\var\varphi \hspace{1cm} {\textrm \wtw, gdy}\hspace{1cm} \sat\strA{\varrho'}\var\varphi. \]
Dowód
Prawdziwość i spełnialność formuł
Powiemy, że formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi } jest spełnialna w Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} , gdy istnieje wartościowanie w strukturze Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} takie, że zachodzi Parser nie mógł rozpoznać (nieznana funkcja „\sat”): {\displaystyle \sat\strA\varrho\var\varphi} . Formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest {\em spełnialna}, gdy istnieje struktura Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} , w której Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest spełnialna.
Formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest {\em prawdziwa} w Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} , gdy dla każdego wartościowania w Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} zachodzi Parser nie mógł rozpoznać (nieznana funkcja „\sat”): {\displaystyle \sat\strA\varrho\var\varphi} . W tym przypadku mówimy też, że Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} jest {\em modelem} dla formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} (oznaczamy to przez Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA\models\var\varphi} ). Dla zbioru formuł i -struktury Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} powiemy, że Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} jest modelem dla (oznaczamy Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA\models\Gamma} ), gdy dla każdej formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi\in\Gamma} , zachodzi Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA\models\var\varphi} . Formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest {\em tautologią} (oznaczamy to przez Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \models\var\varphi} ), gdy jest ona prawdziwa w każdej -strukturze.
Oczywiście jeśli weźmiemy dowolną tautologię rachunku zdań to po podstawieniu na miejsce zmiennych zdaniowych dowolnych formuł logiki pierwszego rzędu dostaniemy tautologię logiki pierwszego rzędu. Poniżej podajemy przykłady tautologii logiki pierwszego rzedu, których nie da się w ten sposób otrzymać.
Fakt
<span id="
Aby się przekonać, że formuła (#taut1) jest tautologią, rozpatrzmy dowolną strukturę Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} i jakieś wartościowanie . Załóżmy najpierw, że Parser nie mógł rozpoznać (nieznana funkcja „\sa”): {\displaystyle \sa\prooftree \strA}{\varrho \justifies \forall x(\var\varphi\to\psi) \using \textrm{(W)}\endprooftree} oraz Parser nie mógł rozpoznać (nieznana funkcja „\sa”): {\displaystyle \sa\prooftree \strA}{\varrho \justifies \forall x\,\var\varphi \using \textrm{(W)}\endprooftree} . Oznacza to, że dla dowolnego zachodzi Parser nie mógł rozpoznać (nieznana funkcja „\sa”): {\displaystyle \sa\prooftree \strA}{\varrho_x^a \justifies \var\varphi \using \textrm{(W)}\endprooftree} oraz Parser nie mógł rozpoznać (nieznana funkcja „\sa”): {\displaystyle \sa\prooftree \strA}{\varrho_x^a \justifies \var\varphi\to\psi \using \textrm{(W)}\endprooftree} . Musi więc zajść \mbox{Parser nie mógł rozpoznać (nieznana funkcja „\sa”): {\displaystyle \sa\prooftree \strA}{\varrho_x^a \justifies \psi}} \using \textrm{(W)}\endprooftree. Z dowolności mamy Parser nie mógł rozpoznać (nieznana funkcja „\sa”): {\displaystyle \sa\prooftree \strA}{\varrho \justifies \forall x\,\psi \using \textrm{(W)}\endprooftree} , a stąd \mbox{</math>\sa\prooftree \strA \justifies \varrho \using \textrm{(W)}\endprooftree{\forall x(\var\varphi\to\psi)\to(\forall x\var\varphi\to \forall x\psi)}</math>}.
Jeśli Parser nie mógł rozpoznać (nieznana funkcja „\niesa”): {\displaystyle \niesa\prooftree \strA}{\varrho \justifies \forall x(\var\varphi\to\psi) \using \textrm{(W)}\endprooftree} lub Parser nie mógł rozpoznać (nieznana funkcja „\niesa”): {\displaystyle \niesa\prooftree \strA}{\varrho \justifies \forall x\,\var\varphi \using \textrm{(W)}\endprooftree} , to nasza formuła jest spełniona przez wprost z definicji. Uzasadnienie części (#taut2a--#taut5) pozostawiamy czytelnikowi. " style="font-variant:small-caps">Dowód
Ponadto mamy następujący Fakt
Dla dowolnej tautologii </math>\var\varphixParser nie mógł rozpoznać (błąd składni): {\displaystyle , formuła } \forall x\var\varphi</math> jest też tautologią.
Dowód
Uzasadnienie, że dana formuła jest tautologią polega na analizie jej spełniania w dowolnych modelach (por. Fakt #fakt-przyklad-taut). Natomiast wykazanie, że tak nie jest polega na podaniu odpowiedniego kontrprzykładu. Takiego jak ten:
Przykład
\forall x(p(x)\to q(x))</math> nie jest tautologią. Rozpatrzmy bowiem model Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA = \<\NN, p^\strA, q^\strA\>} , w którym:
- Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle n\in p^\strA} , \wtw, gdy jest parzyste;
- Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle n\in q^\strA} , \wtw, gdy jest nieparzyste;
Ponieważ Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle p^\strA\neq\NN}
, więc Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA\not\models \forall x p(x)}
.
(Mamy tu do czynienia ze zdaniem, więc wartościowanie jest nieistotne
i dlatego je pomijamy.) Stąd otrzymujemy
Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA\models \forall x p(x)\to\forall x q(x)}
.
Z drugiej strony </math>\strA\not\models
\forall x(p(x)\to q(x))</math>, ponieważ
\mbox{Parser nie mógł rozpoznać (nieznana funkcja „\niesa”): {\displaystyle \niesa\prooftree \strA}{x:2 \justifies p(x)\to q(x)}}
. \using \textrm{(W)}\endprooftree
Rzeczywiście, \mbox{Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle 2\in p^\strA-q^\strA}
}. %\hfil\qed
Podstawianie termów
Dla formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} , termu i zmiennej , napis Parser nie mógł rozpoznać (nieznana funkcja „\subst”): {\displaystyle \subst\var\varphi tx} oznacza wynik podstawienia na wszystkie \textit{wolne} wystąpienia w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} . Wykonywanie takiego podstawienia bez dodatkowych zastrzeżeń może prowadzić do kłopotów. Na przykład sens formuł oraz jest taki sam. Tymczasem ,,naiwne podstawienie w miejsce w obu tych formułach daje w wyniku odpowiednio i , a te dwie formuły znaczą całkiem co innego. Przyczyną jest to, że w pierwszym przypadku zmienną wstawiono w zasięg kwantyfikatora .
Źródłem problemu w powyższym przykładzie było to, że po wykonaniu podstawienia pojawiały się nowe wiązania kwantyfikatorem. Sugeruje to następującą definicję. Powiemy, że term jest {\em dopuszczalny} dla zmiennej w formule Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} (lub, że podstawienie Parser nie mógł rozpoznać (nieznana funkcja „\subst”): {\displaystyle \subst\var\varphi tx} jest {\em dopuszczalne}) jeśli dla każdej zmiennej występującej w , żadne wolne wystąpienie w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} nie jest zawarte w zasięgu kwantyfikatora lub . Mamy więc następującą indukcyjną definicję dopuszczalnego podstawienia,\footnote{Podstawianie termu do termu na miejsce zmiennej oznaczamy podobnie: Parser nie mógł rozpoznać (nieznana funkcja „\subst”): {\displaystyle \subst stx} . Takie podstawienie jest zawsze wykonalne.} w której każda lewa strona jest dopuszczalna pod warunkiem, że prawa strona jest dopuszczalna.
- Parser nie mógł rozpoznać (nieznana funkcja „\subst”): {\displaystyle \subst\bot tx = \bot} , gdy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle x\not\in FV(\var\varphi)} ;
- </math>\subst{r(t_1,\ldots,t_n)}tx =
r(\subst{t_1}tx,\ldots,\subst{t_n}tx)</math>;
- </math>\subst{(t_1=t_2)}tx =
(\subst{t_1}tx=\subst{t_2}tx)</math>;
- Parser nie mógł rozpoznać (nieznana funkcja „\subst”): {\displaystyle \subst{(\var\varphi\to\psi)}tx = \subst\var\varphi tx\to\subst\psi tx} ;
- Parser nie mógł rozpoznać (nieznana funkcja „\subst”): {\displaystyle \subst{(\forall x\,\var\varphi)}tx = \forall x\,\var\varphi} ;
- Parser nie mógł rozpoznać (nieznana funkcja „\subst”): {\displaystyle \subst{(\forall y\,\var\varphi)}tx = \forall y\,\subst\var\varphi tx} ,
gdy , oraz ;
- W pozostałych przypadkach podstawienie jest niedopuszczalne.
W dalszym ciągu
będziemy rozważać jedynie podstawienia dopuszczalne.
\begin{lemat}[o podstawieniu] Niech Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} będzie dowolną strukturą oraz Parser nie mógł rozpoznać (nieznana funkcja „\arr”): {\displaystyle \varrho:X\arr A} dowolnym wartościowaniem w Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} . Niech będzie dowolnym termem.
- Dla dowolnego termu i zmiennej mamy
Parser nie mógł rozpoznać (nieznana funkcja „\sat”): {\displaystyle \sat\strA\varrho{\subst\var\varphi tx}\hspace{1cm}\textrm{\wtw, gdy}\hspace{1cm} gdzie <math>a=\wartt t\strA\varrho} .
- Dla dowolnej formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} , jeśli term jest
dopuszczalny dla w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} , to </math> gdzie Parser nie mógł rozpoznać (nieznana funkcja „\wartt”): {\displaystyle a=\wartt t\strA\varrho} .
\end{lemat}
\begin{dowodbezqed} Część 1 dowodzimy przez indukcję ze względu na budowę termu . Jeśli jest zmienną , to obie strony są równe Parser nie mógł rozpoznać (nieznana funkcja „\wartt”): {\displaystyle \wartt t\strA\varrho} . Jeśli jest zmienną (różną od ), to obie strony są równe . Jeśli jest postaci , to mamy następujące równości. ( \wartt {\subst stx}\strA\varrho &=& \wartt {f(\subst {s_1}tx,\ldots, \subst {s_n}tx)}\strA\varrho \\ &=& f^\strA(\wartt{\subst{s_1}tx}\strA\varrho,\ldots, \wartt{\subst{s_n}tx}\strA\varrho) \\ & =& f^\strA(\wartt{s_1}\strA{\varrho^a_x},\ldots, \wartt{s_n}\strA{\varrho^a_x}) \\ & = & \wartt{f(s_1,\ldots,s_n)}\strA{\varrho^a_x}= \wartt s\strA {\varrho^a_x}. )
Dowód części 2 przeprowadzamy przez indukcję ze względu na budowę formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} . Jeśli Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest postaci to teza jest oczywista. Jeśli Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest formułą atomową, to tezę natychmiast dostajemy z wyżej udowodnionej części 1. Na przykład, jeśli Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest postaci to mamy: ( \sat\strA\varrho{\subst\var\varphi tx} & \textrm{\wtw, gdy} & \wartt{\subst{s_1}tx}\strA\varrho= \wartt{\subst{s_1}tx}\strA\varrho\\ & \textrm{\wtw, gdy} & \wartt{s_1}\strA{\varrho^a_x}=\wartt{s_2}\strA{\varrho^a_x}\\ & \textrm{\wtw, gdy} & \sat\str\prooftree \varrho^a_x \justifies s_1=s_2 \using \textrm{(W)}\endprooftree. ) Druga z powyższych równoważności wynika z części 1.
Krok indukcyjny dla przypadku, gdy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest postaci Parser nie mógł rozpoznać (nieznana funkcja „\arr”): {\displaystyle \psi\arr\vartheta} jest oczywisty i pozostawimy go czytelnikowi. Rozważymy przypadek gdy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest postaci . Jeśli zmienne oraz są równe, to nie występuje wolno w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} i wówczas teza wynika natychmiast z Faktu #zm-wolne. Tak więc przyjmijmy, że oraz są różnymi zmiennymi. Wówczas z dopuszczalności dla w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} wynika, że nie występuje w . Ponadto Parser nie mógł rozpoznać (nieznana funkcja „\subst”): {\displaystyle \subst\var\varphi tx} jest identyczne z Parser nie mógł rozpoznać (nieznana funkcja „\subst”): {\displaystyle \forall y\subst\psi tx} . Mamy następujące równoważności: ( \sat\strA\varrho{\forall y\subst\psi tx} &\textrm{\wtw, gdy} & \mbox{dla każdego } d\in A,\ \sat\str\prooftree \varrho^d_y \justifies \subst\psi tx \using \textrm{(W)}\endprooftree \\ & \textrm{\wtw, gdy} & \mbox{dla każdego } d\in A, \ \sat\strA{\varrho^{d\: a'}_{y\: x}}\psi, ) gdzie Parser nie mógł rozpoznać (nieznana funkcja „\wartt”): {\displaystyle a'=\wartt t\strA{\varrho^d_y}} . Ponieważ nie występuje w , więc Parser nie mógł rozpoznać (nieznana funkcja „\wartt”): {\displaystyle a'=\wartt t\strA{\varrho^d_y}=\wartt t\strA{\varrho}=a} . Skoro zmienne oraz są różne, to Parser nie mógł rozpoznać (błąd składni): {\displaystyle \varrho^{d\: a}_{y\: x}=\varrho^{a\: d}_{x\:y}} . Tak więc warunek Parser nie mógł rozpoznać (nieznana funkcja „\sat”): {\displaystyle \sat\strA{\varrho^{d\: a'}_{y\: x}}\psi } jest równoważny warunkowi Parser nie mógł rozpoznać (nieznana funkcja „\sat”): {\displaystyle \sat\strA{\varrho^{a\: d}_{x\: y}}\psi} , dla każdego . Czyli
\hfil\hfil\hfil Parser nie mógł rozpoznać (nieznana funkcja „\sat”): {\displaystyle \sat\str\prooftree \varrho^a_x \justifies \forall y\psi \using \textrm{(W)}\endprooftree} .\hfil\qed\hfil \end{dowodbezqed}
Natychmiastowym wnioskiem z Lematu #lem-pier-1 jest następujący przykład tautologii.
Fakt
Dla dowolnej formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} , zmiennej i termu dopuszczalnego dla w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} , formuła \[\forall x\var\varphi\arr\subst\var\varphi tx\] jest tautologią logiki pierwszego rzędu.
Dowód
Fakt
Jeśli zmienna jest dopuszczalna dla w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} oraz Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle y\not\in\fv\var\varphi} , to \[ \models(\forall x\var\varphi)\\leftrightarrow (\forall y \subst\var\varphi yx). \]
\begin{dowodbezqed} Z Faktu #fa-pier-1 oraz Faktu #fakt-gen otrzymujemy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \models\forall y(\forall x\var\varphi\to\subst\var\varphi yx). } Zatem na mocy Faktu #fakt-przyklad-taut(#taut1) wnioskujemy, że Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \models(\forall y\forall x\var\varphi)\to(\forall y\subst\var\varphi yx). } Na mocy Przykładu #fakt-przyklad-taut(#taut2) otrzymujemy \rightarrowlikację . Odwrotna \rightarrowlikacja wynika z już udowodnionej \rightarrowlikacji oraz z następujących prostych obserwacji:
- Jeśli jest dopuszczalna dla w
Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} , to jest dopuszczalna dla w Parser nie mógł rozpoznać (nieznana funkcja „\subst”): {\displaystyle \subst\var\varphi yx} .
- Jeśli Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle y\not\in\fv\var\varphi} , to nie występuje wolno w
Parser nie mógł rozpoznać (nieznana funkcja „\subst”): {\displaystyle \subst\var\varphi yx} .
- Wynik podstawienia Parser nie mógł rozpoznać (nieznana funkcja „\subst”): {\displaystyle \subst{\subst\var\varphi yx}xy} jest identyczny
z Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} .\hfil\qed
Fakt #alfa-konw pozwala zamieniać zmienne związane dowolnie, tak długo jak
są spełnione założenia. W szczególności jeśli chcemy wykonać podstawienie termu
do formuły w sytuacji, gdy ten term nie jest dopuszczalny to wystarczy zamienić
nazwy pewnych zmiennych związanych, tak aby term stał się dopuszczalny.
Łatwo jest uogólnić Fakt #alfa-konw: znaczenie formuły nie ulega zmianie
także przy wymianie
zmiennych związanych kwantyfikatorami wystepującymi
wewnątrz formuły.
\subsection*{Ćwiczenia}\begin{small}
- Niech Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA =\<\NN, p^\strA, q^\strA\>} , gdzie:
\hfil Parser nie mógł rozpoznać (błąd składni): {\displaystyle \<a,b\>\in p^\strA} \wtw, gdy ;\hfil
\hfil Parser nie mógł rozpoznać (błąd składni): {\displaystyle \<a,b\>\in q^\strA} \wtw, gdy .
Zbadać czy formuły
- ;
- ;
- ;
są spełnione przy wartościowaniu , w strukturze Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} .
\item Niech Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA = \<\ZZ, f^\strA, r^\strA\>} i Parser nie mógł rozpoznać (nieznana funkcja „\strB”): {\displaystyle \strB = \<\ZZ, f^\strB, r^\strB\>} , gdzie
\hfil Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle f^\strA(m,n) = \min(m,n)} , dla Parser nie mógł rozpoznać (nieznana funkcja „\ZZ”): {\displaystyle m,n\in\ZZ} , a Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle r^\strA} jest relacją ;
\hfil Parser nie mógł rozpoznać (nieznana funkcja „\strB”): {\displaystyle f^\strB(m,n) = m^2+n^2} , dla Parser nie mógł rozpoznać (nieznana funkcja „\ZZ”): {\displaystyle m,n\in\ZZ} , a Parser nie mógł rozpoznać (nieznana funkcja „\strB”): {\displaystyle r^\strB} jest relacją .
Zbadać czy formuły
- ;
- ,
są spełnione przy wartościowaniu , w strukturach Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} i Parser nie mógł rozpoznać (nieznana funkcja „\strB”): {\displaystyle \strB} .
\item Czy formuła jest spełniona przy wartościowaniu , i
- w strukturze Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA = \<\NN, r^\strA\>} , gdzie Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle r^\strA} jest
relacją podzielności?
- [(b)] w strukturze Parser nie mógł rozpoznać (nieznana funkcja „\B”): {\displaystyle \B = \<\NN, r^\strB\>} , gdzie Parser nie mógł rozpoznać (nieznana funkcja „\strB”): {\displaystyle r^\strB} jest
relacją przystawania modulo 7?
\item W jakich strukturach prawdziwa jest formuła ?
A formuła
otrzymana przez ,,naiwne podstawienie na ?
\item Podaj przykład modelu i wartościowania, przy którym formuła
\hfil
jest:\quad a) spełniona;\quad b) nie spełniona.
\item Zbadać, czy następujące formuły są tautologiami i czy są spełnialne: %%Rozwiazanie: %84%97bc
;
- ;
- %97b
;
- %97c
.
\item Niech będzie jednoargumentowym symbolem funkcyjnym, który
nie występuje w formule Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi}
.
Pokazać, że formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \forall x\exists y \var\varphi}
jest spełnialna
wtedy i tylko wtedy gdy formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \forall x \var\varphi[f(x)/y]}
jest
spełnialna.
\item Udowodnić, że zdanie
\hfil </math>\forall x\exists y\,p(x,y)\wedge \forall x\neg p(x,x) \wedge \forall x\forall y\forall z(p(x,y)\wedge p(y,z)\to p(x,z))</math>.
ma tylko modele nieskończone.
\item Dla każdego napisać takie zdanie Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi_n} , że Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA\models\var\varphi_n} zachodzi \wtw, gdy Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA} ma dokładnie elementów.
\item Czy jeśli Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA \models \exists x\,\var\varphi} , to także Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle \strA \models \var\varphi[t/x]} , dla pewnego termu ?