Logika dla informatyków/Logika intuicjonistyczna: Różnice pomiędzy wersjami
m Zastępowanie tekstu – „\</math>” na „\ </math>” |
|||
(Nie pokazano 8 wersji utworzonych przez 3 użytkowników) | |||
Linia 11: | Linia 11: | ||
przesłanką i konkluzją [[Logika dla informatyków/Logika pierwszego rzędu. Sposób użycia#rozdz3.1|(Rozdział 3.1)]]. Inną konsekwencją | przesłanką i konkluzją [[Logika dla informatyków/Logika pierwszego rzędu. Sposób użycia#rozdz3.1|(Rozdział 3.1)]]. Inną konsekwencją | ||
dwuwartościowości logiki klasycznej jest prawo wyłączonego środka. | dwuwartościowości logiki klasycznej jest prawo wyłączonego środka. | ||
Akceptujemy alternatywę <math> | Akceptujemy alternatywę <math>p\vee\neg p</math>, niezależnie od tego czy zdanie <math>p</math> | ||
jest faktycznie prawdziwe czy fałszywe, a nawet nie wiedząc, co dokładnie | jest faktycznie prawdziwe czy fałszywe, a nawet nie wiedząc, co dokładnie | ||
to zdanie wyraża. Zilustrujmy to na przykładzie: | to zdanie wyraża. Zilustrujmy to na przykładzie: | ||
Linia 17: | Linia 17: | ||
{{fakt|11.1|| | {{fakt|11.1|| | ||
Istnieją takie liczby niewymierne <math> | Istnieją takie liczby niewymierne <math>x</math> i <math>y</math>, że <math>x^y</math> jest liczbą wymierną. | ||
}} | }} | ||
{{dowod||| | {{dowod||| | ||
Jeśli <math> | Jeśli <math>\sqrt{2}^{\sqrt{2}}</math> jest wymierne, to można przyjąć | ||
<math> | <math>x=y=\sqrt{2}</math>, w przeciwnym przypadku niech <math>x=\sqrt{2}^{\sqrt{2}}</math> i <math>y = \sqrt{2}</math>. | ||
}} | }} | ||
Linia 31: | Linia 31: | ||
{{dowod|2|| | {{dowod|2|| | ||
Dla <math> | Dla <math>x=\sqrt{2}</math> oraz <math>y=2\log_2 3</math> mamy <math>x^y = 3</math>. | ||
}} | }} | ||
Linia 49: | Linia 49: | ||
* Konstrukcja dla <math> | * Konstrukcja dla <math>\varphi\wedge\psi</math> polega na podaniu konstrukcji dla <math>\varphi</math> i konstrukcji dla <math>\psi</math>; | ||
* Konstrukcja dla <math> | * Konstrukcja dla <math>\varphi\vee\psi</math> polega na wskazaniu jednego ze składników <math>\varphi</math>, <math>\psi</math> i podaniu konstrukcji dla tego składnika. | ||
* Konstrukcja dla implikacji <math> | * Konstrukcja dla implikacji <math>\varphi\to\psi</math> to metoda (funkcja) przekształcająca każdą konstrukcję przesłanki <math>\varphi</math> w konstrukcję dla konkluzji <math>\psi</math>. | ||
* Nie ma konstrukcji dla fałszu <math> | * Nie ma konstrukcji dla fałszu <math>\bot</math>. | ||
* Konstrukcja dla <math> | * Konstrukcja dla <math>\forall x\,\varphi(x)</math> to metoda, która każdej potencjalnej wartości <math>a</math> zmiennej <math>x</math> przypisuje konstrukcję dla <math>\varphi(a)</math>. | ||
* Konstrukcja dla <math> | * Konstrukcja dla <math>\exists x\,\varphi(x)</math> polega na wskazaniu pewnej wartości <math>a</math> zmiennej <math>x</math>, oraz konstrukcji dla <math>\varphi(a)</math>. | ||
Negacja intuicjonistyczna <math> | Negacja intuicjonistyczna <math>\neg\varphi</math> utożsamiana jest z implikacją | ||
<math> | <math>\varphi\to\bot</math>. A zatem | ||
* Konstrukcja dla <math> | * Konstrukcja dla <math>\neg\varphi</math> to metoda obracająca każdą ewentualną konstrukcję <math>\varphi</math> w absurd ("rzecz, której nie ma"). | ||
Nie od rzeczy jest tu nastepująca uwaga: o konstrukcji | Nie od rzeczy jest tu nastepująca uwaga: o konstrukcji | ||
dla <math> | dla <math>\varphi\to\psi</math> można myśleć jak o funkcji ''typu'' <math>\varphi\to\psi</math>, | ||
bo przecież konstrukcjom dla <math> | bo przecież konstrukcjom dla <math>\varphi</math> (obiektom "typu <math>\varphi</math>") | ||
przypisuje ona konstrukcje dla <math> | przypisuje ona konstrukcje dla <math>\psi</math>, czyli obiekty "typu <math>\psi</math>". | ||
Za chwilę wrócimy do tej analogii. | Za chwilę wrócimy do tej analogii. | ||
{{przyklad|11.2|| | {{przyklad|11.2|| | ||
Konstrukcję dla formuły <math> | Konstrukcję dla formuły <math>p\to\neg\neg p</math> możemy zapisać tak: | ||
Przypuśćmy, że dana jest konstrukcja <math> | Przypuśćmy, że dana jest konstrukcja <math>C</math> dla przesłanki <math>p</math>. Wtedy konstrukcja dla konkluzji <math>\neg\neg p</math> (czyli dla <math>(p\to\bot)\to\bot</math>) jest następująca: daną konstrukcję dla formuły <math>p\to\bot</math> należy zastosować do <math>C</math>. | ||
Próba podania konstrukcji dla implikacji odwrotnej <math> | Próba podania konstrukcji dla implikacji odwrotnej <math>\neg\neg p\to p</math> | ||
natrafia jednak na nieprzezwyciężalną trudność. Aby wykorzystać daną konstrukcję dla <math> | natrafia jednak na nieprzezwyciężalną trudność. Aby wykorzystać daną konstrukcję dla <math>(p\to\bot)\to\bot</math>, musielibyśmy mieć konstrukcję dla <math>p\to\bot</math>, a skoro jej nie mamy, to założenie jest bezużyteczne. | ||
Niemożliwe jest też wskazanie konstrukcji dla schematu <math> | Niemożliwe jest też wskazanie konstrukcji dla schematu <math>p\vee\neg p</math>, | ||
nie znając <math> | nie znając <math>p</math> nie możemy bowiem wskazać żadnego z członów alternatywy. | ||
Podobnie będzie na przykład z implikacją <math> | Podobnie będzie na przykład z implikacją <math>\forall x(q\vee p(x))\to | ||
q\vee \forall x\,p(x)</math>. | q\vee \forall x\,p(x)</math>. | ||
Konstrukcja przesłanki dla każdej wartości <math> | Konstrukcja przesłanki dla każdej wartości <math>a</math> zmiennej <math>x</math> | ||
generuje albo konstrukcję dla <math> | generuje albo konstrukcję dla <math>q</math> albo konstrukcję dla <math>p(a)</math>. | ||
Ale skorzystać z niej można tylko dla konkretnych wartości <math> | Ale skorzystać z niej można tylko dla konkretnych wartości <math>a</math>. | ||
Tymczasem, aby podać konstrukcję dla konkluzji, musielibyśmy umieć | Tymczasem, aby podać konstrukcję dla konkluzji, musielibyśmy umieć | ||
podjąć krytyczną decyzję "w ciemno". | podjąć krytyczną decyzję "w ciemno". | ||
Linia 97: | Linia 97: | ||
System naturalnej dedukcji dla takiego rachunku, przedstawiony poniżej | System naturalnej dedukcji dla takiego rachunku, przedstawiony poniżej | ||
można uważać za uściślenie interpretacji BHK. Otrzymujemy go z systemu | można uważać za uściślenie interpretacji BHK. Otrzymujemy go z systemu | ||
klasycznego [[Logika dla informatyków/Paradygmaty dowodzenia#sekcja5.2|(Sekcja 5.2)]] przez odrzucenie reguły PS.<ref name="czternascie">Robimy to, zauważając z pewną satysfakcją, że właśnie ta reguła "nie pasuje" do pozostałych, bo odbiega swoją formą od zasady wprowadzania i eliminacji spójników.</ref> | klasycznego [[Logika dla informatyków/Paradygmaty dowodzenia#sekcja5.2|(Sekcja 5.2)]] przez odrzucenie reguły PS.<ref name="czternascie"> Robimy to, zauważając z pewną satysfakcją, że właśnie ta reguła "nie pasuje" do pozostałych, bo odbiega swoją formą od zasady wprowadzania i eliminacji spójników.</ref> | ||
<center><math> | <center><math>(\to</math> -intro <math>) \hspace{.2cm} | ||
\frac{\Delta,\varphi\vdash\psi}{\Delta\vdash\varphi\to\psi} | \frac{\Delta,\varphi\vdash\psi}{\Delta\vdash\varphi\to\psi} | ||
\hspace{1cm} (\to </math> -elim <math> | \hspace{1cm} (\to</math> -elim <math>) \hspace{.2cm} | ||
\frac{\Delta\vdash\varphi\to\psi\qquad | \frac{\Delta\vdash\varphi\to\psi\qquad | ||
\Delta\vdash\varphi}{\Delta\vdash\psi}</math></center> | \Delta\vdash\varphi}{\Delta\vdash\psi}</math></center> | ||
<center><math> | <center><math>(\wedge</math> -intro <math>)\hspace{.2cm} \frac{\Delta\vdash\varphi\qquad | ||
\Delta\vdash\psi}{\Delta\vdash\varphi\wedge\psi} \hspace{1cm} | \Delta\vdash\psi}{\Delta\vdash\varphi\wedge\psi} \hspace{1cm} | ||
(\wedge </math> -elim <math> | (\wedge</math> -elim <math>) | ||
\hspace{.2cm}\frac{\Delta\vdash\varphi\wedge\psi}{\Delta\vdash\varphi} | \hspace{.2cm}\frac{\Delta\vdash\varphi\wedge\psi}{\Delta\vdash\varphi} | ||
\hspace{1cm} | \hspace{1cm} | ||
(\wedge </math> -elim <math> | (\wedge</math> -elim <math>) | ||
\hspace{.2cm}\frac{\Delta\vdash\varphi\wedge\psi}{\Delta\vdash\psi}</math></center> | \hspace{.2cm}\frac{\Delta\vdash\varphi\wedge\psi}{\Delta\vdash\psi}</math></center> | ||
<center><math> | <center><math>(\vee</math> -intro <math>)\hspace{.2cm} | ||
\frac{\Delta\vdash\varphi}{\Delta\vdash\varphi\vee\psi} \hspace{1cm} | \frac{\Delta\vdash\varphi}{\Delta\vdash\varphi\vee\psi} \hspace{1cm} | ||
(\vee </math> -intro <math> | (\vee</math> -intro <math>)\hspace{.2cm} | ||
\frac{\Delta\vdash\psi}{\Delta\vdash\varphi\vee\psi} </math></center> | \frac{\Delta\vdash\psi}{\Delta\vdash\varphi\vee\psi}</math></center> | ||
<center><math> | <center><math>(\vee</math> -elim <math>)\hspace{.2cm} \frac{\Delta\vdash\varphi\vee\psi\qquad | ||
\Delta,\varphi\vdash\vartheta\qquad | \Delta,\varphi\vdash\vartheta\qquad | ||
\Delta,\psi\vdash\vartheta}{\Delta\vdash\vartheta}</math></center> | \Delta,\psi\vdash\vartheta}{\Delta\vdash\vartheta}</math></center> | ||
Linia 129: | Linia 129: | ||
[[Logika dla informatyków/Paradygmaty dowodzenia#sekcja5.3|(Sekcja 5.3)]] można otrzymać system dla logiki intuicjonistycznej. Otóż należy w tym celu ograniczyć liczbę formuł występujących po | [[Logika dla informatyków/Paradygmaty dowodzenia#sekcja5.3|(Sekcja 5.3)]] można otrzymać system dla logiki intuicjonistycznej. Otóż należy w tym celu ograniczyć liczbę formuł występujących po | ||
prawej stronie sekwentów do (co najwyżej) jednej, przy czym sekwent | prawej stronie sekwentów do (co najwyżej) jednej, przy czym sekwent | ||
<math> | <math>\Gamma\vdash\ </math> z pustą prawą stroną można utożsamiać z sekwentem | ||
<math> | <math>\Gamma\vdash\bot</math>. Reguła <math>(\vee</math> -prawa <math>)</math> traci wtedy sens i trzeba ją zastąpić przez dwie reguły podobne do tych z [[Logika dla informatyków/Ćwiczenia 5#k|Ćwiczenia 11 w Rozdziale 5]]. Pozostałe reguły pozostają w zasadzie bez zmian. | ||
<center><math> | <center><math>(\to</math> -lewa <math>)\hspace{.2cm} \frac{\Delta\vdash\varphi\hspace{1cm} | ||
\Delta,\psi\vdash\vartheta}{\Delta,\varphi\to\psi\vdash\vartheta} | \Delta,\psi\vdash\vartheta}{\Delta,\varphi\to\psi\vdash\vartheta} | ||
\hspace{1cm}(\to </math> -prawa <math> | \hspace{1cm}(\to</math> -prawa <math>)\hspace{.2cm} | ||
\frac{\Delta,\varphi\vdash\psi}{\Delta\vdash\varphi\to\psi}</math></center> | \frac{\Delta,\varphi\vdash\psi}{\Delta\vdash\varphi\to\psi}</math></center> | ||
<center><math> | <center><math>(\wedge</math> -lewa <math>)\hspace{.2cm} | ||
\frac{\Delta,\varphi,\psi\vdash\vartheta}{\Delta,\varphi\wedge\psi\vdash\vartheta} | \frac{\Delta,\varphi,\psi\vdash\vartheta}{\Delta,\varphi\wedge\psi\vdash\vartheta} | ||
\hspace{1cm} (\wedge </math> -prawa <math> | \hspace{1cm} (\wedge</math> -prawa <math>)\hspace{.2cm} | ||
\frac{\Delta\vdash \varphi\hspace{1cm} | \frac{\Delta\vdash \varphi\hspace{1cm} | ||
\Delta\vdash\psi}{\Delta\vdash\varphi\wedge\psi}</math></center> | \Delta\vdash\psi}{\Delta\vdash\varphi\wedge\psi}</math></center> | ||
<center><math> | <center><math>(\vee</math> -lewa <math>)\hspace{.2cm} \frac{\Delta, | ||
\varphi\vdash\vartheta\hspace{1cm} | \varphi\vdash\vartheta\hspace{1cm} | ||
\Delta,\psi\vdash\vartheta}{\Delta, \varphi\vee\psi \vdash\vartheta} | \Delta,\psi\vdash\vartheta}{\Delta, \varphi\vee\psi \vdash\vartheta} | ||
\hspace{1cm} \frac{\Delta\vdash \varphi}{\Delta\vdash | \hspace{1cm} \frac{\Delta\vdash \varphi}{\Delta\vdash | ||
\varphi\vee\psi}\hspace{.2cm}(\vee </math> -prawa <math> | \varphi\vee\psi}\hspace{.2cm}(\vee</math> -prawa <math>)\hspace{.2cm} | ||
\frac{\Delta\vdash \psi}{\Delta\vdash | \frac{\Delta\vdash \psi}{\Delta\vdash | ||
\varphi\vee\psi}</math></center> | \varphi\vee\psi}</math></center> | ||
Linia 156: | Linia 156: | ||
Intuicjonistyczny system dowodzenia w stylu Hilberta dla logiki | Intuicjonistyczny system dowodzenia w stylu Hilberta dla logiki | ||
zdaniowej, w której występuje tylko implikacja i fałsz, a negacja <math> | zdaniowej, w której występuje tylko implikacja i fałsz, a negacja <math>\neg\varphi</math> | ||
jest zdefiniowana jako <math> | jest zdefiniowana jako <math>\varphi\to\bot</math>, otrzymamy | ||
bardzo łatwo: wystarczy usunąć aksjomat <math> | bardzo łatwo: wystarczy usunąć aksjomat <math>\neg\neg\varphi\to\varphi</math> | ||
z systemu klasycznego i dodać jeden nowy: | z systemu klasycznego i dodać jeden nowy: | ||
<math>(A3i)\;\; | <math>(A3i)\;\;\bot\to\varphi</math>. | ||
Ale aksjomaty (B1)-(B4) z [[Logika dla informatyków/Paradygmaty dowodzenia|Rozdziału 5]] | Ale aksjomaty (B1)-(B4) z [[Logika dla informatyków/Paradygmaty dowodzenia|Rozdziału 5]] | ||
Linia 167: | Linia 167: | ||
definiować koniunkcję i alternatywę, wyrażają ich najważniejsze własności. | definiować koniunkcję i alternatywę, wyrażają ich najważniejsze własności. | ||
<math>(D1)\;\; | <math>(D1)\;\;\varphi\to\varphi\vee \psi</math>; | ||
<math>(D2)\;\; | <math>(D2)\;\;\psi\to\varphi\vee \psi</math>; | ||
<math>(D3)\;\; | <math>(D3)\;\;(\varphi\to \vartheta)\wedge(\psi\to \vartheta) | ||
\to(\varphi\vee \psi \to \vartheta)</math>; | \to(\varphi\vee \psi \to \vartheta)</math>; | ||
<math>(C1)\;\; | <math>(C1)\;\;\varphi\wedge \psi\to \varphi</math>; | ||
<math>(C2)\;\; | <math>(C2)\;\;\varphi\wedge \psi\to \psi</math>; | ||
<math>(C3)\;\; | <math>(C3)\;\;(\vartheta\to \varphi)\wedge(\vartheta\to \psi)\to | ||
(\vartheta\to\varphi\wedge \psi)</math>. | (\vartheta\to\varphi\wedge \psi)</math>. | ||
Linia 185: | Linia 185: | ||
Opisane powyżej intuicjonistyczne systemy dowodzenia (naturalna dedukcja, | Opisane powyżej intuicjonistyczne systemy dowodzenia (naturalna dedukcja, | ||
rachunek sekwentów oraz system Hilberta) są sobie równoważne: formuła | rachunek sekwentów oraz system Hilberta) są sobie równoważne: formuła | ||
<math> | <math>\varphi</math> jest twierdzeniem dowolnego z tych systemów , gdy jest | ||
twierdzeniem każdego z pozostałych. | twierdzeniem każdego z pozostałych. | ||
}} | }} | ||
Linia 202: | Linia 202: | ||
{{definicja|11.4|| | {{definicja|11.4|| | ||
Niech <math> | Niech <math>\mathcal{O}</math> będzie rodziną wszystkich podzbiorów otwartych zbioru liczb rzeczywistych <math>\mathbb{R}</math>. Dla <math>A\subseteq\mathbb{R}</math>, przez <math>{\rm Int}(A)</math> oznaczymy | ||
''wnętrze'' zbioru <math> | ''wnętrze'' zbioru <math>A</math>, tj. największy zbiór otwarty zawarty w <math>A</math>. | ||
''Wartościowaniem'' w zbiorze <math> | ''Wartościowaniem'' w zbiorze <math>\mathcal{O}</math> nazwiemy | ||
dowolną funkcję <math> | dowolną funkcję <math>\varrho:ZZ\to\mathcal{O}</math>. Dla danego <math>\varrho</math>, możemy każdej formule zdaniowej przypisać wartość w <math>\mathcal{O}</math>: | ||
* <math> | * <math>\left\Vert\bot\right\Vert_\varrho=\emptyset</math> oraz <math>\left\Vert\top\right\Vert_\varrho=\mathbb{R}</math>; | ||
* <math> | * <math>\left\Vert p\right\Vert_\varrho=\varrho(p)</math>, gdy <math>p</math> jest symbolem zdaniowym; | ||
* <math> | * <math>\left\Vert\neg\varphi\right\Vert_\varrho= {\rm Int}(\mathbb{R}-\left\Vert\varphi\right\Vert_\varrho)</math>; | ||
* <math> | * <math>\left\Vert\varphi\vee\psi\right\Vert_\varrho=\left\Vert\varphi\right\Vert_\varrho}\cup | ||
\left\Vert\psi\right\Vert_\varrho</math>; | \left\Vert\psi\right\Vert_\varrho</math>; | ||
* <math> | * <math>\left\Vert\varphi\wedge\psi\right\Vert_\varrho=\left\Vert\varphi\right\Vert_\varrho}\cap | ||
\left\Vert\psi\right\Vert_\varrho}</math>; | \left\Vert\psi\right\Vert_\varrho}</math>; | ||
* <math> | * <math>\left\Vert\varphi\to\psi\right\Vert\varrho= {\rm Int}((\mathbb{R}-\left\Vert\varphi\right\Vert_\varrho)\cup\left\Vert\psi\right\Vert_\varrho)</math>. | ||
Powiemy, że formuła <math> | Powiemy, że formuła <math>\varphi</math> jest ''prawdziwa'' w <math>\mathbb{R}</math>, gdy jej wartością jest cały zbiór <math>\mathbb{R}</math>. | ||
}} | }} | ||
Linia 222: | Linia 222: | ||
Formuła rachunku zdań jest intuicjonistycznym | Formuła rachunku zdań jest intuicjonistycznym | ||
twierdzeniem wtedy i tylko wtedy, gdy jest prawdziwa w <math> | twierdzeniem wtedy i tylko wtedy, gdy jest prawdziwa w <math>\mathbb{R}</math>. | ||
}} | }} | ||
Linia 232: | Linia 232: | ||
Aby się przekonać, że prawo wyłączonego środka nie jest twierdzeniem | Aby się przekonać, że prawo wyłączonego środka nie jest twierdzeniem | ||
logiki intuicjonistycznej, przypuśćmy, że <math> | logiki intuicjonistycznej, przypuśćmy, że <math>\varrho(p)=(0,\infty)</math>. | ||
Wtedy <math> | Wtedy <math>\Vert p\vee\neg p\Vert_\varrho=\mathbb{R}-\{0\}\neq \mathbb{R}</math>. | ||
Jeśli zaś <math> | Jeśli zaś <math>\varrho(p)= \mathbb{R}-\{1\}</math> to także | ||
<math> | <math>\Vert\neg\neg p\to p\Vert_\varrho=\mathbb{R}-\{1\}</math>, więc i formuła | ||
<math> | <math>\neg\neg p\to p</math> nie jest intuicjonistycznym twierdzeniem. | ||
}} | }} | ||
Linia 251: | Linia 251: | ||
W tym dowodzie najpierw wprowadzamy implikację, a zaraz potem ją eliminujemy. | W tym dowodzie najpierw wprowadzamy implikację, a zaraz potem ją eliminujemy. | ||
Można jednak zrobić inaczej. Tam gdzie w części (2) dowodu używane jest | Można jednak zrobić inaczej. Tam gdzie w części (2) dowodu używane jest | ||
założenie <math> | założenie <math>\varphi</math> można po prostu wstawić całą część (1). | ||
Chociaż rozmiary nowego dowodu mogą być | Chociaż rozmiary nowego dowodu mogą być | ||
większe (założenie <math> | większe (założenie <math>\varphi</math> mogło być używane kilkakrotnie), to jednak | ||
jego struktura będzie prostsza. Docelowo możemy uzyskać dowód, w którym | jego struktura będzie prostsza. Docelowo możemy uzyskać dowód, w którym | ||
takie sytuacje jak na rysunku w ogóle nie występują. Taki dowód nazwiemy | takie sytuacje jak na rysunku w ogóle nie występują. Taki dowód nazwiemy | ||
Linia 267: | Linia 267: | ||
{{definicja|11.7|| | {{definicja|11.7|| | ||
Przyjmijmy, że mamy pewien przeliczalny | Przyjmijmy, że mamy pewien przeliczalny nieskończony zbior ''zmiennych przedmiotowych''. Termy rachunku lambda (''lambda-termy'') określamy przez indukcję: | ||
* Zmienne przedmiotowe są termami. | * Zmienne przedmiotowe są termami. | ||
* Jesli <math> | * Jesli <math>M</math> i <math>N</math> są termami, to math>(MN)</math> tez. | ||
* Jesli <math> | * Jesli <math>M</math> jest termem i <math>x</math> jest zmienną, to <math>(\lambda x M)</math> jest termem. | ||
}} | }} | ||
Wyrażenie postaci <math> | Wyrażenie postaci <math>(MN)</math> nazywamy ''aplikacją'', a wyrażenie postaci | ||
<math> | <math>(\lambda x M)</math> to <math>\lambda</math>-''abstrakcja''. | ||
Stosujemy nastepujące konwencje notacyjne: | Stosujemy nastepujące konwencje notacyjne: | ||
:- opuszczamy zewnętrzne nawiasy;<br> | :- opuszczamy zewnętrzne nawiasy;<br> | ||
:- aplikacja wiąże w lewo, tj. <math> | :- aplikacja wiąże w lewo, tj. <math>MNP</math> oznacza <math>(MN)P</math>;<br> | ||
:- piszemy <math> | :- piszemy <math>\lambda x_1\ldots x_n.M</math> zamiast <math>\lambda x_1(\ldots(\lambda x_n M)\cdots)</math>. | ||
Uwaga: kropka w wyrażeniu <math> | Uwaga: kropka w wyrażeniu <math>\lambda x_1\ldots x_n.M</math> zastępuje lewy nawias, | ||
którego zasięg rozciąga się do końca wyrażenia <math> | którego zasięg rozciąga się do końca wyrażenia <math>M</math>. Zwyczajowo używa | ||
się też notacji <math> | się też notacji <math>\lambda x.M</math>. | ||
Operator lambda-abstrakcji <math> | Operator lambda-abstrakcji <math>\lambda</math>, podobnie jak kwantyfikator, | ||
wiąże zmienne, tj. wszystkie wystąpienia <math> | wiąże zmienne, tj. wszystkie wystąpienia <math>x</math> w wyrażeniu <math>\lambda x M</math> | ||
uwaza się za ''związane''. Zazwyczaj lambda-termy rozważa się | uwaza się za ''związane''. Zazwyczaj lambda-termy rozważa się | ||
z dokładnością do alfa-konwersji, tj. utożsamia się termy różniące się | z dokładnością do alfa-konwersji, tj. utożsamia się termy różniące się | ||
tylko zmiennymi związanymi. | tylko zmiennymi związanymi. | ||
Pominiemy tu ścisłą definicję podstawienia <math> | Pominiemy tu ścisłą definicję podstawienia <math>M[N/x]</math>, która jest podobna | ||
do definicji stosowanej dla formuł z kwantyfikatorami. | do definicji stosowanej dla formuł z kwantyfikatorami. | ||
{{definicja|11.8|| | {{definicja|11.8|| | ||
Relacja ''beta-redukcji'' to najmniejsza relacja w zbiorze lambda- | Relacja ''beta-redukcji'' to najmniejsza relacja w zbiorze lambda-termów, spełniająca warunki: | ||
- <math> | - <math>(\lambda x P)Q \to_\beta P[Q/x]</math>; | ||
- | - jeśli <math>M\to_\beta M'</math>, to <math>MN \to_\beta M'N</math>, <math>NM \to_\beta NM'</math> oraz <math>\lambda x M \to_\beta \lambda x M'</math>. | ||
Inaczej mówiąc, <math> | Inaczej mówiąc, <math>M\to_\beta M'</math> zachodzi, gdy podterm termu <math>M</math> postaci | ||
<math> | <math>(\lambda x P)Q</math>, czyli ''redeks'', zostaje zastąpiony w <math>M'</math> przez wynik | ||
podstawienia <math> | podstawienia <math>P[Q/x]</math>. Znakiem <math>\hookrightarrow_\beta</math> oznaczamy domknięcie | ||
przechodnio-zwrotne relacji <math> | przechodnio-zwrotne relacji <math>\to_\beta</math>. Mówimy, że term jest ''w postaci | ||
normalnej'', gdy nie zawiera żadnego redeksu, tj. nie ''redukuje się''. | normalnej'', gdy nie zawiera żadnego redeksu, tj. nie ''redukuje się''. | ||
}} | }} | ||
Zauważmy tu analogię pomiędzy redukcją <math> | Zauważmy tu analogię pomiędzy redukcją <math>(\lambda x P)Q \to_\beta P[Q/x]</math> | ||
i wywołaniem procedury <math> | i wywołaniem procedury <math>P</math>, przy którym na miejsce parametru formalnego <math>x</math> | ||
podstawiony zostaje parametr aktualny <math> | podstawiony zostaje parametr aktualny <math>Q</math>. | ||
{{definicja|11.9|| | {{definicja|11.9|| | ||
Przyjmijmy pewien zbiór ''typów atomowych'', który oznaczymy przez <math> | Przyjmijmy pewien zbiór ''typów atomowych'', który oznaczymy przez <math>ZZ</math> (zbieżność oznaczeń jest nieprzypadkowa). Powiemy teraz, że | ||
* Typy atomowe są typami; | * Typy atomowe są typami; | ||
* Jeśli <math> | * Jeśli <math>\sigma</math> i <math>\tau</math> są typami, to <math>\sigma\to\tau</math> jest typem. | ||
A zatem nasze typy to po prostu formuły zdaniowe zbudowane przy | A zatem nasze typy to po prostu formuły zdaniowe zbudowane przy | ||
pomocy samej implikacji. Stosujemy taką konwencję, że strzałka jest | pomocy samej implikacji. Stosujemy taką konwencję, że strzałka jest | ||
łączna w prawo, tj. napis <math> | łączna w prawo, tj. napis <math>\sigma\to\tau\to\rho</math> oznacza | ||
<math> | <math>\sigma\to(\tau\to\rho)</math>. | ||
Przez ''otoczenie typowe'' rozumiemy zbiór deklaracji postaci | Przez ''otoczenie typowe'' rozumiemy zbiór deklaracji postaci | ||
<math> | <math>(x:\tau)</math>, gdzie | ||
<math> | <math>x</math> jest zmienną (przedmiotową) a <math>\tau</math> jest typem. Żądamy przy tym, | ||
aby otoczenie było funkcją, tj. aby jedna zmienna nie była | aby otoczenie było funkcją, tj. aby jedna zmienna nie była | ||
deklarowana dwa razy. Przez <math> | deklarowana dwa razy. Przez <math>\Gamma(x{:}\sigma)</math> oznaczamy otoczenie | ||
określone tak: | określone tak: | ||
<center><math> | <center><math>\Gamma(x{:}\sigma)(y) = \begin{cases} \Gamma(y), & \mbox{jeśli } y\neq x; \\ \sigma, & \mbox{w przeciwnym przypadku.} \end{cases}</math></center> | ||
}} | }} | ||
Lambda-termom można teraz przypisywać typy. Napis <math> | Lambda-termom można teraz przypisywać typy. Napis <math>M:\tau</math> stwierdza, że | ||
<math> | <math>M</math> jest termem typu <math>\tau</math>. Interpretacja operatora <math>\to</math> jest taka: Term typu <math>\tau\to\sigma</math> zaaplikowany do argumentu typu <math>\tau</math> daje wynik typu <math>\sigma</math>. Ponieważ typ termu może zależeć | ||
od typów jego zmiennych wolnych, więc nasz system przypisania typów | od typów jego zmiennych wolnych, więc nasz system przypisania typów | ||
wyprowadza asercje postaci <math> | wyprowadza asercje postaci <math>\Gamma\vdash M:\tau</math>, | ||
gdzie <math> | gdzie <math>\Gamma</math> jest otoczeniem typowym. | ||
'''Aksjomat:''' <math>\;\; | '''Aksjomat:''' <math>\;\;\Gamma(x:\sigma)\vdash x:\sigma</math> | ||
'''Reguły:''' | '''Reguły:''' | ||
<center><math> | <center><math> | ||
\frac{\Gamma(x{:}\sigma)\vdash M:\tau}{\Gamma\vdash(\lambda x\, M):\sigma\to\tau}(Abs)\qquad \frac{\Gamma\vdash M: \sigma\to\tau\qquad\Gamma\vdash N: \sigma}{(MN) : \tau}(App) | |||
</math></center> | </math></center> | ||
Linia 352: | Linia 352: | ||
{{fakt|11.10|twier11.10-11.12| | {{fakt|11.10|twier11.10-11.12| | ||
Jeśli <math> | Jeśli <math>\Gamma\vdash M:\tau</math> oraz <math>M\to_{\beta} N</math>, to <math>\Gamma\vdash N:\tau</math>. | ||
}} | }} | ||
Linia 361: | Linia 361: | ||
{{fakt|11.11|| | {{fakt|11.11|| | ||
Formuła implikacyjna <math> | Formuła implikacyjna <math>\varphi</math> jest twierdzeniem intuicjonistycznym , gdy | ||
istnieje zamknięty (tj. bez zmiennych wolnych) lambda-term typu <math> | istnieje zamknięty (tj. bez zmiennych wolnych) lambda-term typu <math>\varphi</math>. | ||
}} | }} | ||
Związek pomiędzy dowodami i lambda-termami staje się jeszcze bardziej | Związek pomiędzy dowodami i lambda-termami staje się jeszcze bardziej | ||
interesujący, gdy zauważymy podobieństwo dowodu ze strony [[#strona84|84]] | interesujący, gdy zauważymy podobieństwo dowodu ze strony [[#strona84|84]] | ||
do beta-redeksu postaci <math> | do beta-redeksu postaci <math>(\lambda x P)Q</math>: | ||
[[Image:Dowódstr84.PNG|350px|center]] | [[Image:Dowódstr84.PNG|350px|center]] | ||
Normalizacja tamtego dowodu daje w wyniku dowód, | Normalizacja tamtego dowodu daje w wyniku dowód, | ||
którego odpowiednikiem jest term <math> | którego odpowiednikiem jest term <math>P[Q/x]</math>. Ewaluacja lambda-termów | ||
(beta-redukcja) ściśle więc reprezentuje zjawisko normalizacji | (beta-redukcja) ściśle więc reprezentuje zjawisko normalizacji | ||
dowodów. W szczególności okazuje się, że | dowodów. W szczególności okazuje się, że | ||
Linia 384: | Linia 384: | ||
}} | }} | ||
Wniosek z [[#twier11.10-11.12|Twierdzeń 11.10-11.12]] jest taki: aby ustalić czy formuła <math> | Wniosek z [[#twier11.10-11.12|Twierdzeń 11.10-11.12]] jest taki: aby ustalić czy formuła <math>\varphi</math> ma dowód, należy zbadać, czy istnieje | ||
zamknięty term typu <math> | zamknięty term typu <math>\varphi</math> w postaci normalnej. W ten sposób można | ||
np. rozstrzygnąć, które z formuł w [[Logika dla informatyków/Ćwiczenia 11#f|Ćwiczeniu 6]] są twierdzeniami intuicjonistycznymi. | np. rozstrzygnąć, które z formuł w [[Logika dla informatyków/Ćwiczenia 11#f|Ćwiczeniu 6]] są twierdzeniami intuicjonistycznymi. | ||
Linia 396: | Linia 396: | ||
W myśl interpretacji BHK, konstrukcją (dowodem) koniunkcji | W myśl interpretacji BHK, konstrukcją (dowodem) koniunkcji | ||
<math> | <math>\varphi\wedge\psi</math> jest para konstrukcji, jedna "typu <math>\varphi</math>" | ||
a druga "typu <math> | a druga "typu <math>\psi</math>". W naturalnej dedukcji, reguła wprowadzania | ||
koniunkcji odpowiada | koniunkcji odpowiada | ||
tworzeniu takiej pary, a reguła eliminacji koniunkcji reprezentuje | tworzeniu takiej pary, a reguła eliminacji koniunkcji reprezentuje | ||
Linia 406: | Linia 406: | ||
<center><math> | <center><math>\frac{\Gamma\vdash M:\varphi\qquad\Gamma\vdash N:\psi}{\Gamma\vdash\langle M,N\rangle:\varphi\wedge\psi}\qquad\qquad | ||
\frac{\Gamma\vdash M:\varphi\wedge\psi}{\Gamma\vdash \pi_1(M):\varphi}\qquad\qquad | \frac{\Gamma\vdash M:\varphi\wedge\psi}{\Gamma\vdash \pi_1(M):\varphi}\qquad\qquad | ||
\frac{\Gamma\vdash M:\varphi\wedge\psi}{\Gamma\vdash \pi_2(M):\psi}</math></center>}} | \frac{\Gamma\vdash M:\varphi\wedge\psi}{\Gamma\vdash \pi_2(M):\psi}</math></center>}} |
Aktualna wersja na dzień 12:03, 5 wrz 2023
Logika intuicjonistyczna
Logika klasyczna oparta jest na pojęciu wartości logicznej zdania. Poprawnie zbudowane i jednoznaczne stwierdzenie jest w tej logice klasyfikowane jako "prawdziwe" lub "fałszywe". Wartość logiczna zdania złożonego (np. implikacji) jest zaś ustalana na podstawie wartości jego składowych (niezależnie od ich faktycznej treści). W większości przypadków takie postępowanie jest naturalne i wygodne. Ale nie zawsze. Przypomnijmy na przykład, że klasyczna materialna implikacja nie zawsze odpowiada jakiejkolwiek faktycznej zależności pomiędzy przesłanką i konkluzją (Rozdział 3.1). Inną konsekwencją dwuwartościowości logiki klasycznej jest prawo wyłączonego środka. Akceptujemy alternatywę , niezależnie od tego czy zdanie jest faktycznie prawdziwe czy fałszywe, a nawet nie wiedząc, co dokładnie to zdanie wyraża. Zilustrujmy to na przykładzie:
Fakt 11.1
Istnieją takie liczby niewymierne i , że jest liczbą wymierną.
Dowód
Powyższy dowód, przy całej swojej prostocie i elegancji, ma pewną oczywistą wadę: nadal nie wiemy, jakie liczby naprawdę spełniają żądany warunek. A oto inny dowód Faktu .
Dowód 2
Mówimy, że drugi dowód, w odróżnieniu od pierwszego, jest konstruktywny. Oczywiście, konstruktywny dowód zawiera w sobie więcej przydatnej informacji niż niekonstruktywny, ale z punktu widzenia logiki klasycznej, oba te dowody są tak samo poprawne.
Logika, dopuszczająca tylko wnioskowania o charakterze konstruktywnym, znana jest pod tradycyjną, nieco mylącą, nazwą logiki intuicjonistycznej. W tej logice nie przypisujemy zdaniom wartości logicznych. Nieformalne objaśnienie zasad logiki intuicjonistycznej posługuje się pojęciem konstrukcji. Zdanie jest uważane za prawdziwe, gdy można podać jego konstrukcję, tworzoną według następujących zasad (od nazwisk Brouwera, Heytinga i Kołmogorowa zwanych interpretacją BHK):
- Konstrukcja dla polega na podaniu konstrukcji dla i konstrukcji dla ;
- Konstrukcja dla polega na wskazaniu jednego ze składników , i podaniu konstrukcji dla tego składnika.
- Konstrukcja dla implikacji to metoda (funkcja) przekształcająca każdą konstrukcję przesłanki w konstrukcję dla konkluzji .
- Nie ma konstrukcji dla fałszu .
- Konstrukcja dla to metoda, która każdej potencjalnej wartości zmiennej przypisuje konstrukcję dla .
- Konstrukcja dla polega na wskazaniu pewnej wartości zmiennej , oraz konstrukcji dla .
Negacja intuicjonistyczna utożsamiana jest z implikacją
. A zatem
- Konstrukcja dla to metoda obracająca każdą ewentualną konstrukcję w absurd ("rzecz, której nie ma").
Nie od rzeczy jest tu nastepująca uwaga: o konstrukcji
dla można myśleć jak o funkcji typu ,
bo przecież konstrukcjom dla (obiektom "typu ")
przypisuje ona konstrukcje dla , czyli obiekty "typu ".
Za chwilę wrócimy do tej analogii.
Przykład 11.2
Konstrukcję dla formuły możemy zapisać tak:
Przypuśćmy, że dana jest konstrukcja dla przesłanki . Wtedy konstrukcja dla konkluzji (czyli dla ) jest następująca: daną konstrukcję dla formuły należy zastosować do .
Próba podania konstrukcji dla implikacji odwrotnej natrafia jednak na nieprzezwyciężalną trudność. Aby wykorzystać daną konstrukcję dla , musielibyśmy mieć konstrukcję dla , a skoro jej nie mamy, to założenie jest bezużyteczne.
Niemożliwe jest też wskazanie konstrukcji dla schematu , nie znając nie możemy bowiem wskazać żadnego z członów alternatywy.
Podobnie będzie na przykład z implikacją . Konstrukcja przesłanki dla każdej wartości zmiennej generuje albo konstrukcję dla albo konstrukcję dla . Ale skorzystać z niej można tylko dla konkretnych wartości . Tymczasem, aby podać konstrukcję dla konkluzji, musielibyśmy umieć podjąć krytyczną decyzję "w ciemno".
Proponujemy teraz Czytelnikowi wykonanie Ćwiczenia 2, a nastepnie próbę znalezienia konstrukcji dla formuł z Ćwiczenia 5.
Intuicjonistyczny rachunek zdań
Objaśnienia odwołujące się do pojęcia konstrukcji są tylko nieformalne. Ścisłą definicję logiki intuicjonistycznej może stanowić system wnioskowania, na przykład w stylu naturalnej dedukcji. Dla uproszczenia ograniczymy się tutaj do intuicjonistycznego rachunku zdań. System naturalnej dedukcji dla takiego rachunku, przedstawiony poniżej można uważać za uściślenie interpretacji BHK. Otrzymujemy go z systemu klasycznego (Sekcja 5.2) przez odrzucenie reguły PS.<ref name="czternascie"> Robimy to, zauważając z pewną satysfakcją, że właśnie ta reguła "nie pasuje" do pozostałych, bo odbiega swoją formą od zasady wprowadzania i eliminacji spójników.</ref>
Ciekawy jest sposób w jaki z klasycznego rachunku sekwentów
(Sekcja 5.3) można otrzymać system dla logiki intuicjonistycznej. Otóż należy w tym celu ograniczyć liczbę formuł występujących po
prawej stronie sekwentów do (co najwyżej) jednej, przy czym sekwent
z pustą prawą stroną można utożsamiać z sekwentem
. Reguła -prawa traci wtedy sens i trzeba ją zastąpić przez dwie reguły podobne do tych z Ćwiczenia 11 w Rozdziale 5. Pozostałe reguły pozostają w zasadzie bez zmian.
Intuicjonistyczny system dowodzenia w stylu Hilberta dla logiki
zdaniowej, w której występuje tylko implikacja i fałsz, a negacja
jest zdefiniowana jako , otrzymamy
bardzo łatwo: wystarczy usunąć aksjomat
z systemu klasycznego i dodać jeden nowy:
.
Ale aksjomaty (B1)-(B4) z Rozdziału 5 do logiki intuicjonistycznej nie pasują, bo nie zgadzają się z interpretacją BHK. Trzeba więc przyjąć aksjomaty z Ćwiczenia 2 do Rozdziału 6, które zamiast definiować koniunkcję i alternatywę, wyrażają ich najważniejsze własności.
;
;
;
;
;
.
Fakt 11.3
Opisane powyżej intuicjonistyczne systemy dowodzenia (naturalna dedukcja, rachunek sekwentów oraz system Hilberta) są sobie równoważne: formuła jest twierdzeniem dowolnego z tych systemów , gdy jest twierdzeniem każdego z pozostałych.
Dowód
Semantyka topologiczna
Jak już powiedzieliśmy, logika intuicjonistyczna różni się od klasycznej tym, że nie odwołuje się do pojęcia wartości logicznej, a formalna definicja jest syntaktyczna (przez system dowodzenia) a nie semantyczna. Okazuje się jednak, że intuicjonistyczny rachunek zdań ma ciekawą semantykę topologiczną. Stanowi ona uogólnienie semantyki klasycznego rachunku zdań z Ćwiczenia 7 do Rozdziału 1. Różnica polega na tym, że znaczeniami formuł mogą być jedynie zbiory otwarte.
Definicja 11.4
Niech będzie rodziną wszystkich podzbiorów otwartych zbioru liczb rzeczywistych . Dla , przez oznaczymy wnętrze zbioru , tj. największy zbiór otwarty zawarty w . Wartościowaniem w zbiorze nazwiemy dowolną funkcję . Dla danego , możemy każdej formule zdaniowej przypisać wartość w :
- oraz ;
- , gdy jest symbolem zdaniowym;
- ;
- Parser nie mógł rozpoznać (błąd składni): {\displaystyle \left\Vert\varphi\vee\psi\right\Vert_\varrho=\left\Vert\varphi\right\Vert_\varrho}\cup \left\Vert\psi\right\Vert_\varrho} ;
- Parser nie mógł rozpoznać (błąd składni): {\displaystyle \left\Vert\varphi\wedge\psi\right\Vert_\varrho=\left\Vert\varphi\right\Vert_\varrho}\cap \left\Vert\psi\right\Vert_\varrho}} ;
- .
Powiemy, że formuła jest prawdziwa w , gdy jej wartością jest cały zbiór .
Twierdzenie 11.5
Formuła rachunku zdań jest intuicjonistycznym twierdzeniem wtedy i tylko wtedy, gdy jest prawdziwa w .
Uwaga: Implikacja "tylko wtedy" w Twierdzeniu 11.5 zachodzi nie tylko dla liczb rzeczywistych, ale także dla dowolnej przestrzeni topologicznej.
Przykład 11.6
Aby się przekonać, że prawo wyłączonego środka nie jest twierdzeniem logiki intuicjonistycznej, przypuśćmy, że . Wtedy .
Jeśli zaś to także , więc i formuła nie jest intuicjonistycznym twierdzeniem.
Normalizacja dowodów
Wróćmy teraz do systemu naturalnej dedukcji dla intuicjonistycznego rachunku zdań. Dla uproszczenia ograniczmy się na razie do tzw. minimimalnej logiki implikacyjnej, tj. do formuł zbudowanych z pomocą samej implikacji. Przypuśćmy, że mamy taki dowód:
W tym dowodzie najpierw wprowadzamy implikację, a zaraz potem ją eliminujemy. Można jednak zrobić inaczej. Tam gdzie w części (2) dowodu używane jest założenie można po prostu wstawić całą część (1). Chociaż rozmiary nowego dowodu mogą być większe (założenie mogło być używane kilkakrotnie), to jednak jego struktura będzie prostsza. Docelowo możemy uzyskać dowód, w którym takie sytuacje jak na rysunku w ogóle nie występują. Taki dowód nazwiemy dowodem normalnym. Proces normalizacji dowodu jest podobny do procesu eliminacji cięcia, a dowody normalne mają podobne zalety jak dowody bez cięcia. W szczególności, wyszukiwanie dowodu dla danej formuły staje się łatwiejsze, jeśli można się ograniczyć do dowodów normalnych.
Lambda-termy z typami
Normalizacja dowodów ma bliski związek z rachunkiem lambda. Przypomnijmy tu podstawowe definicje.
Definicja 11.7
Przyjmijmy, że mamy pewien przeliczalny nieskończony zbior zmiennych przedmiotowych. Termy rachunku lambda (lambda-termy) określamy przez indukcję:
- Zmienne przedmiotowe są termami.
- Jesli i są termami, to math>(MN)</math> tez.
- Jesli jest termem i jest zmienną, to jest termem.
Wyrażenie postaci nazywamy aplikacją, a wyrażenie postaci to -abstrakcja. Stosujemy nastepujące konwencje notacyjne:
- - opuszczamy zewnętrzne nawiasy;
- - aplikacja wiąże w lewo, tj. oznacza ;
- - piszemy zamiast .
Uwaga: kropka w wyrażeniu zastępuje lewy nawias, którego zasięg rozciąga się do końca wyrażenia . Zwyczajowo używa się też notacji .
Operator lambda-abstrakcji , podobnie jak kwantyfikator, wiąże zmienne, tj. wszystkie wystąpienia w wyrażeniu uwaza się za związane. Zazwyczaj lambda-termy rozważa się z dokładnością do alfa-konwersji, tj. utożsamia się termy różniące się tylko zmiennymi związanymi.
Pominiemy tu ścisłą definicję podstawienia , która jest podobna do definicji stosowanej dla formuł z kwantyfikatorami.
Definicja 11.8
Relacja beta-redukcji to najmniejsza relacja w zbiorze lambda-termów, spełniająca warunki:
- ;
- jeśli , to , oraz .
Inaczej mówiąc, zachodzi, gdy podterm termu postaci , czyli redeks, zostaje zastąpiony w przez wynik podstawienia . Znakiem oznaczamy domknięcie przechodnio-zwrotne relacji . Mówimy, że term jest w postaci normalnej, gdy nie zawiera żadnego redeksu, tj. nie redukuje się.
Zauważmy tu analogię pomiędzy redukcją i wywołaniem procedury , przy którym na miejsce parametru formalnego podstawiony zostaje parametr aktualny .
Definicja 11.9
Przyjmijmy pewien zbiór typów atomowych, który oznaczymy przez (zbieżność oznaczeń jest nieprzypadkowa). Powiemy teraz, że
- Typy atomowe są typami;
- Jeśli i są typami, to jest typem.
A zatem nasze typy to po prostu formuły zdaniowe zbudowane przy pomocy samej implikacji. Stosujemy taką konwencję, że strzałka jest łączna w prawo, tj. napis oznacza .
Przez otoczenie typowe rozumiemy zbiór deklaracji postaci , gdzie jest zmienną (przedmiotową) a jest typem. Żądamy przy tym, aby otoczenie było funkcją, tj. aby jedna zmienna nie była deklarowana dwa razy. Przez oznaczamy otoczenie określone tak:
Lambda-termom można teraz przypisywać typy. Napis stwierdza, że jest termem typu . Interpretacja operatora jest taka: Term typu zaaplikowany do argumentu typu daje wynik typu . Ponieważ typ termu może zależeć od typów jego zmiennych wolnych, więc nasz system przypisania typów wyprowadza asercje postaci , gdzie jest otoczeniem typowym.
Aksjomat:
Reguły:
Ważne, że takie przypisanie typu zachowuje się przy beta-redukcji.
Fakt 11.10
Jeśli oraz , to .
Izomorfizm Curry'ego-Howarda (formuły-typy)
Uderzające podobieństwo pomiędzy regułami przypisania typów i regułami dowodzenia w naturalnej dedukcji bywa nazywane izomorfizmem Curry'ego-Howarda. Lambda-termy z typami prostymi, to w istocie to samo co dowody w logice minimalnej. Bez wchodzenia w szczegóły sformułujmy tu najważniejszą konsekwencję tego izomorfizmu.
Fakt 11.11
Formuła implikacyjna jest twierdzeniem intuicjonistycznym , gdy istnieje zamknięty (tj. bez zmiennych wolnych) lambda-term typu .
Związek pomiędzy dowodami i lambda-termami staje się jeszcze bardziej interesujący, gdy zauważymy podobieństwo dowodu ze strony 84 do beta-redeksu postaci :
Normalizacja tamtego dowodu daje w wyniku dowód, którego odpowiednikiem jest term . Ewaluacja lambda-termów (beta-redukcja) ściśle więc reprezentuje zjawisko normalizacji dowodów. W szczególności okazuje się, że dowodom normalnym odpowiadają termy w postaci normalnej. Ma to niebagatelne znaczenie w związku z następującym twierdzeniem, którego (nietrywialny) dowód pomijamy.
Twierdzenie 11.12
Każdy term z typami prostymi można zredukować do postaci normalnej.
Wniosek z Twierdzeń 11.10-11.12 jest taki: aby ustalić czy formuła ma dowód, należy zbadać, czy istnieje zamknięty term typu w postaci normalnej. W ten sposób można np. rozstrzygnąć, które z formuł w Ćwiczeniu 6 są twierdzeniami intuicjonistycznymi.
Technika wyszukiwania dowodu danej formuły za pomocą konstrukcji odpowiedniego lambda-termu daje się uogólnić dla języków znacznie bogatszych niż zdaniowa logika implikacyjna i znajduje zastosowanie w systemach wspomagających dowodzenie, takich jak system Coq.
Przykład 11.13
W myśl interpretacji BHK, konstrukcją (dowodem) koniunkcji jest para konstrukcji, jedna "typu " a druga "typu ". W naturalnej dedukcji, reguła wprowadzania koniunkcji odpowiada tworzeniu takiej pary, a reguła eliminacji koniunkcji reprezentuje rzutowanie na jedną ze współrzędnych. A więc koniunkcja tak naprawdę to samo co produkt kartezjański. Jeśli rozszerzymy rachunek lambda o pary (rekordy) i rzutowania, będziemy mogli napisać takie reguły przypisania typów zawierających znak koniunkcji.
Przypisy
<references/>