Logika dla informatyków/Rachunek zdań: 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 18 wersji utworzonych przez 6 użytkowników)
Linia 3: Linia 3:
Wnioskowanie o prawdziwości rozmaitych stwierdzeń jest powszednim zajęciem matematyków i nie tylko matematyków. Dlatego filozofowie i matematycy od dawna zajmowali się systematyzacją metod wnioskowania i kryteriów ich poprawności. Oczywiście ostatecznym kryterium poprawności rozumowania pozostaje zawsze zdrowy rozsądek i przekonanie o słuszności wywodu. Logika, która narodziła się jako nauka o rozumowaniu, jest jednak ważnym i potrzebnym narzędziem, które to przekonanie ułatwia.
Wnioskowanie o prawdziwości rozmaitych stwierdzeń jest powszednim zajęciem matematyków i nie tylko matematyków. Dlatego filozofowie i matematycy od dawna zajmowali się systematyzacją metod wnioskowania i kryteriów ich poprawności. Oczywiście ostatecznym kryterium poprawności rozumowania pozostaje zawsze zdrowy rozsądek i przekonanie o słuszności wywodu. Logika, która narodziła się jako nauka o rozumowaniu, jest jednak ważnym i potrzebnym narzędziem, które to przekonanie ułatwia.


Szczególną rolę wśród rozmaitych działów logiki zajmuje logika matematyczna, poświęcona opisowi i analizie języka matematyki oraz poprawności wnioskowań matematycznych. Jest to dyscyplina w pewnym sensie paradoksalna: będąc sama częścią matematyki, traktuje matematykę jako swój przedmiot zainteresowania. Dla uniknięcia, "błędnego koła" musimy więc tutaj zauważyć, że logika formalna nieopisuje rzeczywistych wywodów matematyka, ale ich uproszczone modele, które bez zastrzeżeń można uważać za zwykłe obiektymatematyczne. Mimo tego ograniczenia, logika matematyczna dostarcza niezwykle ważnych wniosków o charakterze filozoficznym i metamatematycznym.
Szczególną rolę wśród rozmaitych działów logiki zajmuje logika matematyczna, poświęcona opisowi i analizie języka matematyki oraz poprawności wnioskowań matematycznych. Jest to dyscyplina w pewnym sensie paradoksalna: będąc sama częścią matematyki, traktuje matematykę jako swój przedmiot zainteresowania. Dla uniknięcia "błędnego koła" musimy więc tutaj zauważyć, że logika formalna nie opisuje rzeczywistych wywodów matematyka, ale ich uproszczone modele, które bez zastrzeżeń można uważać za zwykłe obiekty matematyczne. Mimo tego ograniczenia, logika matematyczna dostarcza niezwykle ważnych wniosków o charakterze filozoficznym i metamatematycznym.


Logika formalna była kiedyś ezoteryczną nauką z pogranicza filozofii imatematyki, potem stała się pełnoprawnym działem czystej matematyki.Jeszcze później, wraz z narodzinami informatyki, zaczęła być coraz bardziej postrzegana jako dziedzina matematyki stosowanej, a zwłaszcza podstaw informatyki.
Logika formalna była kiedyś ezoteryczną nauką z pogranicza filozofii i matematyki, potem stała się pełnoprawnym działem czystej matematyki. Jeszcze później, wraz z narodzinami informatyki, zaczęła być coraz bardziej postrzegana jako dziedzina matematyki stosowanej, a zwłaszcza podstaw informatyki.


Logika matematyczna stosowana jest dziś szeroko w informatyce. Semantyka i weryfikacja programów, teoria złożoności i teoria automatów, programowanie funkcyjne i programowanie w logice --- to tylko niektórez działów informatyki, w których metody logiki formalnej stały się standardowym narzędziem zarówno badacza jak i praktyka.
Logika matematyczna stosowana jest dziś szeroko w informatyce. Semantyka i weryfikacja programów, teoria złożoności i teoria automatów, programowanie funkcyjne i programowanie w logice --- to tylko niektóre z działów informatyki, w których metody logiki formalnej stały się standardowym narzędziem zarówno badacza, jak i praktyka.


==Rachunek zdań ==
==Rachunek zdań ==


Jak powiedzieliśmy wyżej, logika matematyczna zajmuje się badaniem rozmaitych systemów formalnych, modelujących rzeczywiste sposoby wnioskowania matematycznego. Do najprostszych takich systemów należą różne warianty ''logiki zdaniowej'' zwanej też ''rachunkiem zdań ''. Język rachunku zdań jest bardzo prosty. Nie ma w nim wyrażeń stwierdzających jakiś stan rzeczy, zajście jakichś faktów, czy też wyrażeń orzekających o własnościach obiektów. Przedmiotem naszego zainteresowania są tu tylko możliwe zależności pomiędzy stwierdzeniami (zdaniami orzekającymi), oraz to w jaki sposób prawdziwość zdań złożonych zależy od prawdziwości ich składowych. Sens samych składowych pozostaje tu całkowicie dowolny i nieistotny. Dlatego w rachunku zdań odpowiadają im po prostu ''zmienne zdaniowe ''. Zdania złożone budujemy ze zmiennych za pomocą''spójników logicznych '' takich jak ''alternatywa ''&nbsp;<math>\vee</math>,''koniunkcja ''&nbsp;<math>\wedge</math>, ''negacja''&nbsp;<math>\neg</math>, czy ''implikacja'' <math>\to</math>. Wygodne są też ''stałe logiczne ''&nbsp;<math>\bot</math> (fałsz) i <math>\top</math>&nbsp;(prawda),które można uważać za zeroargumentowe spójniki logiczne.Dlatego nasza pierwsza definicja jest  taka:
Jak powiedzieliśmy wyżej, logika matematyczna zajmuje się badaniem rozmaitych systemów formalnych, modelujących rzeczywiste sposoby wnioskowania matematycznego. Do najprostszych takich systemów należą różne warianty ''logiki zdaniowej'' zwanej też ''rachunkiem zdań''. Język rachunku zdań jest bardzo prosty. Nie ma w nim wyrażeń stwierdzających jakiś stan rzeczy, zajście jakichś faktów, czy też wyrażeń orzekających o własnościach obiektów. Przedmiotem naszego zainteresowania są tu tylko możliwe zależności pomiędzy stwierdzeniami (zdaniami orzekającymi) oraz to w jaki sposób prawdziwość zdań złożonych zależy od prawdziwości ich składowych. Sens samych składowych pozostaje tu całkowicie dowolny i nieistotny. Dlatego w rachunku zdań odpowiadają im po prostu ''zmienne zdaniowe''. Zdania złożone budujemy ze zmiennych za pomocą''spójników logicznych'', takich jak ''alternatywa ''&nbsp;<math>\vee</math>, ''koniunkcja ''&nbsp;<math>\wedge</math>, ''negacja''&nbsp;<math>\neg</math>, czy ''implikacja'' <math>\to</math>. Wygodne są też ''stałe logiczne ''&nbsp;<math>\bot</math> (fałsz) i <math>\top</math>&nbsp;(prawda), które można uważać za zeroargumentowe spójniki logiczne. Dlatego nasza pierwsza definicja jest  taka:
 


{{definicja|1.1|radamalpa|
{{definicja|1.1|radamalpa|


Ustalamy pewien przeliczalnie nieskończony zbiór&nbsp;<math>\\mbox{\small ZZ}</math> symboli, które będziemy nazywać ''zmiennymi zdaniowymi'' i zwykle oznaczać literami <math>p</math>, <math>q</math>, itp. Pojęcie ''formuły zdaniowej'' definiujemy przez indukcję:
Ustalamy pewien przeliczalnie nieskończony zbiór&nbsp;<math>ZZ</math> symboli, które będziemy nazywać ''zmiennymi zdaniowymi'' i zwykle oznaczać literami <math>p</math>, <math>q</math>, itp. Pojęcie ''formuły zdaniowej'' definiujemy przez indukcję:
*Zmienne zdaniowe oraz <math>\bot</math> i <math>\top</math> są formułami zdaniowymi;
*Zmienne zdaniowe oraz <math>\bot</math> i <math>\top</math> są formułami zdaniowymi;
*Jeśli napis <math>\var\varphi</math> jest formułą zdaniową, to także napis <math>\neg\var\varphi</math> jest formułą zdaniową;
*Jeśli napis <math>\var\varphi</math> jest formułą zdaniową, to także napis <math>\neg\var\varphi</math> jest formułą zdaniową;
*Jeśli napisy <math>\var\varphi</math> i <math>\psi</math> są formułami zdaniowymi to napisy <math>(\var\varphi\to\psi)</math>, <math>(\var\varphi\vee\psi)</math> i <math>(\var\varphi\wedge\psi)</math> też są formułami zdaniowymi.
*Jeśli napisy <math>\var\varphi</math> i <math>\psi</math> są formułami zdaniowymi, to napisy <math>(\var\varphi\to\psi)</math>, <math>(\var\varphi\vee\psi)</math> i <math>(\var\varphi\wedge\psi)</math> też są formułami zdaniowymi.


Inaczej mówiąc, formuły zdaniowe to elementy najmniejszego zbioru napisów <math>\\F_{{\sc Z}}</math>, zawierającego <math>\small ZZ\cup\{\bot,\top\}</math> i takiego, że dla dowolnych <math>\var\varphi</math>,<math>\psi </math> <math> \in </math> <math> \\F_{{\sc Z}}</math> także <math>\neg\var\varphi,(\var\varphi\to\psi),(\var\varphi\vee\psi), (\var\varphi\wedge\psi)</math> należą do <math>\\F_{{\sc Z}}</math>.
Inaczej mówiąc, formuły zdaniowe to elementy najmniejszego zbioru napisów <math>\\F_{{\sc Z}}</math>, zawierającego <math>\small ZZ\cup\{\bot,\top\}</math> i takiego, że dla dowolnych <math>\var\varphi</math>,<math>\psi</math> <math>\in</math> <math>\\F_{{\sc Z}}</math> także <math>\neg\var\varphi,(\var\varphi\to\psi),(\var\varphi\vee\psi), (\var\varphi\wedge\psi)</math> należą do <math>\\F_{{\sc Z}}</math>.
}}
}}


Linia 35: Linia 34:


===Znaczenie formuł===
===Znaczenie formuł===
W ''logice klasycznej'' interpretacja formuły jest wartość logiczna tj.&nbsp;,,prawda'' (1) lub ,,fałsz''&nbsp;(0).Aby określić wartość formuły zdaniowej trzeba jednak najpierwustalić wartości zmiennych.
W ''logice klasycznej'' interpretacja formuły jest wartość logiczna tj.&nbsp;"prawda" (1) lub "fałsz"&nbsp;(0). Aby określić wartość formuły zdaniowej, trzeba jednak najpierw ustalić wartości zmiennych.


{{definicja|1.2|zesiesmieli|
{{definicja|1.2|zesiesmieli|


Przez ''wartościowanie zdaniowe'' rozumiemy dowolną funkcję&nbsp;<math>\varrho</math>,która zmiennym zdaniowym przypisuje wartości logiczne 0 lub&nbsp;1. ''Wartość formuły'' zdaniowej <math>\var\varphi</math> przy wartościowaniu&nbsp;<math>\varrho</math> oznaczamy przez <math>\wfz\var[[\varphi]]\varrho</math> i określamy przez indukcję:
Przez ''wartościowanie zdaniowe'' rozumiemy dowolną funkcję&nbsp;<math>\varrho</math>, która zmiennym zdaniowym przypisuje wartości logiczne 0 lub&nbsp;1. ''Wartość formuły'' zdaniowej <math>\var\varphi</math> przy wartościowaniu&nbsp;<math>\varrho</math> oznaczamy przez <math>\wfz\var[[\varphi]]\varrho</math> i określamy przez indukcję:


*<math>\wfz[[\bot]]\varrho=0</math> oraz <math>\wfz[[\top]]\varrho=1</math>;
*<math>\wfz[[\bot]]\varrho=0</math> oraz <math>\wfz[[\top]]\varrho=1</math>;
Linia 47: Linia 46:
*<math>[[\var\varphi\wedge\psi]]\varrho=\min\{\wf[[\var\varphi]]\varrho,\[[\psi]] \varrho\}</math>;
*<math>[[\var\varphi\wedge\psi]]\varrho=\min\{\wf[[\var\varphi]]\varrho,\[[\psi]] \varrho\}</math>;
*<math>[[\var\varphi\to\psi]]\varrho =0</math>, gdy <math>\wfz\var[[\varphi]]\varrho=1</math> i <math>\wfz[[\psi]]\varrho=0</math>;
*<math>[[\var\varphi\to\psi]]\varrho =0</math>, gdy <math>\wfz\var[[\varphi]]\varrho=1</math> i <math>\wfz[[\psi]]\varrho=0</math>;
*<math>[[\var\varphi\to\psi]]\varrho =1</math>, w przeciwnym wypadku
*<math>[[\var\varphi\to\psi]]\varrho =1</math>, w przeciwnym wypadku.
}}
}}


Łatwo można zauważyć, że <math>[[\var\varphi\to\psi]]\varrho  = \max\{\wfz[[\psi]]\varrho,1-\wfz\var[[\varphi]]\varrho\}</math>, czyli <math>[[\var\varphi\to\psi]]\varrho=[[\neg\var\varphi\vee\psi]]\varrho</math>, dla dowolnego&nbsp;<math>\varrho</math>. A zatem zamiast formuły <math>\var\varphi\to\psi</math> moglibyśmy z równym powodzeniem używać wyrażenia <math>\neg\var\varphi\vee\psi</math>, lub też odwrotnie: zamiast alternatywy <math>\var\varphi\vee\psi</math> pisać <math>\neg\var\varphi\to\psi</math>.Nasz wybór spójników nie jest więc "najoszczędniejszy", w istocie w logice klasycznej wystarczy używać np.implikacji i fałszu ([[Logika dla informatyków/Ćwiczenia 1#cwicz_6|ćwiczenie 6]]). Czasem i my będziemy korzystać z tego wygodnego uproszczenia, przyjmując, że "oficjalnymi" spójnikami są tylko implikacja i fałsz, a pozostałe to skróty notacyjne, tj.&nbsp;że napisy  
Łatwo zauważyć, że <math>[[\var\varphi\to\psi]]\varrho  = \max\{\wfz[[\psi]]\varrho,1-\wfz\var[[\varphi]]\varrho\}</math>, czyli <math>[[\var\varphi\to\psi]]\varrho=[[\neg\var\varphi\vee\psi]]\varrho</math> dla dowolnego&nbsp;<math>\varrho</math>. A zatem zamiast formuły <math>\var\varphi\to\psi</math> moglibyśmy z równym powodzeniem używać wyrażenia <math>\neg\var\varphi\vee\psi</math>, lub też odwrotnie: zamiast alternatywy <math>\var\varphi\vee\psi</math> pisać <math>\neg\var\varphi\to\psi</math>. Nasz wybór spójników nie jest więc "najoszczędniejszy", w istocie w logice klasycznej wystarczy używać np. implikacji i fałszu ([[Logika dla informatyków/Ćwiczenia 1#cwicz_6|ćwiczenie 6]]). Czasem i my będziemy korzystać z tego wygodnego uproszczenia, przyjmując, że "oficjalnymi" spójnikami są tylko implikacja i fałsz, a pozostałe to skróty notacyjne, tj.&nbsp;że napisy  
<center>
<center>
{|
{|
Linia 66: Linia 65:
Będziemy też czasem pisać <math>\var\varphi \leftrightarrow\psi</math> zamiast <math>(\var\varphi\to\psi)\wedge(\psi\to\var\varphi)</math>. Zauważmy, że <math>[[\var\varphi\leftrightarrow\psi]]\varrho=1</math> wtedy i tylko wtedy, gdy <math>[[\var\varphi\to\psi]]\varrho=[[\psi\to\var\varphi]]\varrho</math>.
Będziemy też czasem pisać <math>\var\varphi \leftrightarrow\psi</math> zamiast <math>(\var\varphi\to\psi)\wedge(\psi\to\var\varphi)</math>. Zauważmy, że <math>[[\var\varphi\leftrightarrow\psi]]\varrho=1</math> wtedy i tylko wtedy, gdy <math>[[\var\varphi\to\psi]]\varrho=[[\psi\to\var\varphi]]\varrho</math>.


Często stosowanym skrótem jest notacja <math>\bigvee_{i\in I}\var\varphi_i</math>oznaczająca alternatywę wszystkich formuł&nbsp;<math>\var\varphi_i</math>, gdzie <math>i</math>przebiega skończony zbiór&nbsp;<math>I</math>. Analogicznie stosuje sięzapis <math>\bigwedge_{i\in I}\var\varphi_i</math>.
Często stosowanym skrótem jest notacja <math>\bigvee_{i\in I}\var\varphi_i</math>, oznaczająca alternatywę wszystkich formuł&nbsp;<math>\var\varphi_i</math>, gdzie <math>i</math> przebiega skończony zbiór&nbsp;<math>I</math>. Analogicznie stosuje się zapis <math>\bigwedge_{i\in I}\var\varphi_i</math>.




'''Notacja i terminologia:''' Jeśli <math>[[\var\varphi]]\varrho=1</math> to piszemy też <math>\varrho\models\var\varphi</math> lub <math>\models\var\varphi[\varrho]</math> i mówimy, że <math>\var\varphi</math> jest ''spełniona'' przez wartościowanie&nbsp;<math>\varrho</math>. Jeśli <math>\Gamma</math> jest zbiorem formuł zdaniowych, oraz <math>\varrho\models\gamma</math> dla wszystkich <math>\gamma\in\Gamma</math>, to piszemy <math>\varrho\models\Gamma</math>.Wreszcie <math>\Gamma\models\var\varphi</math> oznacza, że każde wartościowanie spełniające wszystkie formuły z&nbsp;<math>\Gamma</math> spełnia także formułę&nbsp;<math>\var\varphi</math>. Mówimy wtedy, że <math>\var\varphi</math> jest ''semantyczną konsekwencją'' zbioru&nbsp;<math>\Gamma</math>. Jeśli <math>\Gamma=\emptyset</math> to zamiast <math>\Gamma\models\var\varphi</math> piszemy po prostu <math>\models\var\varphi</math>. Oznacza to, że formuła <math>\var\varphi</math> jest spełnionaprzez każde wartościowanie. Na koniec powiedzmy jeszcze, że formułami ''równoważnymi'' nazywamy takie formuły <math>\var\varphi</math> i <math>\psi</math>, których wartości przy każdym wartościowaniu są takiesame (tj.&nbsp;takie, że&nbsp;równoważność <math>\var\varphi \leftrightarrow\psi</math> jest tautologią ---patrz niżej).
'''Notacja i terminologia:''' Jeśli <math>[[\var\varphi]]\varrho=1</math>, to piszemy też <math>\varrho\models\var\varphi</math> lub <math>\models\var\varphi[\varrho]</math> i mówimy, że <math>\var\varphi</math> jest ''spełniona'' przez wartościowanie&nbsp;<math>\varrho</math>. Jeśli <math>\Gamma</math> jest zbiorem formuł zdaniowych oraz <math>\varrho\models\gamma</math> dla wszystkich <math>\gamma\in\Gamma</math>, to piszemy <math>\varrho\models\Gamma</math>. Wreszcie <math>\Gamma\models\var\varphi</math> oznacza, że każde wartościowanie spełniające wszystkie formuły z&nbsp;<math>\Gamma</math> spełnia także formułę&nbsp;<math>\var\varphi</math>. Mówimy wtedy, że <math>\var\varphi</math> jest ''semantyczną konsekwencją'' zbioru&nbsp;<math>\Gamma</math>. Jeśli <math>\Gamma=\emptyset</math>, to zamiast <math>\Gamma\models\var\varphi</math> piszemy po prostu <math>\models\var\varphi</math>. Oznacza to, że formuła <math>\var\varphi</math> jest spełniona przez każde wartościowanie. Na koniec powiedzmy jeszcze, że formułami ''równoważnymi'' nazywamy takie formuły <math>\var\varphi</math> i <math>\psi</math>, których wartości przy każdym wartościowaniu są takie same (tj.&nbsp;takie, że&nbsp;równoważność <math>\var\varphi \leftrightarrow\psi</math> jest tautologią --- patrz niżej).




Linia 75: Linia 74:
{{definicja|1.3|kiedymogla|
{{definicja|1.3|kiedymogla|


Formuła <math>\var\varphi</math> jest ''spełnialna'', gdy <math>\varrho\models\var\varphi</math> zachodzi dla pewnego wartościowania&nbsp;<math>\rho</math>. Jeśli zaś <math>\models\var\varphi</math> to mówimy, że <math>\var\varphi</math> jest''tautologią'' (klasycznego) rachunku zdań. Oczywiście <math>\neg\var\varphi</math> jest spełnialna wtedy i tylko wtedy, gdy <math>\var\varphi</math> nie jest tautologią.}}
Formuła <math>\var\varphi</math> jest ''spełnialna'', gdy <math>\varrho\models\var\varphi</math> zachodzi dla pewnego wartościowania&nbsp;<math>\rho</math>. Jeśli zaś <math>\models\var\varphi</math>, to mówimy, że <math>\var\varphi</math> jest''tautologią'' (klasycznego) rachunku zdań. Oczywiście <math>\neg\var\varphi</math> jest spełnialna wtedy i tylko wtedy, gdy <math>\var\varphi</math> nie jest tautologią.}}




Linia 81: Linia 80:
===Tautologie rachunku zdań===
===Tautologie rachunku zdań===


Niech <math>S</math> będzie funkcją przypisujacą symbolom zdaniowym pewne formuły.Jeśli <math>\var\varphi</math> jest formułą zdaniową, to przez <math>S(\var\varphi)</math> oznaczymy formu\lę otrzymaną z <math>\var\varphi</math> przez jednoczesną zamianę każdego wystąpienia zmiennej zdaniowej <math>p</math> na formu\lę <math>S(p)</math>. Mówimy, że formuła <math>S(\var\varphi)</math> jest ''instancją'' schematu zdaniowego <math>\var\varphi</math>. Używamy oznaczenia <math>S(\Gamma) = \{S(\psi)\ |\ \psi\in\Gamma\}</math>.
Niech <math>S</math> będzie funkcją przypisujacą symbolom zdaniowym pewne formuły. Jeśli <math>\var\varphi</math> jest formułą zdaniową, to przez <math>S(\var\varphi)</math> oznaczymy formułę otrzymaną z <math>\var\varphi</math> przez jednoczesną zamianę każdego wystąpienia zmiennej zdaniowej <math>p</math> na formułę <math>S(p)</math>. Mówimy, że formuła <math>S(\var\varphi)</math> jest ''instancją'' schematu zdaniowego <math>\var\varphi</math>. Używamy oznaczenia <math>S(\Gamma) = \{S(\psi)\ |\ \psi\in\Gamma\}</math>.




Linia 97: Linia 96:




# <math> \bot\to p</math>;
# <math>\bot\to p</math>;
# <math>p\to(q\to p)</math>;
# <math>p\to(q\to p)</math>;
# <math>(p\to(q\to r))\to((p\to q)\to(p\to r))</math>;
# <math>(p\to(q\to r))\to((p\to q)\to(p\to r))</math>;
Linia 104: Linia 103:
# <math>p \to \neg\neg p</math>  oraz  <math>\neg\neg p \to p</math>;
# <math>p \to \neg\neg p</math>  oraz  <math>\neg\neg p \to p</math>;
# <math>(p\to q)\to(\neg q\to\neg p)</math>  oraz  <math>(\neg q\to\neg p)\to (p\to q)</math>;
# <math>(p\to q)\to(\neg q\to\neg p)</math>  oraz  <math>(\neg q\to\neg p)\to (p\to q)</math>;
# <math>p\to(p\vee q)</math>,  <math> q\to(p\vee q)</math>oraz  d <math>(p\to r)\to((q\to r)\to(p\vee q \to r))</math>;
# <math>p\to(p\vee q)</math>,  <math>q\to(p\vee q)</math> oraz  <math>(p\to r)\to((q\to r)\to(p\vee q \to r))</math>;
# <math>(p\wedge q)\to p</math>,<math>(p\wedge q)\to q</math>  oraz <math>(r\to p)\to((r\to q)\to(r\to(p\wedge q)))</math>;
# <math>(p\wedge q)\to p</math>, <math>(p\wedge q)\to q</math>  oraz <math>(r\to p)\to((r\to q)\to(r\to(p\wedge q)))</math>;
# <math>((p\wedge q)\to r)\leftrightarrow(p\to(q\to r))</math>;
# <math>((p\wedge q)\to r)\leftrightarrow(p\to(q\to r))</math>;
# <math>\neg(p\vee q) \leftrightarrow (\neg p\wedge \neg q)</math>;
# <math>\neg(p\vee q) \leftrightarrow (\neg p\wedge \neg q)</math>;
# <math>\neg(p\wedge q) \leftrightarrow (\neg p\vee \neg q)</math>;
# <math>\neg(p\wedge q) \leftrightarrow (\neg p\vee \neg q)</math>;
# <math>(p\to q)\oto (\neg p\vee q)</math>;
# <math>(p\to q)\leftrightarrow (\neg p\vee q)</math>;
# <math>((p\leftrightarrow q)\leftrightarrow r) \leftrightarrow (p\leftrightarrow(q\leftrightarrow r))</math>;
# <math>((p\leftrightarrow q)\leftrightarrow r) \leftrightarrow (p\leftrightarrow(q\leftrightarrow r))</math>;
# <math>p\vee\bot\oto p</math>  oraz <math>p\wedge\top\oto p</math>.  
# <math>p\vee\bot\leftrightarrow p</math>  oraz <math>p\wedge\top\leftrightarrow p</math>.  
}}
}}


Linia 119: Linia 118:
}}
}}


Niektóre z powyższych formuł wskazują na analogię pomiędzy implikacją iuporządkowaniem (np.&nbsp;zawieraniem zbiorów). Implikację< math>p\to q</math> można odczytać tak: "warunek <math>p</math> jest silniejszy (mniejszy lub równy) od <math>q</math>". Formułę (1) czytamy wtedy: "fałsz jest najsilniejszym warunkiem (najmniejszym elementem)". Formuły (8) stwierdzają, że alternatywa <math>p\vee q</math> jest najsilniejszym warunkiem, który wynika zarówno z <math>p</math> jak i z <math>q</math> (czyli jest kresem górnym pary <math>\{p,q\}</math>, jak suma zbiorów). Formuły (9) wyrażają dualną własność koniunkcji: to jest kres dolny, czyli najsłabszy warunek implikujący oba argumenty.Prawa de&nbsp;Morgana&nbsp;(11,12) wskazują też na analogie koniunkcja -- iloczyn, alternatywa -- suma, negacja -- dopełnienie. Ta ostatnia widoczna jest też w prawach wyłączonego środka&nbsp;(5), podwójnej negacji&nbsp;(6) i&nbsp;kontrapozycji&nbsp;(7).
Niektóre z powyższych formuł wskazują na analogię pomiędzy implikacją i uporządkowaniem (np.&nbsp;zawieraniem zbiorów). Implikację <math>p\to q</math> można odczytać tak: "warunek <math>p</math> jest silniejszy (mniejszy lub równy) od <math>q</math>". Formułę (1) czytamy wtedy: "fałsz jest najsilniejszym warunkiem (najmniejszym elementem)". Formuły (8) stwierdzają, że alternatywa <math>p\vee q</math> jest najsilniejszym warunkiem, który wynika zarówno z <math>p</math> jak i z <math>q</math> (czyli jest kresem górnym pary <math>\{p,q\}</math>, jak suma zbiorów). Formuły (9) wyrażają dualną własność koniunkcji: to jest kres dolny, czyli najsłabszy warunek implikujący oba argumenty.Prawa de&nbsp;Morgana&nbsp;(11,12) wskazują też na analogie koniunkcja -- iloczyn, alternatywa -- suma, negacja -- dopełnienie. Ta ostatnia widoczna jest też w prawach wyłączonego środka&nbsp;(5), podwójnej negacji&nbsp;(6) i&nbsp;kontrapozycji&nbsp;(7).


O ile&nbsp;(9) wskazuje na analogię pomiędzy koniunkcją i iloczynemmnogościowym, o tyle warto zauważyć, że koniunkcja ma teżwłasności podobne do iloczynu kartezjańskiego. Jeśli zbiór funkcjiz&nbsp;<math>A</math> do <math>B</math> oznaczymy przez <math>[A\to B]</math>, to mamy (bardzo naturalną)równoliczność <math>[A\times B\to C]\sim [A\to[B\to C]]</math>. Podobieństwo tego związku do formuły&nbsp;(10) nie jest wcale przypadkowe. Wrócimy do tego w Rozdziale&nbsp;[[Logika dla informatyków/Logika intuicjonistyczna|11]].  
O ile&nbsp;(9) wskazuje na analogię pomiędzy koniunkcją i iloczynem mnogościowym, o tyle warto zauważyć, że koniunkcja ma też własności podobne do iloczynu kartezjańskiego. Jeśli zbiór funkcji z&nbsp;<math>A</math> do <math>B</math> oznaczymy przez <math>[A\to B]</math>, to mamy (bardzo naturalną) równoliczność <math>[A\times B\to C]\sim [A\to[B\to C]]</math>. Podobieństwo tego związku do formuły&nbsp;(10) nie jest wcale przypadkowe. Wrócimy do tego w Rozdziale&nbsp;[[Logika dla informatyków/Logika intuicjonistyczna|11]].  


Formuła&nbsp;(12) wyraża implikację z pomocą negacji i alternatywy i jest często bardzo przydatna, gdy np. chcemy przekształcić jakąś formułę do prostszej postaci.  
Formuła&nbsp;(12) wyraża implikację z pomocą negacji i alternatywy i jest często bardzo przydatna, gdy np. chcemy przekształcić jakąś formułę do prostszej postaci.  


Formuła&nbsp;(2) mówi, że dodatkowe założenie można zawsze zignorować. Formuła&nbsp;(3) (prawo Frege) wyraża dystrybutywność implikacji względem siebie samej i może być odczytywana tak:jeśli <math>r</math> wynika z&nbsp;<math>q</math> w kontekście <math>p</math>, to ten kontekst może być włączony do założenia i&nbsp;konkluzji. Formuła&nbsp;(4) (prawo Peirce'a) wyraża przy pomocy samej implikacji zasadniczą własność logiki klasycznej: możliwość rozumowania przez zaprzeczenie. Sens prawa Peirce'a widać najlepiej gdy <math>q</math> jest fałszem, otrzymujemy wtedy prawo Claviusa: <math>(\neg p\to p)\to p</math>.  
Formuła&nbsp;(2) mówi, że dodatkowe założenie można zawsze zignorować. Formuła&nbsp;(3) (prawo Frege) wyraża dystrybutywność implikacji względem siebie samej i może być odczytywana tak: jeśli <math>r</math> wynika z&nbsp;<math>q</math> w kontekście <math>p</math>, to ten kontekst może być włączony do założenia i&nbsp;konkluzji. Formuła&nbsp;(4) (prawo Peirce'a) wyraża przy pomocy samej implikacji zasadniczą własność logiki klasycznej: możliwość rozumowania przez zaprzeczenie. Sens prawa Peirce'a widać najlepiej, gdy <math>q</math> jest fałszem, otrzymujemy wtedy prawo Claviusa: <math>(\neg p\to p)\to p</math>.  


Warto zauważyć, że formuły w parach&nbsp;(6) i&nbsp;(7) nie są wcale tak symetryczne jak się wydaje na pierwszy rzut oka. Na przykład, pierwsza z formuł&nbsp;(6) to w istocie <math>p \to ((p\to\bot)\to\bot)</math>.Wiedząc, że <math>p</math> i <math>p\to\bot</math>, natychmiast zgadzamy się na <math>\bot</math>. Intuicyjne uzasadnienie drugiej formuły jest zaś w istocie związane z prawem&nbsp;(5).  
Warto zauważyć, że formuły w parach&nbsp;(6) i&nbsp;(7) nie są wcale tak symetryczne jak się wydaje na pierwszy rzut oka. Na przykład, pierwsza z formuł&nbsp;(6) to w istocie <math>p \to ((p\to\bot)\to\bot)</math>. Wiedząc, że <math>p</math> i <math>p\to\bot</math>, natychmiast zgadzamy się na <math>\bot</math>. Intuicyjne uzasadnienie drugiej formuły jest zaś w istocie związane z prawem&nbsp; (5).  


Własnością, która często uchodzi naszej uwagi, jest łączność równoważności&nbsp;(13). W&nbsp;zwiazku z tym, wyrażenie <math>\var\varphi \leftrightarrow \psi \leftrightarrow \vartheta</math> można z czystym sumieniem pisać bez nawiasów. Zwróćmy jednak uwagę na to, że oznacza ono zupełnie co innego niż stwierdzenie że <math>\var\varphi</math>, <math>\psi</math> i <math>\vartheta</math> są sobie nawzajem równoważne!
Własnością, która często uchodzi naszej uwadze, jest łączność równoważności&nbsp;(13). W&nbsp;zwiazku z tym, wyrażenie <math>\var\varphi \leftrightarrow \psi \leftrightarrow \vartheta</math> można z czystym sumieniem pisać bez nawiasów. Zwróćmy jednak uwagę na to, że oznacza ono zupełnie co innego niż stwierdzenie, że <math>\var\varphi</math>, <math>\psi</math> i <math>\vartheta</math> są sobie nawzajem równoważne!


Ostatnie na liście są dwie równoważności wyrażające taką myśl: fałsz jest "elementem neutralnym" dla alternatywy, a prawda dla koniunkcji. Dlatego <math>\bot</math> możemyuważać za "pustą alternatywę" a <math>\top</math> za "pustą koniunkcję". Powyżej pominięto dobrze znane prawa: łączność i&nbsp;przemienność koniunkcji i&nbsp;alternatywy, ich wzajemną dystrybutywność, przechodniość,zwrotność implikacji itp.
Ostatnie na liście są dwie równoważności wyrażające taką myśl: fałsz jest "elementem neutralnym" dla alternatywy, a prawda dla koniunkcji. Dlatego <math>\bot</math> możemy uważać za "pustą alternatywę" a <math>\top</math> za "pustą koniunkcję". Powyżej pominięto dobrze znane prawa: łączność i&nbsp;przemienność koniunkcji i&nbsp;alternatywy, ich wzajemną dystrybutywność, przechodniość i zwrotność implikacji itp.


=== Postać normalna formuł===
=== Postać normalna formuł===
Linia 137: Linia 136:
{{definicja|1.6||
{{definicja|1.6||


Każdą zmienną zdaniową i negację zmiennej zdaniowej nazwijmy ''literałem''.Mówimy, że formuła zdaniowa <math>\var\varphi</math> jest w '' koniunkcyjnej postaci normalnej'', gdy  <math>\var\varphi</math> jest koniunkcją  alternatyw literałów, tj.
Każdą zmienną zdaniową i negację zmiennej zdaniowej nazwijmy ''literałem''. Mówimy, że formuła zdaniowa <math>\var\varphi</math> jest w ''koniunkcyjnej postaci normalnej'', gdy  <math>\var\varphi</math> jest koniunkcją  alternatyw literałów, tj.


<math>\var\varphi = (p^1_1\vee\cdots\vee p^{k_1}_1)\wedge\cdots\wedge(p^1_r\vee\cdots\vee p^{k_r}_r)</math>,  <ref name="pierwszy"> Ta procedura jest niestety wykładnicza [[Logika dla informatyków/Ćwiczenia 1#cwicz_8|(Ćwiczenie8)]]</ref>
<math>\var\varphi = (p^1_1\vee\cdots\vee p^{k_1}_1)\wedge\cdots\wedge(p^1_r\vee\cdots\vee p^{k_r}_r)</math>,&nbsp; &nbsp; &nbsp; &nbsp;  &nbsp;  &nbsp; &nbsp; (*)


gdzie <math>r\geq 0</math>, <math>k_i\geq 0</math>, dla <math>i=0,\ldots r</math>, a wszystkie <math>p^i_j</math> są literałami.Przy tym pustą koniunkcję (<math>r=0</math>)utożsamiamy w myśl Przykładu&nbsp;1.5 ze stałą&nbsp;<math>\top</math>, a stała <math>\bot</math> to tyle co koniunkcja z&nbsp;jednym pustym składnikiem.}}
gdzie <math>r\geq 0</math>, <math>k_i\geq 0</math>, dla <math>i=0,\ldots r</math>, a wszystkie <math>p^i_j</math> są literałami. Przy tym pustą koniunkcję (<math>r=0</math>) utożsamiamy w myśl [[#14|Przykładu&nbsp;1.5]] ze stałą&nbsp;<math>\top</math>, a stała <math>\bot</math> to tyle co koniunkcja z&nbsp;jednym pustym składnikiem.}}


{{fakt||pania|
{{fakt|1.7|fakt17|


Dla każdej formuły zdaniowej istnieje równoważna jej formuła w koniunkcyjnej postaci normalnej.}}


{{dowod|||


Dla każdej formuły zdaniowej istnieje równoważna jej formuław koniunkcyjnej postaci normalnej.}}{{dowod||
Dowód jest przez indukcję ze względu na długość formuły. Symbole zdaniowe są oczywiście w postaci normalnej. Zgodnie z naszą definicją, także stałe logiczne są postaciami normalnymi. Jeśli <math>\var\varphi</math> jest w&nbsp;postaci (*), to <math>\neg\var\varphi</math> można przekształcić w&nbsp;koniunkcyjną postać normalną, stosując prawa De&nbsp;Morgana i prawa dystrybutywności:
 
Dowód jest przez indukcję \zwn&nbsp;długość formuły. Symbole zdaniowe są oczywiście w postaci normalnej. Zgodnie z naszą definicją, także stałe logiczne są postaciami normalnymi. Jeśli <math>\var\varphi</math> jest w&nbsp;postaci (*), to <math>\neg\var\varphi</math>można przekształcić w&nbsp;koniunkcyjną postać normalną stosując prawa De&nbsp;Morgana i prawa dystrybutywności:
 
\hfil </math>\psi\vee(\vartheta\wedge\zeta)\\leftrightarrow(\psi\vee\vartheta)\wedge(\psi\vee\zeta)</math>\hfil</math>\psi\vee(\vartheta\vee\zeta)\\leftrightarrow(\psi\vee\vartheta)\vee(\psi\vee\zeta)</math>.
 
Podobnie postępujemy z alternatywą dwóch formuł w postaci normalnej.\footnote{Ta procedura jest niestetywykładnicza (Ćwiczenie&nbsp;[[#wziawszy}).]]Przypadek koniunkcji jest oczywisty, a \rightarrowlikacjęeliminujemy z pomocą prawa&nbsp;[[#taut-rz]]([[#12a]]). Szczegóły pozostawiamy Czytelnikowi.}}
 
\subsection*{Ćwiczenia}\begin{small}
##Zbadać, czy następujące formuły są tautologiami rachunku zdańi czy są spełnialne:
 
 
###<math>(p\to r)\wedge(q\to s)\wedge(\neg p\vee \neg s)\to (\neg p\vee \neg q)</math>;
###<math>(p\to q)\vee(q\to r)</math>;
###<math>((p\to q)\to r)\wedge\neg(((q\to r)\to r)\to r))</math>;
###<math>(p\to q)\wedge(\neg p\to r)\to (r\to\neg q)</math>;
###<math>((\neg p\to q)\to r)\to \neg(p\to q)</math>;
###<math>p\vee(\neg p\wedge q)\vee(\neg p\wedge\neg q)</math>;
###<math>(p\to q)\vee (p\to \neg q)</math>;
###<math>q\vee r\to (p\vee q\to p\vee r)</math>;
###</math>(p\vee q\vee r)\wedge(q\vee(\neg p\wedge s))\wedge (\neg s\vee q\vee r)\to q</math>.
 
 
 
 
 
#Czy następujące zbiory formuł są spełnialne?
##<math>\{p\to \neg q, q\to \neg r, r\to \neg p\}</math>;
##<math>\{p\to q, q\to r, r\vee s\leftrightarrow \neg q\}</math>;
##<math>\{\neg(\neg q\vee p), p\vee\neg r, q\to\neg r\}</math>;
##<math>\{s\to q, p\vee\neg q, \neg(s\wedge p), s\}</math>.
 
 
\item Czy zachodzą następujące konsekwencje?
#<math>p\wedge q\to\neg r, p\models r\to \neg q</math>;
#<math>p\to q, p\to(q\to r)\models p\to r</math>;
#<math>p\to(q\to r), p\to q\models q\to r</math>;
#<math>(p\to q)\to r, \neg p\models r</math>;
#<math>(p\to q)\to r, \neg r\models p</math>;
#<math>p\to q, r\to \neg q\models r\to\neg p</math>.
 
 
\item Dla dowolnej formuły <math>\var\varphi</math> niech <math>\hat{\var\varphi}</math> oznaczadualizację formuły <math>\var\varphi</math>, tzn. formułę powstającą z <math>\var\varphi </math>przez zastąpienie każdego wystąpienia <math>\wedge</math> symbolem <math>\vee</math> orazkażdego wystąpienia <math>\vee</math> symbolem <math>\wedge</math>. \begin{renumerate}\item Dowieść,że  <math>\var\varphi</math> jest tautologią wtw, gdy <math>\neg\hat{\var\varphi}</math>jest tautologią.\item Dowieść, że <math>\var\varphi\\leftrightarrow\psi</math> jest tautologią wtw, gdy <math>\hat{\var\varphi}\\leftrightarrow\hat{\psi}</math> jest tautologią.\end{renumerate}
 
\item Znależć formułę zdaniową&nbsp;<math>\var\varphi</math>, która jest spełniona dokładnieprzy wartościowaniach&nbsp;<math>\varrho</math> spełniających warunki:
#Dokładnie dwie spośród wartości <math>\varrho(p)</math>, <math>\varrho(q)</math> i <math>\varrho(r)</math> są równe&nbsp;1.
#<math>\varrho(p) = \varrho(q) \not= \varrho(r)</math>.
 
 
''Rozwiązanie:'' Można to robić na różne sposoby, ale najprościej po prostu wypisać alternatywę koniunkcji, np. </math>(p\wedge q\wedge \neg r)\vee(p \wedge\neg q \wedge r)</math>.
 
\item <span id="udacczleka" \> Udowodnić, że dla dowolnej funkcji <math>f:\{0,1\}^k\to\{0,1\}</math>istnieje formuła&nbsp;<math>\var\varphi</math>, w której występują tylko spójniki <math>\to</math> i <math>\bot</math>oraz zmienne zdaniowe ze zbioru <math>\{p_1,\ldots, p_k\}</math>, o tej własności, że dladowolnego wartościowania zdaniowego&nbsp;<math>\varrho</math> zachodzi równość<math>\wfz\var\varphi\varrho = f(\varrho(p_1),\ldots, \varrho(p_k))</math>. (Inaczej mówiąc, formuła&nbsp;<math>\var\varphi</math> definiuje funkcję zerojedynkową&nbsp;<math>f</math>.)
 
''Wskazówka:'' Indukcja \zwn&nbsp;<math>k</math>.
 
\item <span id="krecic" \> Niech <math>X</math> będzie dowolnym zbiorem niepustym. Dowolną funkcję <math>\warpi:\\mbox{\small ZZ}\to\pot X</math> nazwijmy ''wartościowaniem'' w&nbsp;zbiorze <math>\pot X</math>. Każdej formule zdaniowej&nbsp;<math>\var\varphi</math> przypiszemy teraz pewien podzbiór <math>\wfz\var\varphi\warpi</math> zbioru&nbsp;<math>X</math>, który nazwiemy jej ''wartością'' przy wartościowaniu&nbsp;<math>\warpi</math>.
*<math>\wfz\bot\warpi=\emptyset</math> oraz <math>\wfz\top\warpi=X</math>;
*<math>\wf\prooftree p \justifies \warpi \using \textrm{(W)}\endprooftree=\warpi(p)</math>, gdy <math>p</math> jest symbolem zdaniowym;
*<math>\wfz{\neg\var\varphi}\warpi= X-\wfz{\var\varphi}\warpi</math>;
*</math>\wf\prooftree \var\varphi\vee\psi \justifies \warpi \using \textrm{(W)}\endprooftree=\wf\prooftree \var\varphi \justifies \warpi \using \textrm{(W)}\endprooftree\cup\wf\prooftree \psi \justifies \warpi \using \textrm{(W)}\endprooftree</math>;
*</math>\wf\prooftree \var\varphi\wedge\psi \justifies \warpi \using \textrm{(W)}\endprooftree=\wf\prooftree \var\varphi \justifies \warpi \using \textrm{(W)}\endprooftree\cap\wf\prooftree \psi \justifies \warpi \using \textrm{(W)}\endprooftree</math>;
*</math>\wf\prooftree \var\varphi\to\psi \justifies \warpi}= (X-\wfz{\var\varphi \using \textrm{(W)}\endprooftree\warpi)\cup\wfz\psi\warpi</math>.
Udowodnić, że formuła <math>\var\varphi</math> jest tautologią rachunku zdań \wtw, gdy jest ''prawdziwa'' w&nbsp;<math>\pot X</math>, tj.&nbsp;gdy dla dowolnego <math>\warpi</math>jej wartością jest cały zbiór&nbsp;<math>X</math>.%%Rozwiazanie
 
\item <span id="wziawszy" \> Uzupełnić szczegóły dowodu Faktu&nbsp;[[#pania]].Pokazać, że długość postaci normalnej może wzrosnąć wykładniczo w stosunku do rozmiaru formuły początkowej.
 
\item Niech formuła <math>\var\varphi\to\psi</math> będzie tautologią rachunku zdań. Znaleźć taką formułę&nbsp;<math>\vartheta</math>, że:
*Zarówno <math>\var\varphi\to\vartheta</math> jak i <math>\vartheta\to\psi</math> są tautologiami rachunku zdań.
*W formule&nbsp;<math>\vartheta</math> występują tylko te zmienne zdaniowe,które występują zarówno w&nbsp;<math>\var\varphi</math> jak i&nbsp;w&nbsp;<math>\psi</math>.
<!--%% D. Niwinski-->
 
\item Niech <math>\var\varphi(p)</math> będzie pewną formułą, w którejwystępuje zmienna zdaniowa&nbsp;<math>p</math> i niech <math>q</math> będzie zmienną zdaniową niewystępującą w&nbsp;<math>\var\varphi(p)</math>. Przez&nbsp;<math>\var\varphi(q)</math> oznaczmy formułę powstałą z&nbsp;<math>\var\varphi(p)</math> przez zamianę wszystkich&nbsp;<math>p</math> na&nbsp;<math>q</math>. Udowodnić, że jeśli


\hfil <math>\var\varphi(p), \var\varphi(q) \models p\leftrightarrow q</math>\hfil
<math>\psi\vee(\vartheta\wedge\zeta)\leftrightarrow(\psi\vee\vartheta)\wedge(\psi\vee\zeta)</math> &nbsp; &nbsp;


to istnieje formuła&nbsp;<math>\psi</math>, nie zawierająca zmiennych&nbsp;<math>p</math> ani&nbsp;<math>q</math>,taka że
<math>\psi\vee(\vartheta\vee\zeta)\leftrightarrow(\psi\vee\vartheta)\vee(\psi\vee\zeta)</math>.


\hfil <math>\var\varphi(p)\models p\leftrightarrow\psi</math>.\hfil<!--%% D. Niwinski-->
Podobnie postępujemy z alternatywą dwóch formuł w postaci normalnej. <ref name="pierwszy"> Ta procedura jest niestety wykładnicza [[Logika dla informatyków/Ćwiczenia 1#cwicz_8|(Ćwiczenie 8)]].</ref> Przypadek koniunkcji jest oczywisty, a implikację eliminujemy z pomocą prawa 1.5 (13). Szczegóły pozostawiamy Czytelnikowi.}}


===Przypisy ===
===Przypisy ===
<references/>
<references/>

Aktualna wersja na dzień 10:27, 5 wrz 2023

Wnioskowanie o prawdziwości rozmaitych stwierdzeń jest powszednim zajęciem matematyków i nie tylko matematyków. Dlatego filozofowie i matematycy od dawna zajmowali się systematyzacją metod wnioskowania i kryteriów ich poprawności. Oczywiście ostatecznym kryterium poprawności rozumowania pozostaje zawsze zdrowy rozsądek i przekonanie o słuszności wywodu. Logika, która narodziła się jako nauka o rozumowaniu, jest jednak ważnym i potrzebnym narzędziem, które to przekonanie ułatwia.

Szczególną rolę wśród rozmaitych działów logiki zajmuje logika matematyczna, poświęcona opisowi i analizie języka matematyki oraz poprawności wnioskowań matematycznych. Jest to dyscyplina w pewnym sensie paradoksalna: będąc sama częścią matematyki, traktuje matematykę jako swój przedmiot zainteresowania. Dla uniknięcia "błędnego koła" musimy więc tutaj zauważyć, że logika formalna nie opisuje rzeczywistych wywodów matematyka, ale ich uproszczone modele, które bez zastrzeżeń można uważać za zwykłe obiekty matematyczne. Mimo tego ograniczenia, logika matematyczna dostarcza niezwykle ważnych wniosków o charakterze filozoficznym i metamatematycznym.

Logika formalna była kiedyś ezoteryczną nauką z pogranicza filozofii i matematyki, potem stała się pełnoprawnym działem czystej matematyki. Jeszcze później, wraz z narodzinami informatyki, zaczęła być coraz bardziej postrzegana jako dziedzina matematyki stosowanej, a zwłaszcza podstaw informatyki.

Logika matematyczna stosowana jest dziś szeroko w informatyce. Semantyka i weryfikacja programów, teoria złożoności i teoria automatów, programowanie funkcyjne i programowanie w logice --- to tylko niektóre z działów informatyki, w których metody logiki formalnej stały się standardowym narzędziem zarówno badacza, jak i praktyka.

Rachunek zdań

Jak powiedzieliśmy wyżej, logika matematyczna zajmuje się badaniem rozmaitych systemów formalnych, modelujących rzeczywiste sposoby wnioskowania matematycznego. Do najprostszych takich systemów należą różne warianty logiki zdaniowej zwanej też rachunkiem zdań. Język rachunku zdań jest bardzo prosty. Nie ma w nim wyrażeń stwierdzających jakiś stan rzeczy, zajście jakichś faktów, czy też wyrażeń orzekających o własnościach obiektów. Przedmiotem naszego zainteresowania są tu tylko możliwe zależności pomiędzy stwierdzeniami (zdaniami orzekającymi) oraz to w jaki sposób prawdziwość zdań złożonych zależy od prawdziwości ich składowych. Sens samych składowych pozostaje tu całkowicie dowolny i nieistotny. Dlatego w rachunku zdań odpowiadają im po prostu zmienne zdaniowe. Zdania złożone budujemy ze zmiennych za pomocąspójników logicznych, takich jak alternatywa  , koniunkcja  , negacja ¬, czy implikacja . Wygodne są też stałe logiczne   (fałsz) i  (prawda), które można uważać za zeroargumentowe spójniki logiczne. Dlatego nasza pierwsza definicja jest taka:

Definicja 1.1

Ustalamy pewien przeliczalnie nieskończony zbiór ZZ symboli, które będziemy nazywać zmiennymi zdaniowymi i zwykle oznaczać literami p, q, itp. Pojęcie formuły zdaniowej definiujemy przez indukcję:

  • Zmienne zdaniowe oraz i są formułami zdaniowymi;
  • Jeśli napis Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest formułą zdaniową, to także napis Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \neg\var\varphi} jest formułą zdaniową;
  • Jeśli napisy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} i ψ są formułami zdaniowymi, to napisy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\var\varphi\to\psi)} , Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\var\varphi\vee\psi)} i Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\var\varphi\wedge\psi)} też są formułami zdaniowymi.

Inaczej mówiąc, formuły zdaniowe to elementy najmniejszego zbioru napisów Parser nie mógł rozpoznać (błąd składni): {\displaystyle \\F_{{\sc Z}}} , zawierającego Parser nie mógł rozpoznać (nieznana funkcja „\small”): {\displaystyle \small ZZ\cup\{\bot,\top\}} i takiego, że dla dowolnych Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} ,ψ Parser nie mógł rozpoznać (błąd składni): {\displaystyle \\F_{{\sc Z}}} także Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \neg\var\varphi,(\var\varphi\to\psi),(\var\varphi\vee\psi), (\var\varphi\wedge\psi)} należą do Parser nie mógł rozpoznać (błąd składni): {\displaystyle \\F_{{\sc Z}}} .

Konwencje notacyjne: Dla pełnej jednoznaczności składni nasze formuły są w pełni nawiasowane. W praktyce wiele nawiasów pomijamy, stosując przy tym następujące priorytety:

  1. Negacja;
  1. Koniunkcja i alternatywa;
  1. Implikacja.

Zatem na przykład wyrażenie Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \neg\var\varphi\vee\psi\to\vartheta} oznacza Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle ((\neg\var\varphi\vee\psi)\to\vartheta)} , ale napis Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi\vee\psi\wedge \vartheta} jest niepoprawny.

Znaczenie formuł

W logice klasycznej interpretacja formuły jest wartość logiczna tj. "prawda" (1) lub "fałsz" (0). Aby określić wartość formuły zdaniowej, trzeba jednak najpierw ustalić wartości zmiennych.

Definicja 1.2

Przez wartościowanie zdaniowe rozumiemy dowolną funkcję ϱ, która zmiennym zdaniowym przypisuje wartości logiczne 0 lub 1. Wartość formuły zdaniowej Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} przy wartościowaniu ϱ oznaczamy przez Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \wfz\var[[\varphi]]\varrho} i określamy przez indukcję:

  • Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \wfz[[\bot]]\varrho=0} oraz Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \wfz[[\top]]\varrho=1} ;
  • [[p]]ϱ=ϱ(p), gdy p jest symbolem zdaniowym;
  • Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \wfz[[{\neg\var\varphi}]]\varrho=1-\wfz{[[\var\varphi]]}\varrho} ;
  • Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle [[\var\varphi\vee\psi]]\varrho=\max\{\wf[[\var\varphi]]\varrho,\[[\psi]] \varrho\}} ;
  • Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle [[\var\varphi\wedge\psi]]\varrho=\min\{\wf[[\var\varphi]]\varrho,\[[\psi]] \varrho\}} ;
  • Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle [[\var\varphi\to\psi]]\varrho =0} , gdy Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \wfz\var[[\varphi]]\varrho=1} i Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \wfz[[\psi]]\varrho=0} ;
  • Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle [[\var\varphi\to\psi]]\varrho =1} , w przeciwnym wypadku.

Łatwo zauważyć, że Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle [[\var\varphi\to\psi]]\varrho = \max\{\wfz[[\psi]]\varrho,1-\wfz\var[[\varphi]]\varrho\}} , czyli Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle [[\var\varphi\to\psi]]\varrho=[[\neg\var\varphi\vee\psi]]\varrho} dla dowolnego ϱ. A zatem zamiast formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi\to\psi} moglibyśmy z równym powodzeniem używać wyrażenia Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \neg\var\varphi\vee\psi} , lub też odwrotnie: zamiast alternatywy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi\vee\psi} pisać Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \neg\var\varphi\to\psi} . Nasz wybór spójników nie jest więc "najoszczędniejszy", w istocie w logice klasycznej wystarczy używać np. implikacji i fałszu (ćwiczenie 6). Czasem i my będziemy korzystać z tego wygodnego uproszczenia, przyjmując, że "oficjalnymi" spójnikami są tylko implikacja i fałsz, a pozostałe to skróty notacyjne, tj. że napisy

Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \neg\var\varphi} oznaczają odpowiednio Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi\to\bot} ;
  ¬;
Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi\vee\psi}   Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \neg\var\varphi\to\psi} ;
Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi\wedge\psi}   Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \neg(\var\varphi\to\neg\psi)} .

Będziemy też czasem pisać Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi \leftrightarrow\psi} zamiast Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle (\var\varphi\to\psi)\wedge(\psi\to\var\varphi)} . Zauważmy, że Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle [[\var\varphi\leftrightarrow\psi]]\varrho=1} wtedy i tylko wtedy, gdy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle [[\var\varphi\to\psi]]\varrho=[[\psi\to\var\varphi]]\varrho} .

Często stosowanym skrótem jest notacja Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \bigvee_{i\in I}\var\varphi_i} , oznaczająca alternatywę wszystkich formuł Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi_i} , gdzie i przebiega skończony zbiór I. Analogicznie stosuje się zapis Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \bigwedge_{i\in I}\var\varphi_i} .


Notacja i terminologia: Jeśli Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle [[\var\varphi]]\varrho=1} , to piszemy też Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \varrho\models\var\varphi} lub Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \models\var\varphi[\varrho]} i mówimy, że Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest spełniona przez wartościowanie ϱ. Jeśli Γ jest zbiorem formuł zdaniowych oraz ϱγ dla wszystkich γΓ, to piszemy ϱΓ. Wreszcie Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \Gamma\models\var\varphi} oznacza, że każde wartościowanie spełniające wszystkie formuły z Γ spełnia także formułę Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} . Mówimy wtedy, że Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest semantyczną konsekwencją zbioru Γ. Jeśli Γ=, to zamiast Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \Gamma\models\var\varphi} piszemy po prostu Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \models\var\varphi} . Oznacza to, że formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest spełniona przez każde wartościowanie. Na koniec powiedzmy jeszcze, że formułami równoważnymi nazywamy takie formuły Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} i ψ, których wartości przy każdym wartościowaniu są takie same (tj. takie, że równoważność Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi \leftrightarrow\psi} jest tautologią --- patrz niżej).


Definicja 1.3

Formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest spełnialna, gdy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \varrho\models\var\varphi} zachodzi dla pewnego wartościowania ρ. Jeśli zaś Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \models\var\varphi} , to mówimy, że Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jesttautologią (klasycznego) rachunku zdań. Oczywiście Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \neg\var\varphi} jest spełnialna wtedy i tylko wtedy, gdy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} nie jest tautologią.


Tautologie rachunku zdań

Niech S będzie funkcją przypisujacą symbolom zdaniowym pewne formuły. Jeśli Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest formułą zdaniową, to przez Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle S(\var\varphi)} oznaczymy formułę otrzymaną z Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} przez jednoczesną zamianę każdego wystąpienia zmiennej zdaniowej p na formułę S(p). Mówimy, że formuła Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle S(\var\varphi)} jest instancją schematu zdaniowego Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} . Używamy oznaczenia S(Γ)={S(ψ) | ψΓ}.


Fakt 1.4

Jeżeli Γ jest zbiorem formuł rachunku zdań i Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \Gamma\models\var\varphi} , to także Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle S(\Gamma)\models S(\var\varphi)} . W szczególności, jeśli Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest tautologią to Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle S(\var\varphi)} jest też tautologią.

Dowód

Ćwiczenie.

Przykład 1.5

Następujące formuły (i wszystkie ich instancje) są tautologiami rachunku zdań:


  1. p;
  2. p(qp);
  3. (p(qr))((pq)(pr));
  4. ((pq)p)p;
  5. p¬p;
  6. p¬¬p oraz ¬¬pp;
  7. (pq)(¬q¬p) oraz (¬q¬p)(pq);
  8. p(pq), q(pq) oraz (pr)((qr)(pqr));
  9. (pq)p, (pq)q oraz (rp)((rq)(r(pq)));
  10. ((pq)r)(p(qr));
  11. ¬(pq)(¬p¬q);
  12. ¬(pq)(¬p¬q);
  13. (pq)(¬pq);
  14. ((pq)r)(p(qr));
  15. pp oraz pp.


Dowód

Łatwy.

Niektóre z powyższych formuł wskazują na analogię pomiędzy implikacją i uporządkowaniem (np. zawieraniem zbiorów). Implikację pq można odczytać tak: "warunek p jest silniejszy (mniejszy lub równy) od q". Formułę (1) czytamy wtedy: "fałsz jest najsilniejszym warunkiem (najmniejszym elementem)". Formuły (8) stwierdzają, że alternatywa pq jest najsilniejszym warunkiem, który wynika zarówno z p jak i z q (czyli jest kresem górnym pary {p,q}, jak suma zbiorów). Formuły (9) wyrażają dualną własność koniunkcji: to jest kres dolny, czyli najsłabszy warunek implikujący oba argumenty.Prawa de Morgana (11,12) wskazują też na analogie koniunkcja -- iloczyn, alternatywa -- suma, negacja -- dopełnienie. Ta ostatnia widoczna jest też w prawach wyłączonego środka (5), podwójnej negacji (6) i kontrapozycji (7).

O ile (9) wskazuje na analogię pomiędzy koniunkcją i iloczynem mnogościowym, o tyle warto zauważyć, że koniunkcja ma też własności podobne do iloczynu kartezjańskiego. Jeśli zbiór funkcji z A do B oznaczymy przez [AB], to mamy (bardzo naturalną) równoliczność [A×BC][A[BC]]. Podobieństwo tego związku do formuły (10) nie jest wcale przypadkowe. Wrócimy do tego w Rozdziale 11.

Formuła (12) wyraża implikację z pomocą negacji i alternatywy i jest często bardzo przydatna, gdy np. chcemy przekształcić jakąś formułę do prostszej postaci.

Formuła (2) mówi, że dodatkowe założenie można zawsze zignorować. Formuła (3) (prawo Frege) wyraża dystrybutywność implikacji względem siebie samej i może być odczytywana tak: jeśli r wynika z q w kontekście p, to ten kontekst może być włączony do założenia i konkluzji. Formuła (4) (prawo Peirce'a) wyraża przy pomocy samej implikacji zasadniczą własność logiki klasycznej: możliwość rozumowania przez zaprzeczenie. Sens prawa Peirce'a widać najlepiej, gdy q jest fałszem, otrzymujemy wtedy prawo Claviusa: (¬pp)p.

Warto zauważyć, że formuły w parach (6) i (7) nie są wcale tak symetryczne jak się wydaje na pierwszy rzut oka. Na przykład, pierwsza z formuł (6) to w istocie p((p)). Wiedząc, że p i p, natychmiast zgadzamy się na . Intuicyjne uzasadnienie drugiej formuły jest zaś w istocie związane z prawem  (5).

Własnością, która często uchodzi naszej uwadze, jest łączność równoważności (13). W zwiazku z tym, wyrażenie Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi \leftrightarrow \psi \leftrightarrow \vartheta} można z czystym sumieniem pisać bez nawiasów. Zwróćmy jednak uwagę na to, że oznacza ono zupełnie co innego niż stwierdzenie, że Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} , ψ i ϑ są sobie nawzajem równoważne!

Ostatnie na liście są dwie równoważności wyrażające taką myśl: fałsz jest "elementem neutralnym" dla alternatywy, a prawda dla koniunkcji. Dlatego możemy uważać za "pustą alternatywę" a za "pustą koniunkcję". Powyżej pominięto dobrze znane prawa: łączność i przemienność koniunkcji i alternatywy, ich wzajemną dystrybutywność, przechodniość i zwrotność implikacji itp.

Postać normalna formuł

Definicja 1.6

Każdą zmienną zdaniową i negację zmiennej zdaniowej nazwijmy literałem. Mówimy, że formuła zdaniowa Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest w koniunkcyjnej postaci normalnej, gdy Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi} jest koniunkcją alternatyw literałów, tj.

Parser nie mógł rozpoznać (nieznana funkcja „\var”): {\displaystyle \var\varphi = (p^1_1\vee\cdots\vee p^{k_1}_1)\wedge\cdots\wedge(p^1_r\vee\cdots\vee p^{k_r}_r)} ,              (*)

gdzie r0, ki0, dla i=0,r, a wszystkie pji są literałami. Przy tym pustą koniunkcję (r=0) utożsamiamy w myśl Przykładu 1.5 ze stałą , a stała to tyle co koniunkcja z jednym pustym składnikiem.

Fakt 1.7

Dla każdej formuły zdaniowej istnieje równoważna jej formuła w koniunkcyjnej postaci normalnej.

Dowód

{{{3}}}

Przypisy

<references/>