Logika dla informatyków/Logika intuicjonistyczna: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Tprybick (dyskusja | edycje)
Nie podano opisu zmian
 
Przemo (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
==Logika intuicjonistyczna==


__TOC__
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ł [[##lopolski|Uzupelnic lopolski|]]). Inną konsekwencją
dwuwartościowości logiki klasycznej jest prawo wyłączonego środka.
Akceptujemy alternatywę <math>\displaystyle p\vee\neg p</math>, niezależnie od tego czy zdanie <math>\displaystyle p</math>
jest faktycznie prawdziwe czy fałszywe, a nawet nie wiedząc, co dokładnie
to zdanie wyraża. Zilustrujmy to na przykładzie:


Logika intuicjonistyczna - treść
{{fakt|||
 
Istnieją takie liczby niewymierne <math>\displaystyle x</math> i <math>\displaystyle y</math>, że <math>\displaystyle x^y</math> jest liczbą wymierną.
}}
 
{{dowod|||
Jeśli <math>\displaystyle \sqrt{2}^{\sqrt{2}}</math> jest wymierne, to można przyjąć
<math>\displaystyle x=y=\sqrt{2}</math>, &nbsp;niech <math>\displaystyle x=\sqrt{2}^{\sqrt{2}}</math> i <math>\displaystyle y = \sqrt{2}</math>.
}}
 
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&nbsp;[[##izwierciadlo|Uzupelnic izwierciadlo|]].
 
'''Dowód 2:''' Dla <math>\displaystyle x=\sqrt{2}</math> oraz <math>\displaystyle y=2\log_2 3</math> mamy <math>\displaystyle x^y = 3</math>.
 
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ą&nbsp;BHK''):
* Konstrukcja dla <math>\displaystyle \varphi\wedge\psi</math> polega na podaniu
konstrukcji dla <math>\displaystyle \varphi</math> i konstrukcji dla <math>\displaystyle \psi</math>;
* Konstrukcja dla <math>\displaystyle \varphi\vee\psi</math> polega na wskazaniu jednego
ze składników <math>\displaystyle \varphi</math>, <math>\displaystyle \psi</math> i podaniu konstrukcji dla tego składnika.
* Konstrukcja dla implikacji <math>\displaystyle \varphi\to\psi</math> to metoda (funkcja)
przekształcająca każdą konstrukcję przesłanki&nbsp;<math>\displaystyle \varphi</math> w konstrukcję
dla konkluzji&nbsp;<math>\displaystyle \psi</math>.
* Nie ma konstrukcji dla fałszu <math>\displaystyle \bot</math>.
* Konstrukcja dla <math>\displaystyle \forall x\,\varphi(x)</math> to metoda, która każdej
potencjalnej wartości <math>\displaystyle a</math> zmiennej <math>\displaystyle x</math> przypisuje konstrukcję dla <math>\displaystyle \varphi(a)</math>.
* Konstrukcja dla <math>\displaystyle \exists x\,\varphi(x)</math> polega na wskazaniu pewnej
wartości <math>\displaystyle a</math> zmiennej <math>\displaystyle x</math>, oraz konstrukcji dla <math>\displaystyle \varphi(a)</math>.
Negacja intuicjonistyczna <math>\displaystyle \neg\varphi</math> utożsamiana jest z implikacją
<math>\displaystyle \varphi\to\bot</math>. A zatem
* Konstrukcja dla <math>\displaystyle \neg\varphi</math> to metoda
obracająca każdą ewentualną konstrukcję <math>\displaystyle \varphi</math> w absurd
("rzecz, której nie ma").
Nie od rzeczy jest tu nastepująca uwaga: o konstrukcji
dla <math>\displaystyle \varphi\to\psi</math> można myśleć jak o&nbsp;funkcji ''typu'' <math>\displaystyle \varphi\to\psi</math>,
bo przecież konstrukcjom dla <math>\displaystyle \varphi</math> (obiektom "typu&nbsp;<math>\displaystyle \varphi</math>")
przypisuje ona konstrukcje dla <math>\displaystyle \psi</math>, czyli obiekty "typu&nbsp;<math>\displaystyle \psi</math>".
Za chwilę wrócimy do tej analogii.
 
{{przyklad|||
Konstrukcję
dla formuły <math>\displaystyle p\to\neg\neg p</math> możemy zapisać tak:
 
Przypuśćmy, że dana jest konstrukcja <math>\displaystyle C</math> dla przesłanki&nbsp;<math>\displaystyle p</math>.
Wtedy konstrukcja dla konkluzji <math>\displaystyle \neg\neg p</math> (czyli dla <math>\displaystyle (p\to\bot)\to\bot</math>)
jest następująca: daną
konstrukcję dla formuły <math>\displaystyle p\to\bot</math> należy zastosować do <math>\displaystyle C</math>. 
 
Próba podania konstrukcji dla implikacji odwrotnej <math>\displaystyle \neg\neg p\to p</math>
natrafia jednak na nieprzezwyciężalną trudność. Aby wykorzystać daną
konstrukcję dla <math>\displaystyle (p\to\bot)\to\bot</math>, musielibyśmy mieć konstrukcję
dla <math>\displaystyle 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>\displaystyle p\vee\neg p</math>,
nie znając <math>\displaystyle p</math> nie możemy bowiem wskazać żadnego z członów alternatywy.
 
Podobnie będzie na przykład z implikacją <math>\displaystyle \forall x(q\vee p(x))\to
q\vee \forall x\,p(x)</math>.
Konstrukcja przesłanki dla każdej wartości <math>\displaystyle a</math> zmiennej <math>\displaystyle x</math>
generuje albo konstrukcję dla <math>\displaystyle q</math> albo konstrukcję dla <math>\displaystyle p(a)</math>.
Ale skorzystać z niej można tylko dla konkretnych wartości&nbsp;<math>\displaystyle a</math>.
Tymczasem, aby podać konstrukcję dla konkluzji, musielibyśmy umieć
podjąć krytyczną decyzję "w ciemno".
}}
 
Proponujemy teraz Czytelnikowi wykonanie Ćwiczenia&nbsp;[[##szust|Uzupelnic szust|]], a nastepnie
próbę znalezienia konstrukcji dla formuł z Ćwiczenia&nbsp;[[##dowanny|Uzupelnic dowanny|]].
 
===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&nbsp;BHK. Otrzymujemy go z&nbsp;systemu
klasycznego (Sekcja&nbsp;[[##sysnatded|Uzupelnic sysnatded|]]) przez
odrzucenie reguły PS.{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.}
 
<center><math>\displaystyle (\arr </math> -intro <math>\displaystyle  ) \hspace{.2cm}
\frac{\Delta,\varphi\vdash\psi}{\Delta\vdash\varphi\arr\psi}
\hspace{1cm} (\arr </math> -elim <math>\displaystyle  ) \hspace{.2cm}
\frac{\Delta\vdash\varphi\arr\psi\odstep
\Delta\vdash\varphi}{\Delta\vdash\psi}</math></center>
 
<center><math>\displaystyle (\wedge </math> -intro <math>\displaystyle  )\hspace{.2cm} \frac{\Delta\vdash\varphi\odstep
\Delta\vdash\psi}{\Delta\vdash\varphi\wedge\psi} \hspace{1cm}
(\wedge </math> -elim <math>\displaystyle  )
\hspace{.2cm}\frac{\Delta\vdash\varphi\wedge\psi}{\Delta\vdash\varphi}
\hspace{1cm}
(\wedge </math> -elim <math>\displaystyle  )
\hspace{.2cm}\frac{\Delta\vdash\varphi\wedge\psi}{\Delta\vdash\psi}</math></center>
 
<center><math>\displaystyle (\vee </math> -intro <math>\displaystyle  )\hspace{.2cm}
\frac{\Delta\vdash\varphi}{\Delta\vdash\varphi\vee\psi} \hspace{1cm}
(\vee </math> -intro <math>\displaystyle  )\hspace{.2cm}
\frac{\Delta\vdash\psi}{\Delta\vdash\varphi\vee\psi} </math></center>
 
<center><math>\displaystyle (\vee </math> -elim <math>\displaystyle  )\hspace{.2cm} \frac{\Delta\vdash\varphi\vee\psi\odstep
\Delta,\varphi\vdash\vartheta\odstep
\Delta,\psi\vdash\vartheta}{\Delta\vdash\vartheta}</math></center>
 
Ciekawy jest sposób w jaki z klasycznego rachunku sekwentów
(Sekcja&nbsp;[[##rachseq|Uzupelnic rachseq|]]) 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
<math>\displaystyle \Gamma\vdash\ </math> z&nbsp;pustą prawą stroną można utożsamiać z sekwentem
<math>\displaystyle \Gamma\vdash\bot</math>. Reguła <math>\displaystyle (\vee </math> -prawa <math>\displaystyle  )</math> traci wtedy sens
i&nbsp;trzeba ją zastąpić przez dwie reguły podobne do tych z
Ćwiczenia&nbsp;[[##prawa-addytywna|Uzupelnic prawa-addytywna|]]
w Rozdziale&nbsp;[[##paradygmaty|Uzupelnic paradygmaty|]]. Pozostałe reguły pozostają
w&nbsp;zasadzie bez zmian.
 
<center><math>\displaystyle (\arr </math> -lewa <math>\displaystyle  )\hspace{.2cm} \frac{\Delta\vdash\varphi\hspace{1cm}
\Delta,\psi\vdash\vartheta}{\Delta,\varphi\arr\psi\vdash\vartheta}
\hspace{1cm}(\arr </math> -prawa <math>\displaystyle  )\hspace{.2cm}
\frac{\Delta,\varphi\vdash\psi}{\Delta\vdash\varphi\arr\psi}</math></center>
 
<center><math>\displaystyle (\wedge </math> -lewa <math>\displaystyle  )\hspace{.2cm}
\frac{\Delta,\varphi,\psi\vdash\vartheta}{\Delta,\varphi\wedge\psi\vdash\vartheta}
\hspace{1cm} (\wedge </math> -prawa <math>\displaystyle  )\hspace{.2cm}
\frac{\Delta\vdash \varphi\hspace{1cm}
\Delta\vdash\psi}{\Delta\vdash\varphi\wedge\psi}</math></center>
 
<center><math>\displaystyle (\vee </math> -lewa <math>\displaystyle  )\hspace{.2cm} \frac{\Delta,
\varphi\vdash\vartheta\hspace{1cm}
\Delta,\psi\vdash\vartheta}{\Delta, \varphi\vee\psi \vdash\vartheta}
\hspace{1cm} \frac{\Delta\vdash \varphi}{\Delta\vdash
\varphi\vee\psi}\hspace{.2cm}(\vee </math> -prawa <math>\displaystyle  )\hspace{.2cm}
\frac{\Delta\vdash \psi}{\Delta\vdash
\varphi\vee\psi}</math></center>
 
Intuicjonistyczny system dowodzenia w stylu Hilberta dla logiki
zdaniowej, w której występuje tylko implikacja i fałsz, a negacja <math>\displaystyle \neg\varphi</math>
jest zdefiniowana jako <math>\displaystyle \varphi\to\bot</math>, otrzymamy
bardzo łatwo: wystarczy usunąć aksjomat <math>\displaystyle \neg\neg\varphi\to\varphi</math>
z systemu klasycznego i dodać jeden nowy:
 
&nbsp;(A3i)&nbsp; <math>\displaystyle \bot\to\varphi</math>.
 
Ale aksjomaty (B1)--(B4) z Rozdziału&nbsp;[[##paradygmaty|Uzupelnic paradygmaty|]]
do logiki intuicjonistycznej nie pasują, bo nie zgadzają
się z interpretacją BHK. Trzeba więc przyjąć aksjomaty
z&nbsp;Ćwiczenia&nbsp;[[##wtomigraj|Uzupelnic wtomigraj|]] do Rozdziału&nbsp;[[##pelnosc|Uzupelnic pelnosc|]], które zamiast
definiować koniunkcję i alternatywę, wyrażają ich najważniejsze własności.
<nowiki> =</nowiki>  0pt
 
; (D1)
:  <math>\displaystyle \varphi\to\varphi\vee \psi</math>;
 
; (D2)
:  <math>\displaystyle \psi\to\varphi\vee \psi</math>;
 
; (D3)
:  <math>\displaystyle (\varphi\to \vartheta)\wedge(\psi\to \vartheta)
\to(\varphi\vee \psi \to \vartheta)</math>;
 
; (C1)
:  <math>\displaystyle \varphi\wedge \psi\to \varphi</math>;
 
; (C2)
:  <math>\displaystyle \varphi\wedge \psi\to \psi</math>;
 
; (C3)
:  <math>\displaystyle (\vartheta\to \varphi)\wedge(\vartheta\to \psi)\to
(\vartheta\to\varphi\wedge \psi)</math>.
{{fakt|||
 
Opisane powyżej intuicjonistyczne systemy dowodzenia (naturalna dedukcja,
rachunek sekwentów oraz system Hilberta) są sobie równoważne: formuła
<math>\displaystyle \varphi</math> jest twierdzeniem dowolnego z tych systemów , gdy jest
twierdzeniem każdego z pozostałych.
}}
 
{{dowod|||
Ćwiczenie. }}
 
{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&nbsp;Ćwiczenia&nbsp;[[##krecic|Uzupelnic krecic|]] do&nbsp;Rozdziału&nbsp;[[##aleksander|Uzupelnic aleksander|]]. 
Różnica polega na tym,
że znaczeniami formuł mogą być jedynie zbiory otwarte.
 
{{definicja|||
Niech <math>\displaystyle \Oh</math> będzie rodziną wszystkich podzbiorów otwartych zbioru liczb
rzeczywistych&nbsp;<math>\displaystyle \RR</math>. Dla <math>\displaystyle A\subseteq\RR</math>, przez <math>\displaystyle {\rm Int}(A)</math> oznaczymy
''wnętrze'' zbioru <math>\displaystyle A</math>, tj.&nbsp;największy zbiór otwarty zawarty w&nbsp;<math>\displaystyle A</math>.
''Wartościowaniem'' w zbiorze&nbsp;<math>\displaystyle \Oh</math> nazwiemy
dowolną funkcję <math>\displaystyle \varrho:\zmz\to\Oh</math>. Dla danego <math>\displaystyle \varrho</math>, możemy każdej
formule zdaniowej przypisać wartość w&nbsp;<math>\displaystyle \Oh</math>:
* <math>\displaystyle \wfz\bot\varrho=\emptyset</math> oraz <math>\displaystyle \wfz\top\varrho=\RR</math>;
* <math>\displaystyle \wfz{p}{\varrho}=\varrho(p)</math>, gdy <math>\displaystyle p</math> jest symbolem zdaniowym;
* <math>\displaystyle \wfz{\neg\varphi}\varrho= {\rm Int}(\RR-\wfz{\varphi}\varrho)</math>;
* <math>\displaystyle \wfz{\varphi\vee\psi}{\varrho}=\wfz{\varphi}{\varrho}\cup
\wfz{\psi}{\varrho}</math>;
* <math>\displaystyle \wfz{\varphi\wedge\psi}{\varrho}=\wfz{\varphi}{\varrho}\cap
\wfz{\psi}{\varrho}</math>;
* <math>\displaystyle \wfz{\varphi\to\psi}{\varrho}= {\rm Int}((\RR-\wfz{\varphi}\varrho)
\cup\wfz\psi\varrho)</math>.
Powiemy, że formuła <math>\displaystyle \varphi</math> jest ''prawdziwa'' w&nbsp;<math>\displaystyle \RR</math>, gdy
jej wartością jest cały zbiór&nbsp;<math>\displaystyle \RR</math>.
}}
 
{{twierdzenie|||
 
Formuła rachunku zdań jest intuicjonistycznym
twierdzeniem, , gdy jest prawdziwa w&nbsp;<math>\displaystyle \RR</math>.
}}
 
'''Uwaga:''' Implikacja "tylko wtedy" w Twierdzeniu&nbsp;[[##zwawo|Uzupelnic zwawo|]] zachodzi
nie tylko dla liczb rzeczywistych, ale także dla dowolnej przestrzeni
topologicznej.
 
{{przyklad|||
 
Aby się przekonać, że prawo wyłączonego środka nie jest twierdzeniem
logiki intuicjonistycznej, przypuśćmy, że <math>\displaystyle \varrho(p)=(0,\infty)</math>.
Wtedy <math>\displaystyle \wfz{p\vee\neg p}\varrho=\RR-\{0\}\neq \RR</math>.
 
Jeśli zaś <math>\displaystyle \varrho(p)= \RR-\{1\}</math> to także
<math>\displaystyle \wfz{\neg\neg p\to p}\varrho=\RR-\{1\}</math>, więc i formuła
<math>\displaystyle \neg\neg p\to p</math> 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.&nbsp;minimimalnej
logiki implikacyjnej, tj.&nbsp;do formuł zbudowanych z pomocą samej implikacji.
Przypuśćmy, że mamy taki dowód:
    {(1)}<nowiki> =</nowiki>  1.2ex
                  <nowiki> =</nowiki>  3
                  {}
   
        {(2)}<nowiki> =</nowiki>  1.2ex
                  <nowiki> =</nowiki>  3
                  {,}
       
            {}
        {({}{ I})}
   
    {({}{ E})}
 
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 <math>\displaystyle \varphi</math> można po prostu wstawić całą część (1).
Chociaż rozmiary nowego dowodu mogą być
większe (założenie <math>\displaystyle \varphi</math> 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|||
Przyjmijmy, że mamy pewien przeliczalny nieskonczony
zbior ''zmiennych przedmiotowych''. Termy rachunku lambda
(''lambda-termy'') określamy przez indukcję:
* Zmienne przedmiotowe są termami.
* Jesli <math>\displaystyle M</math> i <math>\displaystyle N</math> są termami, to <math>\displaystyle (MN)</math> tez.
* Jesli <math>\displaystyle M</math> jest termem i <math>\displaystyle x</math> jest zmienną, to <math>\displaystyle (\lambda x M)</math>
  jest termem.
}}
 
Wyrażenie postaci <math>\displaystyle (MN)</math> nazywamy ''aplikacją'', a wyrażenie postaci
<math>\displaystyle (\lambda x M)</math> to <math>\displaystyle \lambda</math>-''abstrakcja''.
Stosujemy nastepujące konwencje notacyjne:
 
-- opuszczamy zewnętrzne nawiasy;<br>
-- aplikacja wiąze w lewo, tj. <math>\displaystyle MNP</math> oznacza <math>\displaystyle (MN)P</math>;<br>
-- piszemy <math>\displaystyle \lambda x_1\ldots x_n.M</math> zamiast
<math>\displaystyle \lambda x_1(\ldots(\lambda x_n M)\cdots)</math>.
 
Uwaga: kropka w wyrażeniu <math>\displaystyle \lambda x_1\ldots x_n.M</math> zastępuje lewy nawias,
którego zasięg rozciąga się do końca wyrażenia&nbsp;<math>\displaystyle M</math>. Zwyczajowo używa
się też notacji <math>\displaystyle \lambda x.M</math>.
 
Operator lambda-abstrakcji <math>\displaystyle \lambda</math>, podobnie jak kwantyfikator,
wiąze zmienne, tj.&nbsp;wszystkie wystąpienia&nbsp;<math>\displaystyle x</math> w wyrażeniu&nbsp;<math>\displaystyle \lambda x M</math>
uwaza się za ''związane''. Zazwyczaj lambda-termy rozważa się
z dokładnością do alfa-konwersji, tj.&nbsp;utożsamia się termy różniące się
tylko zmiennymi związanymi.
 
Pominiemy tu ścisłą definicję podstawienia <math>\displaystyle M[N/x]</math>, która jest podobna
do definicji stosowanej dla formuł z kwantyfikatorami.
 
{{definicja|||
Relacja ''beta-redukcji'' to najmniejsza relacja
w zbiorze lambda-termow, spełniająca warunki:
 
-- <math>\displaystyle (\lambda x P)Q \to_\beta P[Q/x]</math>;
 
-- jesli <math>\displaystyle M\to_\beta M'</math>, to <math>\displaystyle MN \to_\beta M'N</math>, <math>\displaystyle NM \to_\beta NM'</math> oraz
  <math>\displaystyle \lambda x M \to_\beta \lambda x M'</math>.
 
Inaczej mówiąc, <math>\displaystyle M\to_\beta M'</math> zachodzi gdy podterm termu&nbsp;<math>\displaystyle M</math> postaci
<math>\displaystyle (\lambda x P)Q</math>, czyli ''redeks'', zostaje zamieniony na wynik
podstawienia <math>\displaystyle P[Q/x]</math>. Znakiem <math>\displaystyle \rarrow_\beta</math> oznaczamy domknięcie
przechodnio-zwrotne relacji&nbsp;<math>\displaystyle \to_\beta</math>. Mówimy, że term jest ''w postaci
normalnej'', gdy nie zawiera żadnego redeksu, tj.&nbsp;nie ''redukuje się''.
}}
 
Zauważmy tu analogię pomiędzy redukcją <math>\displaystyle (\lambda x P)Q \to_\beta P[Q/x]</math>
i wywołaniem procedury&nbsp;<math>\displaystyle P</math>, przy którym na miejsce parametru formalnego <math>\displaystyle x</math>
podstawiony zostaje parametr aktualny&nbsp;<math>\displaystyle Q</math>.
 
{{definicja|||
Przyjmijmy pewien zbiór
''typów atomowych'', który oznaczymy przez&nbsp;<math>\displaystyle \zmz</math> (zbieżność
oznaczeń jest nieprzypadkowa). Powiemy teraz, że
* Typy atomowe są typami;
* Jeśli <math>\displaystyle \sigma</math> i <math>\displaystyle \tau</math> są typami, to <math>\displaystyle \sigma\to\tau</math> 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.&nbsp;napis <math>\displaystyle \sigma\to\tau\to\rho</math> oznacza
<math>\displaystyle \sigma\to(\tau\to\rho)</math>.
 
Przez ''otoczenie typowe'' rozumiemy zbiór deklaracji postaci
<math>\displaystyle (x:\tau)</math>, gdzie
<math>\displaystyle x</math> jest zmienną (przedmiotową) a <math>\displaystyle \tau</math> jest typem. Żądamy przy tym,
aby otoczenie było funkcją, tj. aby jedna zmienna nie była
deklarowana dwa razy. Przez <math>\displaystyle \Gamma(x{:}\sigma)</math> oznaczamy otoczenie
określone tak:
<center><math>\displaystyle \Gamma(x{:}\sigma)(y) = \przypadki{\Gamma(y)}{</math>y<nowiki> =</nowiki>  x<math>\displaystyle }{\sigma}</math></center>
 
}}
 
Lambda-termom można teraz przypisywać typy. Napis <math>\displaystyle M:\tau</math> stwierdza, że
<math>\displaystyle M</math> jest termem typu <math>\displaystyle \tau</math>. Interpratecja operatora <math>\displaystyle \to</math> jest taka:
Term typu <math>\displaystyle \tau\to\sigma</math> zaaplikowany do argumentu
typu <math>\displaystyle \tau</math> daje wynik typu&nbsp;<math>\displaystyle \sigma</math>. Ponieważ typ termu może zależeć
od typów jego zmiennych wolnych, więc nasz system przypisania typów
wyprowadza asercje postaci <math>\displaystyle \Gamma\vdash M:\tau</math>,
gdzie <math>\displaystyle \Gamma</math> jest otoczeniem typowym.
 
'''Aksjomat:'''  <math>\displaystyle \Gamma(x:\sigma)\vdash x:\sigma</math>
 
'''Reguły:'''
 
<math>\displaystyle \prooftree\Gamma(x{:}\sigma)\vdash M:\tau\justifies
                \Gamma\vdash(\lambda x\, M):\sigma\to\tau
                \using{\rm(Abs)}\endprooftree\displaystyle \prooftree\Gamma\vdash M: \sigma\to\tau\qquad\Gamma\vdash N: \sigma
                \justifies (MN) : \tau\using{\rm(App)}\endprooftree</math>
 
Ważne, że takie przypisanie typu zachowuje się przy beta-redukcji.
 
{{fakt|||
 
Jeśli <math>\displaystyle \Gamma\vdash M:\tau</math> oraz <math>\displaystyle M\to_{\beta} N</math>, to
<math>\displaystyle \Gamma\vdash N:\tau</math>.
}}
 
===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|||
 
Formuła implikacyjna <math>\displaystyle \varphi</math> jest twierdzeniem intuicjonistycznym , gdy
istnieje zamknięty (tj.&nbsp;bez zmiennych wolnych) lambda-term typu&nbsp;<math>\displaystyle \varphi</math>.
}}
 
Związek pomiędzy dowodami i lambda-termami staje się jeszcze bardziej
interesujący, gdy zauważymy podobieństwo dowodu ze strony&nbsp;{lDADCH}
do beta-redeksu postaci <math>\displaystyle (\lambda x P)Q</math>:
 
    {(1)}<nowiki> =</nowiki>  1.2ex
                  <nowiki> =</nowiki>  3
                  { Q: }
   
        {(2)}<nowiki> =</nowiki>  1.2ex
                  <nowiki> =</nowiki>  3
                  {,x{:} P:}
       
            { xP:}
        {(Abs)}
   
    ( xP)Q:{(App)}
 
Normalizacja tamtego dowodu daje w wyniku dowód,
którego odpowiednikiem jest term <math>\displaystyle P[Q/x]</math>. 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&nbsp;postaci normalnej. Ma to
niebagatelne znaczenie w związku z następującym twierdzeniem,
którego (nietrywialny) dowód pomijamy.
 
{{twierdzenie|||
 
Każdy term z typami prostymi można zredukować do postaci normalnej.
}}
 
Wniosek z Twierdzeń&nbsp;[[##zrury|Uzupelnic zrury|]]--[[##puscil|Uzupelnic puscil|]] jest taki: aby
ustalić czy formuła <math>\displaystyle \varphi</math> ma dowód, należy zbadać, czy istnieje
zamknięty term typu&nbsp;<math>\displaystyle \varphi</math> w postaci normalnej. W ten sposób można
np.&nbsp;rozstrzygnąć, które z formuł w Ćwiczeniu&nbsp;[[##wprawo|Uzupelnic wprawo|]] 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&nbsp;znajduje zastosowanie
w systemach wspomagających dowodzenie, takich jak system Coq.
 
{{przyklad|||
 
W myśl interpretacji BHK, konstrukcją (dowodem) koniunkcji
<math>\displaystyle \varphi\wedge\psi</math> jest para konstrukcji, jedna "typu <math>\displaystyle \varphi</math>"
a druga "typu <math>\displaystyle \psi</math>". 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.
 
<math>\displaystyle \prooftree\Gamma\vdash M:\varphi\qquad\Gamma\vdash N:\psi\justifies
\Gamma\vdash\<M,N\>:\varphi\wedge\psi\endprooftree\qquad\qquad
\prooftree\Gamma\vdash M:\varphi\wedge\psi\justifies
\Gamma\vdash \pi_1(M):\varphi\endprooftree\qquad\qquad
\prooftree\Gamma\vdash M:\varphi\wedge\psi\justifies
\Gamma\vdash \pi_2(M):\psi\endprooftree</math>}}

Wersja z 13:03, 1 paź 2006

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ł Uzupelnic lopolski|). Inną konsekwencją dwuwartościowości logiki klasycznej jest prawo wyłączonego środka. Akceptujemy alternatywę p¬p, niezależnie od tego czy zdanie p jest faktycznie prawdziwe czy fałszywe, a nawet nie wiedząc, co dokładnie to zdanie wyraża. Zilustrujmy to na przykładzie:

Fakt

Istnieją takie liczby niewymierne x i y, że xy jest liczbą wymierną.

Dowód

Jeśli 22 jest wymierne, to można przyjąć x=y=2,  niech x=22 i y=2.

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 Uzupelnic izwierciadlo|.

Dowód 2: Dla x=2 oraz y=2log23 mamy xy=3.

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 xφ(x) to metoda, która każdej

potencjalnej wartości a zmiennej x przypisuje konstrukcję dla φ(a).

  • Konstrukcja dla xφ(x) polega na wskazaniu pewnej

wartości a zmiennej x, oraz konstrukcji dla φ(a).

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

Konstrukcję 

dla formuły p¬¬p możemy zapisać tak:

Przypuśćmy, że dana jest konstrukcja C dla przesłanki p.

Wtedy konstrukcja dla konkluzji ¬¬p (czyli dla (p)) jest następująca: daną konstrukcję dla formuły p należy zastosować do C.

Próba podania konstrukcji dla implikacji odwrotnej ¬¬pp natrafia jednak na nieprzezwyciężalną trudność. Aby wykorzystać daną konstrukcję dla (p), musielibyśmy mieć konstrukcję dla p, a skoro jej nie mamy, to założenie jest bezużyteczne.

Niemożliwe jest też wskazanie konstrukcji dla schematu p¬p, nie znając p nie możemy bowiem wskazać żadnego z członów alternatywy.

Podobnie będzie na przykład z implikacją x(qp(x))qxp(x). Konstrukcja przesłanki dla każdej wartości a zmiennej x generuje albo konstrukcję dla q albo konstrukcję dla p(a). Ale skorzystać z niej można tylko dla konkretnych wartości a. Tymczasem, aby podać konstrukcję dla konkluzji, musielibyśmy umieć podjąć krytyczną decyzję "w ciemno".

Proponujemy teraz Czytelnikowi wykonanie Ćwiczenia Uzupelnic szust|, a nastepnie próbę znalezienia konstrukcji dla formuł z Ćwiczenia Uzupelnic dowanny|.

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 Uzupelnic sysnatded|) przez odrzucenie reguły PS.{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.}

Parser nie mógł rozpoznać (nieznana funkcja „\arr”): {\displaystyle \displaystyle (\arr } -intro Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle ) \hspace{.2cm} \frac{\Delta,\varphi\vdash\psi}{\Delta\vdash\varphi\arr\psi} \hspace{1cm} (\arr } -elim Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle ) \hspace{.2cm} \frac{\Delta\vdash\varphi\arr\psi\odstep \Delta\vdash\varphi}{\Delta\vdash\psi}}
( -intro Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle )\hspace{.2cm} \frac{\Delta\vdash\varphi\odstep \Delta\vdash\psi}{\Delta\vdash\varphi\wedge\psi} \hspace{1cm} (\wedge } -elim Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle ) \hspace{.2cm}\frac{\Delta\vdash\varphi\wedge\psi}{\Delta\vdash\varphi} \hspace{1cm} (\wedge } -elim Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle ) \hspace{.2cm}\frac{\Delta\vdash\varphi\wedge\psi}{\Delta\vdash\psi}}
( -intro Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle )\hspace{.2cm} \frac{\Delta\vdash\varphi}{\Delta\vdash\varphi\vee\psi} \hspace{1cm} (\vee } -intro Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle )\hspace{.2cm} \frac{\Delta\vdash\psi}{\Delta\vdash\varphi\vee\psi} }
( -elim Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle )\hspace{.2cm} \frac{\Delta\vdash\varphi\vee\psi\odstep \Delta,\varphi\vdash\vartheta\odstep \Delta,\psi\vdash\vartheta}{\Delta\vdash\vartheta}}

Ciekawy jest sposób w jaki z klasycznego rachunku sekwentów (Sekcja Uzupelnic rachseq|) 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 Uzupelnic prawa-addytywna| w Rozdziale Uzupelnic paradygmaty|. Pozostałe reguły pozostają w zasadzie bez zmian.

Parser nie mógł rozpoznać (nieznana funkcja „\arr”): {\displaystyle \displaystyle (\arr } -lewa Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle )\hspace{.2cm} \frac{\Delta\vdash\varphi\hspace{1cm} \Delta,\psi\vdash\vartheta}{\Delta,\varphi\arr\psi\vdash\vartheta} \hspace{1cm}(\arr } -prawa Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle )\hspace{.2cm} \frac{\Delta,\varphi\vdash\psi}{\Delta\vdash\varphi\arr\psi}}
( -lewa Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle )\hspace{.2cm} \frac{\Delta,\varphi,\psi\vdash\vartheta}{\Delta,\varphi\wedge\psi\vdash\vartheta} \hspace{1cm} (\wedge } -prawa Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle )\hspace{.2cm} \frac{\Delta\vdash \varphi\hspace{1cm} \Delta\vdash\psi}{\Delta\vdash\varphi\wedge\psi}}
( -lewa Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle )\hspace{.2cm} \frac{\Delta, \varphi\vdash\vartheta\hspace{1cm} \Delta,\psi\vdash\vartheta}{\Delta, \varphi\vee\psi \vdash\vartheta} \hspace{1cm} \frac{\Delta\vdash \varphi}{\Delta\vdash \varphi\vee\psi}\hspace{.2cm}(\vee } -prawa Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle )\hspace{.2cm} \frac{\Delta\vdash \psi}{\Delta\vdash \varphi\vee\psi}}

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:

 (A3i)  φ.

Ale aksjomaty (B1)--(B4) z Rozdziału Uzupelnic paradygmaty| do logiki intuicjonistycznej nie pasują, bo nie zgadzają się z interpretacją BHK. Trzeba więc przyjąć aksjomaty z Ćwiczenia Uzupelnic wtomigraj| do Rozdziału Uzupelnic pelnosc|, które zamiast definiować koniunkcję i alternatywę, wyrażają ich najważniejsze własności.

 =   0pt 
(D1)
φφψ;
(D2)
ψφψ;
(D3)
(φϑ)(ψϑ)(φψϑ);
(C1)
φψφ;
(C2)
φψψ;
(C3)
(ϑφ)(ϑψ)(ϑφψ).

Fakt

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

Ćwiczenie.

{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 Uzupelnic krecic| do Rozdziału Uzupelnic aleksander|. Różnica polega na tym, że znaczeniami formuł mogą być jedynie zbiory otwarte.

Definicja

Niech Parser nie mógł rozpoznać (nieznana funkcja „\Oh”): {\displaystyle \displaystyle \Oh} będzie rodziną wszystkich podzbiorów otwartych zbioru liczb rzeczywistych Parser nie mógł rozpoznać (nieznana funkcja „\RR”): {\displaystyle \displaystyle \RR} . Dla Parser nie mógł rozpoznać (nieznana funkcja „\RR”): {\displaystyle \displaystyle A\subseteq\RR} , przez Int(A) oznaczymy wnętrze zbioru A, tj. największy zbiór otwarty zawarty w A. Wartościowaniem w zbiorze Parser nie mógł rozpoznać (nieznana funkcja „\Oh”): {\displaystyle \displaystyle \Oh} nazwiemy dowolną funkcję Parser nie mógł rozpoznać (nieznana funkcja „\zmz”): {\displaystyle \displaystyle \varrho:\zmz\to\Oh} . Dla danego ϱ, możemy każdej formule zdaniowej przypisać wartość w Parser nie mógł rozpoznać (nieznana funkcja „\Oh”): {\displaystyle \displaystyle \Oh} :

  • Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \displaystyle \wfz\bot\varrho=\emptyset} oraz Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \displaystyle \wfz\top\varrho=\RR} ;
  • Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \displaystyle \wfz{p}{\varrho}=\varrho(p)} , gdy p jest symbolem zdaniowym;
  • Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \displaystyle \wfz{\neg\varphi}\varrho= {\rm Int}(\RR-\wfz{\varphi}\varrho)} ;
  • Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \displaystyle \wfz{\varphi\vee\psi}{\varrho}=\wfz{\varphi}{\varrho}\cup \wfz{\psi}{\varrho}} ;
  • Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \displaystyle \wfz{\varphi\wedge\psi}{\varrho}=\wfz{\varphi}{\varrho}\cap \wfz{\psi}{\varrho}} ;
  • Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \displaystyle \wfz{\varphi\to\psi}{\varrho}= {\rm Int}((\RR-\wfz{\varphi}\varrho) \cup\wfz\psi\varrho)} .

Powiemy, że formuła φ jest prawdziwaParser nie mógł rozpoznać (nieznana funkcja „\RR”): {\displaystyle \displaystyle \RR} , gdy jej wartością jest cały zbiór Parser nie mógł rozpoznać (nieznana funkcja „\RR”): {\displaystyle \displaystyle \RR} .

Twierdzenie

Formuła rachunku zdań jest intuicjonistycznym twierdzeniem, , gdy jest prawdziwa w Parser nie mógł rozpoznać (nieznana funkcja „\RR”): {\displaystyle \displaystyle \RR} .

Uwaga: Implikacja "tylko wtedy" w Twierdzeniu Uzupelnic zwawo| zachodzi nie tylko dla liczb rzeczywistych, ale także dla dowolnej przestrzeni topologicznej.

Przykład

Aby się przekonać, że prawo wyłączonego środka nie jest twierdzeniem logiki intuicjonistycznej, przypuśćmy, że ϱ(p)=(0,). Wtedy Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \displaystyle \wfz{p\vee\neg p}\varrho=\RR-\{0\}\neq \RR} .

Jeśli zaś Parser nie mógł rozpoznać (nieznana funkcja „\RR”): {\displaystyle \displaystyle \varrho(p)= \RR-\{1\}} to także Parser nie mógł rozpoznać (nieznana funkcja „\wfz”): {\displaystyle \displaystyle \wfz{\neg\neg p\to p}\varrho=\RR-\{1\}} , więc i formuła ¬¬pp 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:

   {(1)} =   1.2ex
                   =   3
                  {}
   
       {(2)} =   1.2ex
                   =   3
                  {,}
       
           {}
       {({}{ I})}
   
   {({}{ E})}

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

Przyjmijmy, że mamy pewien przeliczalny nieskonczony 

zbior zmiennych przedmiotowych. Termy rachunku lambda (lambda-termy) określamy przez indukcję:

  • Zmienne przedmiotowe są termami.
  • Jesli M i N są termami, to (MN) tez.
  • Jesli M jest termem i x jest zmienną, to (λxM)
  jest termem.

Wyrażenie postaci (MN) nazywamy aplikacją, a wyrażenie postaci (λxM) to λ-abstrakcja. Stosujemy nastepujące konwencje notacyjne:

-- opuszczamy zewnętrzne nawiasy;
-- aplikacja wiąze w lewo, tj. MNP oznacza (MN)P;
-- piszemy λx1xn.M zamiast λx1((λxnM)).

Uwaga: kropka w wyrażeniu λx1xn.M zastępuje lewy nawias, którego zasięg rozciąga się do końca wyrażenia M. Zwyczajowo używa się też notacji λx.M.

Operator lambda-abstrakcji λ, podobnie jak kwantyfikator, wiąze zmienne, tj. wszystkie wystąpienia x w wyrażeniu λxM 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 M[N/x], która jest podobna do definicji stosowanej dla formuł z kwantyfikatorami.

Definicja

Relacja beta-redukcji to najmniejsza relacja 

w zbiorze lambda-termow, spełniająca warunki:

-- (λxP)QβP[Q/x];

-- jesli MβM, to MNβMN, NMβNM oraz

  λxMβλxM.

Inaczej mówiąc, MβM zachodzi gdy podterm termu M postaci (λxP)Q, czyli redeks, zostaje zamieniony na wynik podstawienia P[Q/x]. Znakiem Parser nie mógł rozpoznać (nieznana funkcja „\rarrow”): {\displaystyle \displaystyle \rarrow_\beta} 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ą (λxP)QβP[Q/x] i wywołaniem procedury P, przy którym na miejsce parametru formalnego x podstawiony zostaje parametr aktualny Q.

Definicja

Przyjmijmy pewien zbiór 

typów atomowych, który oznaczymy przez Parser nie mógł rozpoznać (nieznana funkcja „\zmz”): {\displaystyle \displaystyle \zmz} (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 (x:τ), gdzie x 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 Γ(x:σ) oznaczamy otoczenie określone tak:

Parser nie mógł rozpoznać (nieznana funkcja „\przypadki”): {\displaystyle \displaystyle \Gamma(x{:}\sigma)(y) = \przypadki{\Gamma(y)}{} y = xParser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle }{\sigma}}

Lambda-termom można teraz przypisywać typy. Napis M:τ stwierdza, że M jest termem typu τ. Interpratecja 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 ΓM:τ, gdzie Γ jest otoczeniem typowym.

Aksjomat: Γ(x:σ)x:σ

Reguły:

Parser nie mógł rozpoznać (nieznana funkcja „\prooftree”): {\displaystyle \displaystyle \prooftree\Gamma(x{:}\sigma)\vdash M:\tau\justifies                   \Gamma\vdash(\lambda x\, M):\sigma\to\tau                  \using{\rm(Abs)}\endprooftree\displaystyle \prooftree\Gamma\vdash M: \sigma\to\tau\qquad\Gamma\vdash N: \sigma                 \justifies (MN) : \tau\using{\rm(App)}\endprooftree}

Ważne, że takie przypisanie typu zachowuje się przy beta-redukcji.

Fakt

Jeśli ΓM:τ oraz MβN, to 

ΓN:τ.

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

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 {lDADCH} do beta-redeksu postaci (λxP)Q:

   {(1)} =   1.2ex
                   =   3
                  { Q: }
   
       {(2)} =   1.2ex
                   =   3
                  {,x{:} P:}
       
           { xP:}
       {(Abs)}
   
   ( xP)Q:{(App)}

Normalizacja tamtego dowodu daje w wyniku dowód, którego odpowiednikiem jest term P[Q/x]. 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

Każdy term z typami prostymi można zredukować do postaci normalnej.

Wniosek z Twierdzeń Uzupelnic zrury|--Uzupelnic puscil| 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 Uzupelnic wprawo| 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

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.

Parser nie mógł rozpoznać (nieznana funkcja „\prooftree”): {\displaystyle \displaystyle \prooftree\Gamma\vdash M:\varphi\qquad\Gamma\vdash N:\psi\justifies \Gamma\vdash\<M,N\>:\varphi\wedge\psi\endprooftree\qquad\qquad \prooftree\Gamma\vdash M:\varphi\wedge\psi\justifies \Gamma\vdash \pi_1(M):\varphi\endprooftree\qquad\qquad \prooftree\Gamma\vdash M:\varphi\wedge\psi\justifies \Gamma\vdash \pi_2(M):\psi\endprooftree}