Logika dla informatyków/Język logiki pierwszego rzędu: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Tprybick (dyskusja | edycje)
m Zastępowanie tekstu – „<math> ” na „<math>”
 
(Nie pokazano 28 wersji utworzonych przez 4 użytkowników)
Linia 4: Linia 4:




Język logiki pierwszego rzędu <ref name="dwa">Logika 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>  
nazywana  jest też ''rachunkiem  
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 zależnościach pomiędzy obiektami   
pozwalające formułować stwierdzenia o zależnościach pomiędzy obiektami   
indywiduowymi (np.&nbsp;relacjach i funkcjach).   
indywiduowymi (np.&nbsp;relacjach i funkcjach).   
Dzięki zastosowaniu ''kwantyfikatorów'', odwołujących się   
Dzięki zastosowaniu ''kwantyfikatorów'', odwołujących się   
Linia 29: Linia 27:


Przez ''sygnaturę''  <math>\Sigma</math> rozumieć będziemy rodzinę zbiorów <math>\Sigma^F_n</math>, dla <math>n\geq0</math>   
Przez ''sygnaturę''  <math>\Sigma</math> rozumieć 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 <math>\Sigma^F_n</math> będziemy nazywać {\em symbolami operacji  
oraz rodzinę zbiorów <math>\Sigma^R_n</math>, dla <math>n\geq 1</math>. Elementy <math>\Sigma^F_n</math> będziemy nazywać ''symbolami operacji''
<math>n</math>-argumentowych}, aelementy <math>\Sigma^R_n</math> będziemy nazywać ''  
<math>n</math>-''argumentowych'', a elementy <math>\Sigma^R_n</math> będziemy nazywać  
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.  
Umawiamy się też, że znak równości <math>=</math> nie należy do&nbsp;<math>\Sigma</math>. Symbol ten   
Umawiamy się też, że znak równości <math>=</math> nie należy do&nbsp;<math>\Sigma</math>. Symbol ten   
Linia 53: Linia 51:
}}  
}}  


Zauważmy, że z powyższej definicji wynika iż stałe sygnatury <math>\Sigma</math> (czyli symbole operacji zeroargumentowych) są termami.  
Zauważmy, że z powyższej definicji wynika, iż stałe sygnatury <math>\Sigma</math> (czyli symbole operacji zeroargumentowych) są termami.  


{{definicja|2.3||  
{{definicja|2.3||  
Linia 59: Linia 57:
Dla każdego termu <math>t\in T_\Sigma(X)</math> definiujemy zbiór <math>\fv t</math> zmiennych   
Dla każdego termu <math>t\in T_\Sigma(X)</math> definiujemy zbiór <math>\fv t</math> zmiennych   
''występujących'' w <math>t</math>. Definicja jest indukcyjna:  
''występujących'' w <math>t</math>. Definicja jest indukcyjna:  
*<math>FV x=\{x\}</math>.  
*<math>FV(x)=\{x\}</math>.  
*<math>FV {f(t_1,\ldots, t_n)}=\bigcup_{i=1}^n \fv{t_i}</math>.  
*<math>FV(f(t_1,\ldots, t_n))=\bigcup_{i=1}^n \fv{t_i}</math>.  


}}  
}}  
Linia 69: Linia 67:
Następnie zdefiniujemy ''formuły atomowe'' języka pierwszego rzędu.  
Następnie zdefiniujemy ''formuły atomowe'' języka pierwszego rzędu.  
*Symbol fałszu <math>\bot</math> jest formułą atomową.  
*Symbol fałszu <math>\bot</math> jest formułą atomową.  
*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 T_\Sigma(X)</math>, napis <math>r(t_1,\ldots,t_n)</math> jest formułą atomową.  
*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 T_\Sigma(X)</math>, napis <math>r(t_1,\ldots,t_n)</math> jest formułą atomową.  
*Dla dowolnych termów <math>t_1, t_2</math>, napis <math>(t_1=t_2)</math> jest formułą atomową.  
*Dla dowolnych termów <math>t_1, t_2</math>, napis <math>(t_1=t_2)</math> jest formułą atomową.  


Linia 75: Linia 73:


'''Konwencja:''' Niektóre dwuargumentowe symbole relacyjne (np.&nbsp;<math>\leq</math>)  
'''Konwencja:''' Niektóre dwuargumentowe symbole relacyjne (np.&nbsp;<math>\leq</math>)  
i funkcyjne (np.&nbsp;<math>+,\cdot</math>) są zwyczajowo pisane pomiędzy argumentami.   
i funkcyjne (np.&nbsp;<math>+,\cdot</math>&nbsp;) są zwyczajowo pisane pomiędzy argumentami.   
Na przykład formułę atomową <math>{\leq}(x,y)</math> zwykle piszemy jako ,,<math>x\leq y</math>''.  
Na przykład formułę atomową <math>{\leq}(x,y)</math> zwykle piszemy jako "<math>x\leq y</math>".  


{{definicja|2.5|def-form|  
{{definicja|2.5|def-form|  
Linia 82: Linia 80:
''Formuły'' nad sygnaturą <math>\Sigma</math> i zbiorem zmiennych indywiduowych <math>X</math> definiujemy indukcyjnie.   
''Formuły'' nad sygnaturą <math>\Sigma</math> i zbiorem zmiennych indywiduowych <math>X</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>(\var\varphi\to\psi)</math>   jest też formułą.  
*Jeśli <math>\var\varphi,\psi</math> są formułami, to <math>(\var\varphi\to\psi)</math> jest też formułą.  
*Jeśli <math>\var\varphi</math> jest formułą a <math>x\in X</math> jest zmienną indywiduową, to <math>\forall x\var\varphi</math> jest też formułą.  
*Jeśli <math>\var\varphi</math> jest formułą, a <math>x\in X</math> jest zmienną indywiduową, to <math>\forall x\var\varphi</math> jest też formułą.  


Ponadto, dla każdej formuły <math>\var\varphi</math> definiujemy zbiór ''zmiennych wolnych'' <math>FV\var\varphi</math>   
Ponadto, dla każdej formuły <math>\var\varphi</math> definiujemy zbiór ''zmiennych wolnych'' <math>FV(\var\varphi)</math>   
występujących w tej formule:  
występujących w tej formule:  
*<math>FV\bot=\emptyset</math>;  
*<math>FV\bot=\emptyset</math>;  
Linia 94: Linia 92:


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ę ''zdaniem''
lub ''formułą zamkniętą''.  
lub ''formułą zamkniętą''.  
}}  
}}  
Linia 102: Linia 100:
zdefiniujemy jako skrót notacyjny przy pomocy ''uogólnionego prawa  
zdefiniujemy jako skrót notacyjny przy pomocy ''uogólnionego prawa  
De&nbsp;Morgana'':  
De&nbsp;Morgana'':  
<span id=""/>  
<span id=""/>  
<math> \exists x\var\varphi \hspace{1cm} \textrm{oznacza} \hspace{1cm} \neg\forall x  
<math>\exists x\var\varphi \hspace{1cm} \text{oznacza} \hspace{1cm} \neg\forall x  
\neg\var\varphi.  
\neg\var\varphi.  
</math>  
</math>  
Linia 111: Linia 110:
W&nbsp;Definicji&nbsp;[[#def-form|2.5]] nie zakładamy, że <math>x\in FV\var\varphi</math>.   
W&nbsp;Definicji&nbsp;[[#def-form|2.5]] nie zakładamy, że <math>x\in FV\var\varphi</math>.   
Zauważmy też,  
Zauważmy też,  
że zmienna <math>x</math> może występować w formule <math>\var\varphi</math> podczas gdy  
że zmienna <math>x</math> może występować w formule <math>\var\varphi</math>, podczas gdy  
<math>x\not\in FV\var\varphi</math>. Przez ''wystąpienie'' zmiennej indywiduowej <math>x</math>  
<math>x\not\in FV\var\varphi</math>. Przez ''wystąpienie'' zmiennej indywiduowej <math>x</math>  
rozumiemy tu zwykłe pojawienie się&nbsp;<math>x</math> w jakimkolwiek termie w <math>\var\varphi</math>. I tak  
rozumiemy tu zwykłe pojawienie się&nbsp;<math>x</math> w jakimkolwiek termie w <math>\var\varphi</math>. I tak  
Linia 142: Linia 141:
że zmiana zmiennej  
że zmiana zmiennej  
związanej na inną zmienną (tak aby nie wprowadzić konfliktu wynikającego ze  
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  
zmiany struktury wiązań) nie powinna zmieniać znaczenia formuły.<ref name="cztery">Taka  
zamiana zmiennych bywa nazywana <math>\alpha</math>-\textit{konwersją}.} Tak w&nbsp;istocie  
zamiana zmiennych bywa nazywana <math>\alpha</math>-''konwersją''.</ref> Tak w&nbsp;istocie  
będzie, jak się przekonamy poniżej (Fakt&nbsp;[[#alfa-konw|2.12]]).
będzie, jak się przekonamy poniżej (Fakt&nbsp;[[#alfa-konw|2.12]]).


===Semantyka formuł===
===Semantyka formuł===


Niech <math>\Sigma</math> będzie sygnaturą. {\em Struktura} <math>\strA</math> nad  
Niech <math>\Sigma</math> będzie sygnaturą. ''Struktura'' <math>\mathfrak A</math> nad  
sygnaturą <math>\Sigma</math> (lub po prostu <math>\Sigma</math>-struktura) to  
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 ''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  
funkcji <math>n</math> argumentowej <math>f^{\strA}:A^n\to A</math> oraz każdego symbolu  
funkcji <math>n</math> argumentowej <math>f^{\strA}:A^n\to A</math> oraz każdego symbolu  
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^{\mathfrak A}\subseteq A^n</math>.   
(Na przykład, jeśli <math>\Sigma</math> składa się z jednego symbolu relacji   
(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   
<math>\strA = \<A, f_1^\strA,\ldots,f_n^\strA,r_1^\strA,\ldots, r_m^\strA\></math>, gdzie   
<math>\mathfrak A = \<A, f_1^\mathfrak A,\ldots,f_n^\mathfrak A,r_1^\mathfrak A,\ldots, r_m^\mathfrak A\></math>, gdzie   
<math>f_1,\ldots,f_n,r_1,\ldots, r_m</math> są wszystkimi symbolami danej sygnatury.  
<math>f_1,\ldots,f_n,r_1,\ldots, r_m</math> są wszystkimi symbolami danej sygnatury.  
Często,   
Często,   
gdy będzie jasne z&nbsp;kontekstu z jaką strukturą mamy do czynienia, będziemy  
gdy będzie jasne z&nbsp;kontekstu z jaką strukturą mamy do czynienia, będziemy  
opuszczać nazwę struktury i pisać po prostu <math>r, f,\dots</math> zamiast  
opuszczać nazwę struktury i pisać po prostu <math>r, f,\dots</math> zamiast  
<math>r^\strA, f^\strA,\dots</math>  
<math>r^\mathfrak A, f^\mathfrak A,\dots</math>  




{\em Wartościowaniem} w <math>\Sigma</math>-strukturze <math>\strA</math> nazwiemy  
''Wartościowaniem'' w <math>\Sigma</math>-strukturze <math>\mathfrak A</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> orazelementu <math>a\in A</math> definiujemy nowe wartościowanie  
<math>x\in X</math> oraz elementu <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,  


<span id=""/> <math> 
<span id=""/>  


\varrho_x^a(y)=\przypadk\prooftree \varrho(y)}{<math>y\neq x</math> \justifies a \using \textrm{(W)}\endprooftree
<math>\varrho_x^a(y)= \begin{cases} \varrho(y)},  \mbox{jeśli} y\neq x \\
</math>  
a, \mbox{w przeciwnym wypadku} \end{cases}</math>


Najpierw zdefiniujemy znaczenie termów. Wartość termu <math>t\in\termy</math> w
<math>\Sigma</math>-strukturze <math>\strA</math> przy wartościowaniu <math>\varrho</math> oznaczamy przez
<math>\wartt t\strA\varrho</math>, lub <math>\wfz t\varrho</math>, gdy <math>\strA</math> jest znane. 
Definicja jest indukcyjna:
*<math>\wartt x\strA\varrho=\varrho(x)</math>.
*</math>\wartt {f(t_1,\ldots,t_n)}\strA\varrho= f^\strA(\wartt
{t_1}\strA\varrho,\ldots,\wartt {t_1}\strA\varrho)</math>.


Najpierw zdefiniujemy znaczenie termów. Wartość termu <math>t\in T_\Sigma(X)</math> w <math>\Sigma</math>-strukturze <math>\mathfrak A</math> przy wartościowaniu <math>\varrho</math> oznaczamy przez <math>{[[t]]}^{\mathfrak A}_\varrho</math>, lub <math>[[t]]\varrho</math>, gdy <math>\mathfrak A</math> jest znane. Definicja jest indukcyjna:
*<math>[[x]]^{\mathfrak A}_\varrho=\varrho(x)</math>.
*<math>[[{f(t_1,\ldots,t_n)}]]^{\mathfrak A}_\varrho= f^\mathfrak A([[{t_1}]]{\mathfrak A}_\varrho,\ldots,[[{t_1}]]^{\mathfrak A}_\varrho)</math>.


Znaczenie formuł definiujemy poniżej. Napis


Znaczenie formuł definiujemy poniżej. Napis
<center> <math>(\mathfrak A , \varrho ) \vDash \var\varphi</math> </center>
<span id=""/> <math>


\sat\strA\varrho\var\varphi.
czytamy: formuła <math>\var\varphi</math> jest ''spełniona'' w strukturze <math>\mathfrak A</math> przy  
</math>
wartościowaniu <math>\varrho</math>. Zakładamy tu, że <math>\var\varphi</math> oraz <math>\mathfrak A</math> są nad tą   
czytamy: formuła <math>\var\varphi</math> jest ''spełniona''  
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ą   
samą sygnaturą. Spełnianie definiujemy przez indukcję ze względu na budowę   
samą sygnaturą. Spełnianie definiujemy przez indukcję ze względu na budowę   
formuły&nbsp;<math>\var\varphi</math>.  
formuły&nbsp;<math>\var\varphi</math>.  
*Nie zachodzi <math>\sat\strA\varrho\bot</math>.
*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>\sat\strA\varrho{r(t_1,\ldots,t_n)}</math> \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}<math>, \wtw, gdy </math>\\seml t_1 \using \textrm{(W) \semr\endprooftree_\varrho^\strA=
\\seml t_2 \semr_\varrho^\strA</math>. 
*<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{(W)}\endprooftree</math> lub zachodzi 
\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{(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{(W)}\endprooftree</math>.


*Nie zachodzi <math>(\mathfrak A , \varrho ) \vDash \bot</math>.
*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>(\mathfrak A , \varrho ) \vDash r(t_1,\ldots,t_n)</math> wtedy i tylko wtedy, gdy <math>\langle [[t_1]]^{\mathfrak A}_\varrho, \ldots [[t_2]]^{\mathfrak A}_\varrho  \rangle \in r^{\mathfrak A</math>.
*<math>(\mathfrak A , \varrho ) \vDash t_1 = t_2</math>, wtedy i tylko wtedy, gdy <math>[[t_1]]^{\mathfrak A}_\varrho = [[t_2]]^{\mathfrak A}_\varrho</math>
*<math>(\mathfrak A , \varrho ) \vDash \var\varphi \to \psi</math> , gdy nie zachodzi <math>( \mathfrak A , \varrho ) \vDash \varphi</math>  lub zachodzi <math>( \mathfrak A , \varrho ) \vDash \psi</math>
*<math>(\mathfrak A , \varrho ) \vDash \forall x\var\varphi</math> wtedy i tylko wtedy, gdy dla dowolnego <math>a \in A</math> zachodzi <math>(\mathfrak A, \varrho ^a_x ) \vDash \varphi</math>


Nastepujące twierdzenie pokazuje, że spełnianie formuły <math>\var\varphi</math> w dowolnej  
 
strukturze zależy jedynie od wartości zmiennych wolnych <math>\fv\var\varphi</math>.   
Nastepujące twierdzenie pokazuje, że spełnianie formuły <math>\var\varphi</math> w dowolnej strukturze zależy jedynie od wartości zmiennych wolnych <math>FV(\var\varphi)</math>.  Uzasadnia ono następującą konwencję notacyjną: napiszemy na przykład <math>( \mathfrak A , x:a,y:b ) \vDash \var\varphi</math> zamiast  <math>(\mathfrak A, \varrho )\vDash \var\varphi</math>, gdy <math>\varrho(x)=a</math> i&nbsp;<math>\varrho(y)=b</math>, a przy tym wiadomo, że w formule <math>\var\varphi</math> występują wolno   
Uzasadnia ono następującą konwencję notacyjną:  
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{(W)}\endprooftree</math>, gdy <math>\varrho(x)=a</math> i&nbsp;<math>\varrho(y)=b</math>,  
a przy tym wiadomo, że w formule <math>\var\varphi</math> występują wolno   
tylko zmienne <math>x</math> i&nbsp;<math>y</math>.  
tylko zmienne <math>x</math> i&nbsp;<math>y</math>.  
Jeśli&nbsp;<math>\var\varphi</math> jest zdaniem, to wartościowanie można całkiem pominąć.  
Jeśli&nbsp;<math>\var\varphi</math> jest zdaniem, to wartościowanie można całkiem pominąć.  


{{fakt||zm-wolne|  
{{fakt|2.6|zm-wolne|  


Dla dowolnej <math>\Sigma</math>-struktury <math>\strA</math> i dowolnej formuły <math>\var\varphi</math> jeśli  
Dla dowolnej <math>\Sigma</math>-struktury <math>\mathfrak A</math> i dowolnej formuły <math>\var\varphi</math>, jeśli  
wartościowania <math>\varrho</math> i <math>\varrho'</math> przyjmują równe wartości dla wszystkich  
wartościowania <math>\varrho</math> i <math>\varrho'</math> przyjmują równe wartości dla wszystkich  
zmiennych wolnych w <math>\var\varphi</math>, to  
zmiennych wolnych w <math>\var\varphi</math>, to  
\[
\sat\strA\varrho\var\varphi \hspace{1cm} {\textrm \wtw, gdy}\hspace{1cm}
\sat\strA{\varrho'}\var\varphi.
\]
}}
{{dowod||


}}  
<center> <math>(\mathfrak A,\varrho) \vDash\var\varphi</math>  wtedy i tylko wtedy, gdy  <math>( \mathfrak A, \varrho') \vDash\var\varphi</math></center>
}}
{{dowod|||
Ćwiczenie.
}}


===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>\mathfrak A</math>'',   
gdy istnieje  
gdy istnieje  
wartościowanie <math>\varrho</math> w strukturze&nbsp;<math>\strA</math> takie, że zachodzi  
wartościowanie <math>\varrho</math> w strukturze&nbsp;<math>\mathfrak A</math> takie, że zachodzi  
<math>\sat\strA\varrho\var\varphi</math>. Formuła <math>\var\varphi</math> jest {\em
<math>(\mathfrak A,\varrho) \vDash\var\varphi</math>. Formuła <math>\var\varphi</math> jest ''spełnialna'', gdy istnieje struktura <math>\mathfrak A</math>, w której <math>\var\varphi</math> jest  
spełnialna}, gdy istnieje struktura <math>\strA</math>, w której <math>\var\varphi</math> jest  
spełnialna.   
spełnialna.   


Formuła <math>\var\varphi</math> jest {\em prawdziwa} w <math>\strA</math>, gdy dla  
Formuła <math>\var\varphi</math> jest ''prawdziwa'' w <math>\mathfrak A</math>, gdy dla  
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>\mathfrak A</math> zachodzi <math>(\mathfrak A,\varrho)\vDash\var\varphi</math>.   
W&nbsp;tym przypadku mówimy też, że <math>\strA</math> jest {\em modelem} dla formuły  
W&nbsp;tym przypadku mówimy też, że <math>\mathfrak A</math> jest ''modelem'' dla formuły  
<math>\var\varphi</math> (oznaczamy to przez <math>\strA\models\var\varphi</math>). Dla zbioru formuł  
<math>\var\varphi</math> (oznaczamy to przez <math>\mathfrak A\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>\mathfrak A</math>   
powiemy, że <math>\strA</math> jest modelem dla <math>\Gamma</math> (oznaczamy
powiemy, że <math>\mathfrak A</math> jest modelem dla <math>\Gamma</math> (piszemy
<math>\strA\models\Gamma</math>), gdy dla każdej  formuły <math>\var\varphi\in\Gamma</math>,  
<math>\mathfrak A\models\Gamma</math>), gdy dla każdej  formuły <math>\var\varphi\in\Gamma</math>,  
zachodzi <math>\strA\models\var\varphi</math>.  
zachodzi <math>\mathfrak A\models\var\varphi</math>.  
Formuła <math>\var\varphi</math> jest {\em tautologią} (oznaczamy to przez  
Formuła <math>\var\varphi</math> jest ''tautologią'' (oznaczamy to przez  
<math>\models\var\varphi</math>), gdy jest ona   
<math>\models\var\varphi</math>), gdy jest ona   
prawdziwa w&nbsp;każdej <math>\Sigma</math>-strukturze.   
prawdziwa w&nbsp;każdej <math>\Sigma</math>-strukturze.   


Oczywiście jeśli weźmiemy dowolną tautologię rachunku zdań to po  
Oczywiście jeśli weźmiemy dowolną tautologię rachunku zdań, to po  
podstawieniu na miejsce zmiennych zdaniowych dowolnych formuł logiki  
podstawieniu na miejsce zmiennych zdaniowych dowolnych formuł logiki  
pierwszego rzędu dostaniemy tautologię logiki pierwszego  
pierwszego rzędu dostaniemy tautologię logiki pierwszego  
rzędu. Poniżej podajemy przykłady tautologii logiki pierwszego rzedu,  
rzędu. Poniżej podajemy przykłady tautologii logiki pierwszego rzędu,  
których nie da się w ten sposób otrzymać.  
których nie da się w ten sposób otrzymać.  


{{fakt||taut5|  
{{fakt|2.7|taut5|  


Następujące formuły są tautologiami logiki pierwszego rzedu:  
Następujące formuły są tautologiami logiki pierwszego rzedu:  
\forall x\psi)</math>.  
# <math>\forall x(\varphi\to\psi)\to(\forall x\varphi\to\forall x\psi)</math>.
</math>x_1=y_1\to(x_2=y_2\to\cdots\to(x_n=y_n\to f(x_1,\ldots,x_n)=  
# <math>\varphi\to \forall x \varphi$, o ile $x\not\in\fv\varphi</math>.
f(y_1,\ldots, y_n))\cdots)</math>,\\ dla <math>f\in\Sigma^F_n</math>, <math>n\geq 0</math>.  
# <math>\forall x \varphi\to \varphi</math>.
r(x_1,\ldots,x_n)\to r(y_1,\ldots, y_n))\cdots)</math>,  
# <math>x=x</math>.
\\  dla <math>r\in\Sigma^R_n</math>, <math>n\geq 1</math>.  
# <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(y_1,\ldots, y_n))\cdots)</math>, dla <math>f\in\Sigma^F_n</math>, <math>n\geq 0</math>.
# <math>x_1=y_1\to(x_2=y_2\to\cdots\to(x_n=y_n\to r(x_1,\ldots,x_n)\to r(y_1,\ldots, y_n))\cdots)</math>, dla <math>r\in\Sigma^R_n, n\geq 1</math>.
 
}}


}}
{{dowod|||
{{dowod||  


Aby się przekonać, że formuła&nbsp;([[#taut1]]) jest tautologią,  
Aby się przekonać, że formuła&nbsp;(1) jest tautologią, rozpatrzmy dowolną strukturę <math>\mathfrak A</math> i jakieś wartościowanie&nbsp;<math>\varrho</math>.  Załóżmy najpierw, że <math>(\mathfrak A,\varrho) \vDash \forall x(\var\varphi\to\psi)</math>   
rozpatrzmy
oraz <math>(\mathfrak A,\varrho) \vDash \forall x\,\var\varphi</math>. Oznacza to, że   
dowolną strukturę <math>\strA</math> i jakieś wartościowanie&nbsp;<math>\varrho</math>.   
dla dowolnego <math>a\in A</math> zachodzi <math>(\mathfrak A,\varrho^a_x) \vDash \var\varphi</math> oraz   
Załóżmy najpierw, że <math>\sa\prooftree \strA}{\varrho \justifies \forall x(\var\varphi\to\psi) \using \textrm{(W)}\endprooftree</math>   
<math>(\mathfrak A,\varrho^a_x) \vDash \var\varphi\to\psi</math>. Musi więc zajść  <math>(\mathfrak A,\varrho^a_x) \vDash \psi</math> Z dowolności <math>a</math> mamy <math>(\mathfrak A,\varrho) \vDash \forall x\psi</math>, a stąd <math>(\mathfrak A,\varrho) \vDash \forall x(\var\varphi\to\psi) \to (\forall x \varphi \to \forall x \psi)</math>.  
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>  
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{(W)}\endprooftree</math>. Musi więc zajść   
\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{(W)}\endprooftree</math>, 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 <math>\niesa\prooftree \strA}{\varrho \justifies \forall x(\var\varphi\to\psi) \using \textrm{(W)}\endprooftree</math>
Jeśli <math>( \mathfrak A, \varrho) \not\models \forall x(\var\varphi\to\psi)</math> lub <math>( \mathfrak A, \varrho) \not\models \forall x \varphi</math>, to nasza formuła jest spełniona przez <math>\varrho</math> wprost z&nbsp;definicji. Uzasadnienie części&nbsp;(3-6)  
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>
wprost z&nbsp;definicji. Uzasadnienie części&nbsp;([[#taut2a]]--[[#taut5]])  
pozostawiamy czytelnikowi.  
pozostawiamy czytelnikowi.  
}}  
}}  


Ponadto mamy następujący  
Ponadto mamy następujący  
{{fakt||fakt-gen|


Dla dowolnej tautologii </math>\var\varphi<math> i dowolnej zmiennej </math>x<math>, formuła </math>\forall  
{{fakt|2.8|fakt-gen|
x\var\varphi</math> jest też tautologią.  
 
Dla dowolnej tautologii <math>\var\varphi</math> i dowolnej zmiennej <math>x</math>, formuła <math>\forall x\var\varphi</math> jest też tautologią.  
}}  
}}  
{{dowod||


{{dowod|||
Ćwiczenie.  
Ćwiczenie.  
}}  
}}  


Uzasadnienie, że dana formuła jest tautologią polega na analizie  
Uzasadnienie, że dana formuła jest tautologią, polega na analizie jej spełniania w&nbsp;dowolnych modelach (por.&nbsp;[[#tatut5|Fakt 2.7]]). Natomiast wykazanie, że tak nie jest, polega na podaniu odpowiedniego kontrprzykładu. Takiego jak ten:  
jej spełniania w&nbsp;dowolnych modelach (por.&nbsp;Fakt&nbsp;[[#fakt-przyklad-taut]]).
Natomiast wykazanie, że tak nie  
jest polega na podaniu odpowiedniego kontrprzykładu. Takiego jak ten:  


{{przyklad|||  
{{przyklad|2.9||  
Zdanie <math>(\forall x p(x) \to \forall x q(x)) \to \forall x (p(x) \to q(x))</math> nie jest tautologią. Rozpatrzmy bowiem model <math>\mathfrak A = <\mathbb N, p^\mathfrak A, q^\mathfrak A></math>, w którym:
*<math>n\in p^\mathfrak A</math>, wtedy i tylko wtedy, gdy <math>n</math> jest parzyste;
*<math>n\in q^\mathfrak A</math>, wtedy i tylko wtedy, gdy <math>n</math> jest nieparzyste;


\forall x(p(x)\to q(x))</math> nie jest tautologią. Rozpatrzmy bowiem
Ponieważ <math>p^\mathfrak A\neq\mathbb N</math>, więc <math>\mathfrak A\not\models \forall x p(x)</math>. (Mamy tu do czynienia ze zdaniem, więc wartościowanie jest nieistotne i dlatego je pomijamy.) Stąd otrzymujemy  <math>\mathfrak A\models \forall x p(x)\to\forall x q(x)</math>.   
model <math>\strA = \<\NN, p^\strA, q^\strA\></math>, w którym:
Z&nbsp;drugiej strony <math>\mathfrak A\not\models  \forall x(p(x)\to q(x))</math>, ponieważ <math>( \mathfrak A,x :2) \not\models p(x) \to q(x)</math>. Rzeczywiście, <math>2\in p^\mathfrak A-q^\mathfrak A</math>.  
*<math>n\in p^\strA</math>, \wtw, gdy <math>n</math> jest parzyste;
}}
*<math>n\in q^\strA</math>, \wtw, gdy <math>n</math> jest nieparzyste;
 
 
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.) Stąd otrzymujemy   
<math>\strA\models \forall x p(x)\to\forall x q(x)</math>.   
Z&nbsp;drugiej strony </math>\strA\not\models   
\forall x(p(x)\to q(x))</math>, ponieważ
\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
}}  


===Podstawianie termów===
===Podstawianie termów===
Dla formuły <math>\var\varphi</math>, termu <math>t</math> i zmiennej <math>x</math>, napis  
Dla formuły <math>\var\varphi</math>, termu <math>t</math> i zmiennej <math>x</math>, napis  
<math>\subst\var\varphi tx</math> oznacza wynik podstawienia <math>t</math> na wszystkie  
<math>\var\varphi (t/x)</math> oznacza wynik podstawienia <math>t</math> na wszystkie  
\textit{wolne} wystąpienia <math>x</math> w <math>\var\varphi</math>. Wykonywanie takiego podstawienia  
''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 (y \leq x)</math> oraz   
Na przykład sens formuł <math>\forall y (y \leq x)</math> oraz   
<math>\forall z (z \leq x)</math> jest taki sam. Tymczasem ,,naiwne'' podstawienie  
<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 (y \leq y)</math> i <math>\forall z (z \leq y)</math>, a te dwie formuły   
<math>\forall y (y \leq y)</math> i <math>\forall z (z \leq y)</math>, a te dwie formuły   
Linia 342: Linia 298:
Źródłem problemu w powyższym przykładzie było to, że po wykonaniu  
Ź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  
podstawienia pojawiały się nowe wiązania kwantyfikatorem. Sugeruje to  
następującą definicję. Powiemy, że term&nbsp;<math>t</math> jest {\em dopuszczalny} dla  
następującą definicję. Powiemy, że term&nbsp;<math>t</math> jest ''dopuszczalny'' dla  
zmiennej <math>x</math> w formule <math>\var\varphi</math> (lub, że podstawienie <math>\subst\var\varphi tx</math>  
zmiennej <math>x</math> w formule <math>\var\varphi</math> (lub że podstawienie <math>\subst\var\varphi tx</math>  
jest {\em dopuszczalne}) jeśli dla każdej zmiennej <math>y</math>  
jest ''dopuszczalne'', jeśli dla każdej zmiennej <math>y</math>  
występującej&nbsp;w&nbsp;<math>t</math>, żadne wolne wystąpienie <math>x</math> w <math>\var\varphi</math> nie jest zawarte   
występującej&nbsp;w&nbsp;<math>t</math>, żadne wolne wystąpienie <math>x</math> w <math>\var\varphi</math> nie jest zawarte   
w&nbsp;zasięgu kwantyfikatora <math>\forall y</math> lub <math>\exists y</math>.   Mamy więc następującą   
w&nbsp;zasięgu kwantyfikatora <math>\forall y</math> lub <math>\exists y</math>. Mamy więc następującą   
indukcyjną definicję dopuszczalnego podstawienia,\footnote{Podstawianie   
indukcyjną definicję dopuszczalnego podstawienia,<ref name="piec">Podstawianie   
termu <math>t</math> do termu <math>s</math> na miejsce zmiennej <math>x</math> oznaczamy podobnie:  
termu <math>t</math> do termu <math>s</math> na miejsce zmiennej <math>x</math> oznaczamy podobnie:  
<math>\subst stx</math>. Takie podstawienie jest zawsze wykonalne.} w której  
<math>s(t/x)</math>. Takie podstawienie jest zawsze wykonalne.</ref> w której  
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(\var\varphi)</math>;   
 
*</math>\subst{r(t_1,\ldots,t_n)}tx =   
*<math>\bot (t/x) = \bot</math>, gdy <math>x\not\in FV(\var\varphi)</math>;   
r(\subst{t_1}tx,\ldots,\subst{t_n}tx)</math>;  
*<math>r(t_1,\ldots,t_n)(t/x) =  r(t_1(t/x),\ldots,t_n(t/x))</math>;  
*</math>\subst{(t_1=t_2)}tx =   
*<math>(t_1=t_2)(t/x) =  (t_1(t/x) = t_2(t/x)</math>;  
(\subst{t_1}tx=\subst{t_2}tx)</math>;  
*<math>(\var\varphi\to\psi)(t/x) = \var\varphi(t/x)\to\psi(t/x)</math>;  
*<math>\subst{(\var\varphi\to\psi)}tx = \subst\var\varphi tx\to\subst\psi tx</math>;  
*<math>(\forall x\var\varphi)(t/x) = \forall x\var\varphi</math>;  
*<math>\subst{(\forall x\,\var\varphi)}tx = \forall x\,\var\varphi</math>;  
*<math>(\forall y\var\varphi)(t/x) = \forall y\var\varphi(t/x)</math>,  gdy <math>y\not= x</math>, oraz <math>y\not\in FV(t)</math>;  
*<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(t)</math>;  
*W pozostałych przypadkach podstawienie jest niedopuszczalne.  
*W pozostałych przypadkach podstawienie jest niedopuszczalne.  




W&nbsp;dalszym ciągu
W&nbsp;dalszym ciągu będziemy rozważać jedynie podstawienia dopuszczalne.
będziemy rozważać jedynie podstawienia dopuszczalne.  
 
{{lemat|2.10 (o podstawieniu)|lem-pier-1|
Niech <math>\mathfrak A</math> będzie dowolną strukturą oraz <math>\varrho:X \to A</math> dowolnym
wartościowaniem w <math>\mathfrak A</math>. Niech <math>t</math> będzie dowolnym termem.  


\begin{lemat}[o podstawieniu] <span id="lem-pier-1" \
# Dla dowolnego termu <math>s</math> i zmiennej <math>x</math> mamy <center><math>[[s(t/x)]]^{\mathfrak A}_\varrho = [[s]]^{\mathfrak A}_{\varrho^a_x}</math></center> gdzie <math>a=[[t]]^{\mathfrak A}_\varrho</math>.
Niech <math>\strA</math> będzie dowolną strukturą oraz <math>\varrho:X\arr A</math> dowolnym
# Dla dowolnej formuły <math>\var\varphi</math>, jeśli term <math>t</math> jest dopuszczalny dla <math>x</math> <math>\var\varphi</math>, to 
wartościowaniem w <math>\strA</math>. Niech <math>t</math> będzie dowolnym termem.
<center><math>(\mathfrak A, \varrho) \models \varphi(t/x)</math> wtedy i tylko wtedy, gdy <math>(\mathfrak A, \varrho^a_x) \models  \varphi</math></center> gdzie <math>a=[[t]]^{\mathfrak A}_\varrho</math>.
#Dla dowolnego termu <math>s</math> i zmiennej <math>x</math> mamy
}}
<span id=""/> <math> \sat\strA\varrho{\subst\var\varphi tx}\hspace{1cm}\textrm{\wtw, gdy}\hspace{1cm}  


gdzie <math>a=\wartt t\strA\varrho</math>.  
{{dowod|||
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
są równe <math>[[t]]^{\mathfrak A}_\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(y)</math>. Jeśli <math>s</math> jest postaci <math>f(s_1,\ldots,s_n)</math>, to mamy następujące równości.  


#Dla dowolnej formuły <math>\var\varphi</math>, jeśli term <math>t</math> jest
dopuszczalny dla <math>x</math> w  <math>\var\varphi</math>, to 
</math>
gdzie <math>a=\wartt t\strA\varrho</math>.


\end{lemat}  
<center> <math>
[[s(t/x)]]^{\mathfrak A}_\varrho = [[f(s_1(t/x), \ldots, s_n(t/x))]]^{\mathfrak A}_\varrho</math><br>
<math>= f^{\mathfrak A}([[s_1(t/x)]]^{\mathfrak A}_\varrho, \ldots, [[s_n(t/x)]]^{\mathfrak A}_\varrho)</math><br>
<math>= f^{\mathfrak A}([[s_1]]^{\mathfrak A}_{\varrho^a_x}, \ldots, [[s_n]]^{\mathfrak A}_{\varrho^a_x})</math><br>
<math>= [[f(s_1,\ldots,s_n)]]^{\mathfrak A}_{\varrho^a_x} = [[s]]^{\mathfrak A}_{\varrho^a_x}


\begin{dowodbezqed} Część 1 dowodzimy przez indukcję ze względu na
</math>
budowę termu <math>s</math>. Jeśli <math>s</math> jest zmienną <math>x</math>, to obie strony
</center>
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(y)</math>. Jeśli <math>s</math> jest 
postaci <math>f(s_1,\ldots,s_n)</math>, 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ę  
Dowód części 2 przeprowadzamy przez indukcję ze względu na budowę  
formuły <math>\var\varphi</math>. Jeśli <math>\var\varphi</math>&nbsp;jest  
formuły <math>\var\varphi</math>. Jeśli <math>\var\varphi</math>&nbsp;jest  
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 udowodnionej części 1. Na  
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} &
<center><math>(\mathfrak A, \varrho) \models \varphi(t/x)</math> wtedy i tylko wtedy, gdy <math>[[s_1(t/x)]]^{\mathfrak A}_\varrho = [[s_1(t/x)]]^{\mathfrak A}_\varrho</math><br>
\wartt{\subst{s_1}tx}\strA\varrho= \wartt{\subst{s_1}tx}\strA\varrho\\
wtedy i tylko wtedy, gdy <math>[[s_1]]^{\mathfrak A}_{\varrho^a_x} = [[s_2]]^{\mathfrak A}_{\varrho^a_x}</math><br>
& \textrm{\wtw, gdy} &
wtedy i tylko wtedy, gdy <math>(\mathfrak A, \varrhp^a_x) \models s_1 = s_2</math>
\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.
</center>
)
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.   


Krok indukcyjny dla przypadku, gdy <math>\var\varphi</math> jest postaci   
Krok indukcyjny dla przypadku, gdy <math>\var\varphi</math> jest postaci   
<math>\psi\arr\vartheta</math> jest  
<math>\psi \to \vartheta</math> jest  
oczywisty i pozostawimy go czytelnikowi. Rozważymy przypadek gdy  
oczywisty i pozostawimy go czytelnikowi. Rozważymy przypadek, gdy  
<math>\var\varphi</math> jest postaci <math>\forall y\psi</math>. Jeśli zmienne <math>x</math> oraz <math>y</math> są  
<math>\var\varphi</math> jest postaci <math>\forall y\psi</math>. Jeśli zmienne <math>x</math> oraz <math>y</math> są  
równe, to <math>x</math> nie występuje wolno w <math>\var\varphi</math> i wówczas teza  
równe, to <math>x</math> nie występuje wolno w <math>\var\varphi</math> i wówczas teza  
wynika natychmiast z Faktu&nbsp;[[#zm-wolne]]. Tak więc  
wynika natychmiast z [[#zm-wolne|Faktu 2.6]]. Tak więc  
przyjmijmy, że <math>x</math> oraz <math>y</math> są różnymi zmiennymi.  
przyjmijmy, że <math>x</math> oraz <math>y</math> są różnymi zmiennymi.  
Wówczas  z dopuszczalności <math>t</math> dla <math>x</math> w <math>\var\varphi</math>  
Wówczas  z dopuszczalności <math>t</math> dla <math>x</math> w <math>\var\varphi</math>  
Linia 424: Linia 369:
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  
<center> <math>(\mathfrak A, \varrho) \models \forall y \psi(t/x)</math> wtedy i tylko wtedy, gdy dla każdego <math>d \in A, (\mathfrak A, \varrho^d_y) \models \psi(t/x)</math><br>
każdego }
wtedy i tylko wtedy, gdy dla każdego <math>d \in A, (\mathfrak A, \varrho^{d a'}_{y x}) \models \psi</math>
d\in A,\ \sat\str\prooftree \varrho^d_y \justifies \subst\psi tx \using \textrm{(W)}\endprooftree \\
</center>
& \textrm{\wtw, gdy} & \mbox{dla każdego } d\in A, \  
 
\sat\strA{\varrho^{d\: a'}_{y\: x}}\psi
gdzie <math>a'=[[t]]^{\mathfrak A}_{\varrho^d_y}</math>. Ponieważ <math>y</math> nie występuje w <math>t</math>,  
)
więc <math>a'=[[t]]^{\mathfrak A}_{\varrho^d_y} = [[t]]^{\mathfrak A}_\varrho = a</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>.   
Skoro zmienne <math>x</math> oraz <math>y</math> są różne, to   
Skoro zmienne <math>x</math> oraz <math>y</math> są różne, to   
<math>\varrho^{d\: a}_{y\: x}=\varrho^{a\: d}_{x\:y}</math>. Tak więc   
<math>\varrho^{d\ : a}_{y\ : x}=\varrho^{a\ : d}_{x\ :y}</math>. Tak więc   
warunek <math>\sat\strA{\varrho^{d\: a'}_{y\: x}}\psi </math>  
warunek <math>(\mathfrak A, \varrho^{d\ : a'}_{y\ : x}) \models \psi</math>  
jest równoważny warunkowi <math>\sat\strA{\varrho^{a\: d}_{x\: y}}\psi</math>,  
jest równoważny warunkowi <math>( \mathfrak A, \varrho^{a\ : d}_{x\ : y}) \models \psi</math>,  
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{(W)}\endprooftree</math>.\hfil\qed\hfil
<center><math>(\mathfrak A, \varrho^a_x) \models \forall y \psi</math></center>
\end{dowodbezqed}


Natychmiastowym wnioskiem z Lematu&nbsp;[[#lem-pier-1]] jest  
}}
Natychmiastowym wnioskiem z [[#lem-pier-1|Lematu 2.10]] jest  
następujący przykład tautologii.  
następujący przykład tautologii.  


{{fakt||fa-pier-1|  
{{fakt|2.11|fa-pier-1|  


Dla dowolnej formuły <math>\var\varphi</math>, zmiennej <math>x</math> i termu <math>t</math>  
Dla dowolnej formuły <math>\var\varphi</math>, zmiennej <math>x</math> i termu <math>t</math>  
dopuszczalnego dla <math>x</math> w <math>\var\varphi</math>, formuła   
dopuszczalnego dla <math>x</math> w <math>\var\varphi</math>, formuła   
\[\forall x\var\varphi\arr\subst\var\varphi tx\]
<center><math>\forall x\var\varphi\to\var\varphi(t/x)</math></center>
jest tautologią logiki pierwszego rzędu.  
jest tautologią logiki pierwszego rzędu.  
}}  
}}  
{{dowod||  
{{dowod|||
 
Ćwiczenie.  
Ćwiczenie.  
}}  
}}  


{{fakt||alfa-konw|  
{{fakt|2.12|alfa-konw|  


Jeśli zmienna <math>y</math> jest dopuszczalna dla <math>x</math> w <math>\var\varphi</math> oraz   
Jeśli zmienna <math>y</math> jest dopuszczalna dla <math>x</math> w <math>\var\varphi</math> oraz   
<math>y\not\in\fv\var\varphi</math>, to  
<math>y\not\in\fv\var\varphi</math>, to  
\[
<center><math>\models(\forall x\var\varphi)\leftrightarrow (\forall y \var\varphi(y/x))</math></center>.
\models(\forall x\var\varphi)\\leftrightarrow (\forall y \subst\var\varphi yx).  
\]
}}  
}}  
\begin{dowodbezqed}
Z Faktu&nbsp;[[#fa-pier-1]] oraz Faktu&nbsp;[[#fakt-gen]] otrzymujemy
<span id=""/> <math> 


\models\forall y(\forall x\var\varphi\to\subst\var\varphi yx).
{{dowod|||
</math>  
Z [[#fa-pier-1|Faktu 2.11]] oraz [[#fakt-gen|Faktu 2.8]] otrzymujemy
Zatem na mocy Faktu&nbsp;[[#fakt-przyklad-taut]]([[#taut1]]) wnioskujemy, że
<center><math>\models \forall y(\forall x \varphi \to \varphi(y/x))</math></center>
<span id=""/> <math>  
 
Zatem na mocy [[#taut5|Faktu 2.7(1)]] wnioskujemy, że   


\models(\forall y\forall x\var\varphi)\to(\forall y\subst\var\varphi yx).  
<center><math>\models (\forall y \forall x \varphi) \to (\forall y \varphi (y/x))</math>.</center>
</math>  
Na mocy Przykładu&nbsp;[[#fakt-przyklad-taut]]([[#taut2]]) otrzymujemy  
Na mocy [[#taut5|Przykładu 2.7(2)]] otrzymujemy implikację <math>\to</math>. Odwrotna implikacja wynika z już udowodnionej  
\rightarrowlikację <math>\to</math>. Odwrotna \rightarrowlikacja wynika z już udowodnionej  
implikacji 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 <math>\var\varphi</math>, to <math>x</math> jest dopuszczalna dla <math>y</math> w <math>\var\varphi(y/x)</math>.  
*Jeśli <math>y</math> jest dopuszczalna dla <math>x</math> w  
*Jeśli <math>y\not\in FV\var\varphi</math>, to <math>x</math> nie występuje wolno w <math>\var\varphi(y/x)</math>.  
<math>\var\varphi</math>, to <math>x</math> jest dopuszczalna dla <math>y</math> w <math>\subst\var\varphi yx</math>.  
*Wynik podstawienia <math>\var\varphi(y/x)(x/y)</math> jest identyczny  z&nbsp;<math>\var\varphi</math>.
*Jeśli <math>y\not\in\fv\var\varphi</math>, to <math>x</math> nie występuje wolno w  
<math>\subst\var\varphi yx</math>.  
*Wynik podstawienia <math>\subst{\subst\var\varphi yx}xy</math> jest identyczny   
z&nbsp;<math>\var\varphi</math>.\hfil\qed


}}


Fakt&nbsp;[[#alfa-konw]] pozwala zamieniać zmienne związane dowolnie, tak długo jak  
[[#alfa-konw|Fakt 2.12]] 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  
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ć  
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 uogólnić Fakt&nbsp;[[#alfa-konw]]: znaczenie formuły nie ulega zmianie  
Łatwo jest uogólnić [[#alfa-konw|Fakt 2.12]]: 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  
wewnątrz formuły.
wewnątrz formuły.
 
\subsection*{Ćwiczenia}\begin{small}
#Niech <math>\strA =\<\NN, p^\strA, q^\strA\></math>, gdzie:
 
\hfil <math>\<a,b\>\in p^\strA</math> \wtw, gdy <math>a+b\geq 6</math>;\hfil
 
\hfil <math>\<a,b\>\in q^\strA</math> \wtw, gdy <math>b=a+2</math>.
 
Zbadać czy formuły 
##<math>\forall x p(x,y) \to \exists x q(x,y)</math>;
##<math>\forall x p(x,y) \to \forall x q(x,y)</math>;
##<math>\forall x p(x,y) \to \exists x q(x,z)</math>;
 
są spełnione przy wartościowaniu <math>v(y) = 7</math>, <math>v(z) = 1</math>
w strukturze <math>\strA</math>.
 
\item Niech <math>\strA = \<\ZZ, f^\strA, r^\strA\></math>
i <math>\strB = \<\ZZ, f^\strB, r^\strB\></math>, gdzie 
 
\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>;
 
\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>.
 
Zbadać czy formuły
#<math>\forall y(\forall x(r(z,f(x,y))\to r(z,y)))</math>;
#<math>\forall y(\forall x(r(z,f(x,y)))\to r(z,y))</math>,
 
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>.
 
\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(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 
relacją podzielności?
#[(b)] w strukturze <math>\B = \<\NN, r^\strB\></math>, gdzie <math>r^\strB</math> jest
relacją przystawania modulo 7?
 
 
\item W jakich strukturach prawdziwa jest formuła <math>\exists y (y\neq x)</math>? 
A&nbsp;formuła <math>\exists y (y\neq y)</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 
 
\hfil <math>p(x,f(x)) \to \forall x\exists y\, p(f(y),x)</math>
 
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
#
<math>\exists x\forall y(p(x) \vee q(y)) \to \forall y(p(f(y))\vee q(y))</math>;
#<math>\forall y(p(f(y))\vee q(y)) \to \exists x\forall y(p(x) \vee q(y))</math>;
#%97b 
<math>\exists x(\forall y q(y)\to p(x))\to \exists x\forall y(q(y)\to p(x))</math>;
#%97c 
<math>\exists x(\forall y q(y)\to p(x)) \to\exists x(q(x)\to p(x))</math>.
 
 
\item Niech <math>f</math> będzie jednoargumentowym symbolem funkcyjnym, który
nie występuje w&nbsp;formule&nbsp;<math>\var\varphi</math>.
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(x)/y]</math> 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 <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>n</math>elementów.  


\item Czy jeśli <math>\strA \models \exists x\,\var\varphi</math>, to także
===Przypisy===
<math>\strA \models \var\varphi[t/x]</math>, dla pewnego termu <math>t</math>?
<references/>

Aktualna wersja na dzień 22:15, 11 wrz 2023

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 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:

  • Symbole operacji i relacji (w tym symbol równości =);
  • Zmienne indywiduowe, których wartości mają przebiegać rozważane dziedziny;
  • Kwantyfikatory, wiążące zmienne indywiduowe w formułach.


Składnia

Symbole operacji i relacji są podstawowymi składnikami do budowy najprostszych formuł, tzw. formuł atomowych. Z tego względu w języku pierwszego rzędu rezygnuje się ze zmiennych zdaniowych.

Definicja 2.1

Przez sygnaturę Σ rozumieć będziemy rodzinę zbiorów ΣnF, dla n0 oraz rodzinę zbiorów ΣnR, dla n1. Elementy ΣnF będziemy nazywać symbolami operacji n-argumentowych, a elementy ΣnR będziemy nazywać symbolami relacji n-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 +,,0,1 (o znanej każdemu liczbie argumentów) tworzy sygnaturę języka teorii ciał.

Definicja 2.2

Ustalamy pewien nieskończony przeliczalny zbiór X symboli, które będziemy nazywać zmiennymi indywiduowymi i zwykle oznaczać symbolami x,y,z. Zbiór termów TΣ(X) nad sygnaturą Σ i zbiorem zmiennych X definiujemy indukcyjnie:

  • Zmienne indywiduowe są termami.
  • Dla każdego n0 i każdego symbolu operacji fΣnF, jeśli t1,,tn są termami, to f(t1,,tn) jest też termem.

Zauważmy, że z powyższej definicji wynika, iż stałe sygnatury Σ (czyli symbole operacji zeroargumentowych) są termami.

Definicja 2.3

Dla każdego termu tTΣ(X) definiujemy zbiór Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle \fv t} zmiennych występujących w t. Definicja jest indukcyjna:

  • 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 2.4

Następnie zdefiniujemy formuły atomowe języka pierwszego rzędu.

  • Symbol fałszu jest formułą atomową.
  • Dla każdego n1, każdego symbolu rΣnR relacji n-argumentowej oraz dla dowolnych termów t1,,tnTΣ(X), napis r(t1,,tn) jest formułą atomową.
  • Dla dowolnych termów t1,t2, napis (t1=t2) jest formułą atomową.

Konwencja: Niektóre dwuargumentowe symbole relacyjne (np. ) i funkcyjne (np. +, ) są zwyczajowo pisane pomiędzy argumentami. Na przykład formułę atomową (x,y) zwykle piszemy jako "xy".

Definicja 2.5

Formuły nad sygnaturą Σ i zbiorem zmiennych indywiduowych X 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 xX 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 zmiennych wolnych Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle FV(\var\varphi)} występujących w tej formule:

  • FV=;
  • FVr(t1,,tn)=i=1nFVti;
  • Parser nie mógł rozpoznać (nieznana funkcja „\cupFV”): {\displaystyle FV{t_1=t_2}=FV{t_1}\cupFV{t_2}} ;
  • Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle FV{\var\varphi\to\psi}=FV\var\varphi\cup FV\psi} ;
  • Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\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ę zdaniem lub formułą zamkniętą.

Negację, koniunkcję, alternatywę, symbol prawdy i równoważność formuł definiujemy podobnie jak w przypadku rachunku zdań. Kwantyfikator egzystencjalny zdefiniujemy jako skrót notacyjny przy pomocy uogólnionego prawa De Morgana:

Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \exists x\var\varphi \hspace{1cm} \text{oznacza} \hspace{1cm} \neg\forall x \neg\var\varphi. }


Zmienne wolne a zmienne związane. W Definicji 2.5 nie zakładamy, że Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle x\in FV\var\varphi} . Zauważmy też, że zmienna x 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 „\var”): {\displaystyle x\not\in FV\var\varphi} . Przez wystąpienie zmiennej indywiduowej x rozumiemy tu zwykłe pojawienie się x w jakimkolwiek termie w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} . I tak na przykład w formule <ref name="trzy">Zakładamy tu, że s oraz r są symbolami relacji.</ref> xu(r(x,y)yxs(x,y,z)) zmienna u nie występuje, podczas gdy x i y wystepują po dwa razy, a z występuje jeden raz.

Bardzo ważną rzeczą jest rozróżnienie wystąpień zmiennych wolnych i związanych w formułach. Wszystkie wystąpienia zmiennych w formułach atomowych są wolne. Wolne (związane) wystąpienia w formułach Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi}ψ pozostają wolne (związane) w formule Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi\to\psi} . Wszystkie wolne wystąpienia x 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 Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} i w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \exists x\var\varphi} .

Przykładowo w formule xu(r(x,y_)yxs(x,y,z)) podkreślone wystąpienie y jest wolne, a nie podkreślone jest związane. Obydwa wystąpienia x 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.<ref name="cztery">Taka zamiana zmiennych bywa nazywana α-konwersją.</ref> Tak w istocie będzie, jak się przekonamy poniżej (Fakt 2.12).

Semantyka formuł

Niech Σ będzie sygnaturą. Struktura 𝔄 nad sygnaturą Σ (lub po prostu Σ-struktura) to niepusty zbiór A, zwany nośnikiem, wraz z interpretacją każdego symbolu operacji fΣnF jako funkcji n argumentowej Parser nie mógł rozpoznać (nieznana funkcja „\strA”): {\displaystyle f^{\strA}:A^n\to A} oraz każdego symbolu relacji rΣnR jako relacji n-argumentowej r𝔄An. (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ć (błąd składni): {\displaystyle \mathfrak A = \<A, f_1^\mathfrak A,\ldots,f_n^\mathfrak A,r_1^\mathfrak A,\ldots, r_m^\mathfrak A\>} , gdzie f1,,fn,r1,,rm 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 r,f, zamiast r𝔄,f𝔄,


Wartościowaniem w Σ-strukturze 𝔄 nazwiemy dowolną funkcję ϱ:XA. Dla wartościowania ϱ, zmiennej xX oraz elementu aA definiujemy nowe wartościowanie ϱxa:XA, będące modyfikacją wartościowania ϱ na argumencie x, w następujący sposób,

Parser nie mógł rozpoznać (nieznana funkcja „\begin{cases}”): {\displaystyle \varrho_x^a(y)= \begin{cases} \varrho(y)}, \mbox{jeśli} y\neq x \\ a, \mbox{w przeciwnym wypadku} \end{cases}}


Najpierw zdefiniujemy znaczenie termów. Wartość termu tTΣ(X) w Σ-strukturze 𝔄 przy wartościowaniu ϱ oznaczamy przez [[t]]ϱ𝔄, lub [[t]]ϱ, gdy 𝔄 jest znane. Definicja jest indukcyjna:

  • [[x]]ϱ𝔄=ϱ(x).
  • [[f(t1,,tn)]]ϱ𝔄=f𝔄([[t1]]𝔄ϱ,,[[t1]]ϱ𝔄).

Znaczenie formuł definiujemy poniżej. Napis

Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\mathfrak A , \varrho ) \vDash \var\varphi}

czytamy: formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest spełniona w strukturze 𝔄 przy wartościowaniu ϱ. Zakładamy tu, że Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} oraz 𝔄 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 (𝔄,ϱ).
  • Dla dowolnego n1, rΣnR oraz dla dowolnych termów t1,,tn, przyjmujemy, że (𝔄,ϱ)r(t1,,tn) wtedy i tylko wtedy, gdy Parser nie mógł rozpoznać (błąd składni): {\displaystyle \langle [[t_1]]^{\mathfrak A}_\varrho, \ldots [[t_2]]^{\mathfrak A}_\varrho \rangle \in r^{\mathfrak A} .
  • (𝔄,ϱ)t1=t2, wtedy i tylko wtedy, gdy [[t1]]ϱ𝔄=[[t2]]ϱ𝔄
  • Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\mathfrak A , \varrho ) \vDash \var\varphi \to \psi} , gdy nie zachodzi (𝔄,ϱ)φ lub zachodzi (𝔄,ϱ)ψ
  • Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\mathfrak A , \varrho ) \vDash \forall x\var\varphi} wtedy i tylko wtedy, gdy dla dowolnego aA zachodzi (𝔄,ϱxa)φ


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 „\var”): {\displaystyle FV(\var\varphi)} . Uzasadnia ono następującą konwencję notacyjną: napiszemy na przykład Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle ( \mathfrak A , x:a,y:b ) \vDash \var\varphi} zamiast Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\mathfrak A, \varrho )\vDash \var\varphi} , gdy ϱ(x)=aϱ(y)=b, a przy tym wiadomo, że w formule Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} występują wolno tylko zmienne xy. Jeśli Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest zdaniem, to wartościowanie można całkiem pominąć.

Fakt 2.6

Dla dowolnej Σ-struktury 𝔄 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

Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\mathfrak A,\varrho) \vDash\var\varphi} wtedy i tylko wtedy, gdy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle ( \mathfrak A, \varrho') \vDash\var\varphi}

Dowód

Ćwiczenie.

Prawdziwość i spełnialność formuł

Powiemy, że formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest spełnialna w 𝔄, gdy istnieje wartościowanie ϱ w strukturze 𝔄 takie, że zachodzi Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\mathfrak A,\varrho) \vDash\var\varphi} . Formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest spełnialna, gdy istnieje struktura 𝔄, 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 prawdziwa w 𝔄, gdy dla każdego wartościowania ϱ w 𝔄 zachodzi Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\mathfrak A,\varrho)\vDash\var\varphi} . W tym przypadku mówimy też, że 𝔄 jest 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 „\var”): {\displaystyle \mathfrak A\models\var\varphi} ). Dla zbioru formuł Γ i Σ-struktury 𝔄 powiemy, że 𝔄 jest modelem dla Γ (piszemy 𝔄Γ), 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 „\var”): {\displaystyle \mathfrak A\models\var\varphi} . Formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest 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 rzędu, których nie da się w ten sposób otrzymać.

Fakt 2.7

Następujące formuły są tautologiami logiki pierwszego rzedu:

  1. x(φψ)(xφxψ).
  2. Parser nie mógł rozpoznać (nieznana funkcja „\fv”): {\displaystyle \varphi\to \forall x \varphi$, o ile $x\not\in\fv\varphi} .
  3. xφφ.
  4. x=x.
  5. x1=y1(x2=y2(xn=ynf(x1,,xn)=f(y1,,yn))), dla fΣnF, n0.
  6. x1=y1(x2=y2(xn=ynr(x1,,xn)r(y1,,yn))), dla rΣnR,n1.

Dowód

Aby się przekonać, że formuła (1) jest tautologią, rozpatrzmy dowolną strukturę 𝔄 i jakieś wartościowanie ϱ. Załóżmy najpierw, że Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\mathfrak A,\varrho) \vDash \forall x(\var\varphi\to\psi)} oraz Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\mathfrak A,\varrho) \vDash \forall x\,\var\varphi} . Oznacza to, że dla dowolnego aA zachodzi Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\mathfrak A,\varrho^a_x) \vDash \var\varphi} oraz Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\mathfrak A,\varrho^a_x) \vDash \var\varphi\to\psi} . Musi więc zajść (𝔄,ϱxa)ψ Z dowolności a mamy (𝔄,ϱ)xψ, a stąd Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\mathfrak A,\varrho) \vDash \forall x(\var\varphi\to\psi) \to (\forall x \varphi \to \forall x \psi)} .

Jeśli Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle ( \mathfrak A, \varrho) \not\models \forall x(\var\varphi\to\psi)} lub (𝔄,ϱ)⊭xφ, to nasza formuła jest spełniona przez ϱ wprost z definicji. Uzasadnienie części (3-6) pozostawiamy czytelnikowi.

Ponadto mamy następujący

Fakt 2.8

Dla dowolnej tautologii Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} i dowolnej zmiennej x, formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \forall x\var\varphi} jest też tautologią.

Dowód

Ćwiczenie.

Uzasadnienie, że dana formuła jest tautologią, polega na analizie jej spełniania w dowolnych modelach (por. Fakt 2.7). Natomiast wykazanie, że tak nie jest, polega na podaniu odpowiedniego kontrprzykładu. Takiego jak ten:

Przykład 2.9

Zdanie (xp(x)xq(x))x(p(x)q(x)) nie jest tautologią. Rozpatrzmy bowiem model 𝔄=<,p𝔄,q𝔄>, w którym:

  • np𝔄, wtedy i tylko wtedy, gdy n jest parzyste;
  • nq𝔄, wtedy i tylko wtedy, gdy n jest nieparzyste;

Ponieważ p𝔄, więc 𝔄⊭xp(x). (Mamy tu do czynienia ze zdaniem, więc wartościowanie jest nieistotne i dlatego je pomijamy.) Stąd otrzymujemy 𝔄xp(x)xq(x). Z drugiej strony 𝔄⊭x(p(x)q(x)), ponieważ (𝔄,x:2)⊭p(x)q(x). Rzeczywiście, 2p𝔄q𝔄.

Podstawianie termów

Dla formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} , termu t i zmiennej x, napis Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi (t/x)} oznacza wynik podstawienia t na wszystkie wolne wystąpienia x 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ł y(yx) oraz z(zx) jest taki sam. Tymczasem "naiwne" podstawienie y w miejsce x w obu tych formułach daje w wyniku odpowiednio y(yy) i z(zy), a te dwie formuły znaczą całkiem co innego. Przyczyną jest to, że w pierwszym przypadku zmienną y wstawiono w zasięg kwantyfikatora y.

Ź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 t jest dopuszczalny dla zmiennej x 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 dopuszczalne, jeśli dla każdej zmiennej y występującej w t, żadne wolne wystąpienie x w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} nie jest zawarte w zasięgu kwantyfikatora y lub y. Mamy więc następującą indukcyjną definicję dopuszczalnego podstawienia,<ref name="piec">Podstawianie termu t do termu s na miejsce zmiennej x oznaczamy podobnie: s(t/x). Takie podstawienie jest zawsze wykonalne.</ref> w której każda lewa strona jest dopuszczalna pod warunkiem, że prawa strona jest dopuszczalna.

  • (t/x)=, gdy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle x\not\in FV(\var\varphi)} ;
  • r(t1,,tn)(t/x)=r(t1(t/x),,tn(t/x));
  • (t1=t2)(t/x)=(t1(t/x)=t2(t/x);
  • Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\var\varphi\to\psi)(t/x) = \var\varphi(t/x)\to\psi(t/x)} ;
  • Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\forall x\var\varphi)(t/x) = \forall x\var\varphi} ;
  • Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\forall y\var\varphi)(t/x) = \forall y\var\varphi(t/x)} , gdy y=x, oraz y∉FV(t);
  • W pozostałych przypadkach podstawienie jest niedopuszczalne.


W dalszym ciągu będziemy rozważać jedynie podstawienia dopuszczalne.

Lemat 2.10 (o podstawieniu)

Niech 𝔄 będzie dowolną strukturą oraz ϱ:XA dowolnym wartościowaniem w 𝔄. Niech t będzie dowolnym termem.

  1. Dla dowolnego termu s i zmiennej x mamy
    [[s(t/x)]]ϱ𝔄=[[s]]ϱxa𝔄
    gdzie a=[[t]]ϱ𝔄.
  2. Dla dowolnej formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} , jeśli term t jest dopuszczalny dla x w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} , to
(𝔄,ϱ)φ(t/x) wtedy i tylko wtedy, gdy (𝔄,ϱxa)φ
gdzie a=[[t]]ϱ𝔄.

Dowód

Część 1 dowodzimy przez indukcję ze względu na budowę termu s. Jeśli s jest zmienną x, to obie strony są równe [[t]]ϱ𝔄. Jeśli s jest zmienną y (różną od x), to obie strony są równe ϱ(y). Jeśli s jest postaci f(s1,,sn), to mamy następujące równości.


[[s(t/x)]]ϱ𝔄=[[f(s1(t/x),,sn(t/x))]]ϱ𝔄

=f𝔄([[s1(t/x)]]ϱ𝔄,,[[sn(t/x)]]ϱ𝔄)
=f𝔄([[s1]]ϱxa𝔄,,[[sn]]ϱxa𝔄)
=[[f(s1,,sn)]]ϱxa𝔄=[[s]]ϱxa𝔄

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 s1=s2 to mamy:

(𝔄,ϱ)φ(t/x) wtedy i tylko wtedy, gdy [[s1(t/x)]]ϱ𝔄=[[s1(t/x)]]ϱ𝔄

wtedy i tylko wtedy, gdy [[s1]]ϱxa𝔄=[[s2]]ϱxa𝔄
wtedy i tylko wtedy, gdy Parser nie mógł rozpoznać (nieznana funkcja „\varrhp”): {\displaystyle (\mathfrak A, \varrhp^a_x) \models s_1 = s_2}

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 ψϑ jest oczywisty i pozostawimy go czytelnikowi. Rozważymy przypadek, gdy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest postaci yψ. Jeśli zmienne x oraz y są równe, to x nie występuje wolno w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} i wówczas teza wynika natychmiast z Faktu 2.6. Tak więc przyjmijmy, że x oraz y są różnymi zmiennymi. Wówczas z dopuszczalności t dla x w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} wynika, że y nie występuje w t. 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:

(𝔄,ϱ)yψ(t/x) wtedy i tylko wtedy, gdy dla każdego dA,(𝔄,ϱyd)ψ(t/x)

wtedy i tylko wtedy, gdy dla każdego dA,(𝔄,ϱyxda)ψ

gdzie a=[[t]]ϱyd𝔄. Ponieważ y nie występuje w t, więc a=[[t]]ϱyd𝔄=[[t]]ϱ𝔄=a. Skoro zmienne x oraz y są różne, to ϱy :xd :a=ϱx :ya :d. Tak więc warunek (𝔄,ϱy :xd :a)ψ jest równoważny warunkowi (𝔄,ϱx :ya :d)ψ, dla każdego dA. Czyli

(𝔄,ϱxa)yψ

Natychmiastowym wnioskiem z Lematu 2.10 jest następujący przykład tautologii.

Fakt 2.11

Dla dowolnej formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} , zmiennej x i termu t dopuszczalnego dla x w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} , formuła

Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \forall x\var\varphi\to\var\varphi(t/x)}

jest tautologią logiki pierwszego rzędu.

Dowód

Ćwiczenie.

Fakt 2.12

Jeśli zmienna y jest dopuszczalna dla x 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

Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \models(\forall x\var\varphi)\leftrightarrow (\forall y \var\varphi(y/x))}
.

Dowód

Z Faktu 2.11 oraz Faktu 2.8 otrzymujemy

y(xφφ(y/x))

Zatem na mocy Faktu 2.7(1) wnioskujemy, że

(yxφ)(yφ(y/x)).

Na mocy Przykładu 2.7(2) otrzymujemy implikację . Odwrotna implikacja wynika z już udowodnionej implikacji oraz z następujących prostych obserwacji:

  • Jeśli y jest dopuszczalna dla x w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} , to x jest dopuszczalna dla y w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi(y/x)} .
  • Jeśli Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle y\not\in FV\var\varphi} , to x nie występuje wolno w Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi(y/x)} .
  • Wynik podstawienia Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi(y/x)(x/y)} jest identyczny z Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} .

Fakt 2.12 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 2.12: znaczenie formuły nie ulega zmianie także przy wymianie zmiennych związanych kwantyfikatorami wystepującymi wewnątrz formuły.

Przypisy

<references/>