24.01.2014 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!