Formalny opis rachunku lambda i nie tylko, kolejna wersja
Formalny opis rachunku lambda i nie tylko, kolejna wersja
Formalny opis rachunku lambda i nie tylko, kolejna wersja
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
3.4 Konwersje<br />
Mając relację redukcji → definiujemy związaną z nią relację konwersji ≡ przyjmując,<br />
że jest to najm<strong>nie</strong>jsza relacja spełniająca dla wszystkich L, M, N ∈ Λ warunki<br />
1) jeżeli M → N, to M ≡ N,<br />
2) jeżeli M ≡ N, to N ≡ M,<br />
3) jeżeli M ≡ L i L ≡ N, to M ≡ N.<br />
Lemat 3.3 Jeżeli relacja → jest redukcją, to relacja ∼ = jest kongruencją. ✷<br />
4 α-kon<strong>wersja</strong><br />
Relację α-redukcji w jednym kroku, czyli relację → α , definiujemy jako najm<strong>nie</strong>jszą<br />
relację zgodną z operacjami <strong>rachunku</strong> <strong>lambda</strong> zawierającą wszystkie pary<br />
λx.M → α λy.M[x := y],<br />
gdzie y jest zmienną <strong>nie</strong> będącą wolną w termie M (y ∉ F V (M)) i podstawialną<br />
w M za zmienną x.<br />
Relacja α-redukcji w jednym kroku wyznacza tak, jak to zostało wyżej <strong>opis</strong>ane,<br />
relację α-redukcji → α i relację α-konwersji ≡ α . Relację α-konwersji będziemy najczęściej<br />
oznaczać symbolem ≡, a czasem może być ona oznacza także symbolem<br />
= α , a nawet =.<br />
Oczywiście, α-kon<strong>wersja</strong> jest kongruencją.<br />
4.1 α-kon<strong>wersja</strong> a wyrażenia de Bruijna<br />
4.1.1 Zmienne w wyrażeniach de Bruijna<br />
Rolę zmiennych w termach de Bruijna pełnią liczby naturalne. Będziemy analizować<br />
wystąpienia zmiennych w takich wyrażeniach.<br />
Jeżeli wyraże<strong>nie</strong> de Bruijna uważamy za drzewo, to wystąpie<strong>nie</strong>m zmiennej w<br />
tym wyrażeniu będziemy nazywać dowolny liść tego drzewa. Jeżeli liściem tym (w<br />
tym liściu) jest liczba x, to będziemy mówić, że jest to wystąpie<strong>nie</strong> liczby x, a<br />
nawet to wystąpie<strong>nie</strong> – <strong>nie</strong> do końca popraw<strong>nie</strong> – będziemy utożsamiać z liczbą x.<br />
Jeżeli wyraże<strong>nie</strong> de Bruijna uważamy za ciąg znaków i liczb, to wystąpie<strong>nie</strong><br />
zmiennej x to pozycja w tym ciągu, na której znajduje się liczba x.<br />
Dla każdego wystąpienia zmiennej x w wyrażeniu de Bruijna M definiujemy<br />
indukcyj<strong>nie</strong> zag<strong>nie</strong>żdże<strong>nie</strong> z M (x) tego wystąpienia. Jeżeli M jest zmienną (czyli<br />
zmienną x), to z M (x) = 0. Jeżeli M = M 1 M 2 i wystąpie<strong>nie</strong> x znajduje się w<br />
termie M i , to z M (x) = z Mi (x). W końcu, jeżeli M = λM ′ , to z M (x) = z M ′(x) + 1.<br />
Wystąpienia w termie M zmiennej x nazywamy związanym, jeżeli x < z M (x).<br />
Pozostałe wystąpienia zmiennych nazywamy wolnymi.<br />
Lemat 4.1 Wykonywa<strong>nie</strong> podstawienia M[a ← b] polega na zamia<strong>nie</strong> wystąpień<br />
liczb x takich, że x = a + z M (x) liczbami b + z M (x). ✷<br />
Lemat 4.2 Jeżeli w wyrażeniu de Bruijna M występuje liczba x taka, że z M (x) <br />
x < z M (x) + h, to podczas wykonywania procedury Dodaj nazwy(M, h) występuje<br />
błąd polegający na próbie ustalenia nazwy Γ c dla pewnego c < 0. W przeciwnym<br />
7