Programowanie funkcjonalne - rachunek lambda

Rachunek lambda to struktura opracowana przez Alonzo Churcha w latach trzydziestych XX wieku w celu badania obliczeń z funkcjami.

  • Function creation - Kościół wprowadził notację λx.Edo oznaczenia funkcji, w której „x” jest argumentem formalnym, a „E” jest ciałem funkcjonalnym. Te funkcje mogą być bez nazw i pojedynczych argumentów.

  • Function application - Kościół użył notacji E1.E2 na oznaczenie zastosowania funkcji E1 do rzeczywistego argumentu E2. Wszystkie funkcje są na jednym argumencie.

Składnia rachunku Lambda

Rachunek Lamdby obejmuje trzy różne typy wyrażeń, tj.

E :: = x (zmienne)

| E 1 E 2 (zastosowanie funkcji)

| λx.E (tworzenie funkcji)

Gdzie λx.E nazywa się abstrakcją Lambda, a E jest znane jako wyrażenia λ.

Obliczanie rachunku lambda

Czysty rachunek lambda nie ma wbudowanych funkcji. Przeanalizujmy następujące wyrażenie -

(+ (* 5 6) (* 8 3))

Tutaj nie możemy zacząć od znaku „+”, ponieważ działa on tylko na liczbach. Istnieją dwa redukowalne wyrażenia: (* 5 6) i (* 8 3).

Najpierw możemy zredukować jeden z nich. Na przykład -

(+ (* 5 6) (* 8 3)) 
(+ 30 (* 8 3)) 
(+ 30 24) 
= 54

Reguła β-redukcji

Potrzebujemy reguły redukcji, aby obsłużyć λ

(λx . * 2 x) 4 
(* 2 4) 
= 8

Nazywa się to β-redukcją.

Parametr formalny może być używany wielokrotnie -

(λx . + x x) 4 
(+ 4 4) 
= 8

W przypadku wielu terminów możemy obsługiwać je w następujący sposób -

(λx . (λx . + (− x 1)) x 3) 9

Wewnętrzny x należy do wewnętrznego λ a zewnętrzne x należy do zewnętrznego.

(λx . + (− x 1)) 9 3 
+ (− 9 1) 3 
+ 8 3 
= 11

Zmienne wolne i związane

W wyrażeniu każde pojawienie się zmiennej jest „wolne” (do λ) lub „związane” (do λ).

β-redukcja (λx . E) y zastępuje każdy x który występuje za darmo w E z y. Na przykład -

Redukcja alfa

Redukcja alfa jest bardzo prosta i można ją przeprowadzić bez zmiany znaczenia wyrażenia lambda.

λx . (λx . x) (+ 1 x) ↔ α λx . (λy . y) (+ 1 x)

Na przykład -

(λx . (λx . + (− x 1)) x 3) 9 
(λx . (λy . + (− y 1)) x 3) 9 
(λy . + (− y 1)) 9 3 
+ (− 9 1) 3 
+ 8 3 
11

Twierdzenie Churcha-Rossera

Twierdzenie Churcha-Rossera stwierdza, co następuje -

  • Jeśli E1 ↔ E2, to istnieje E takie, że E1 → E i E2 → E. „Redukcja w jakikolwiek sposób może ostatecznie przynieść ten sam wynik”.

  • Jeśli E1 → E2 i E2 jest postacią normalną, to istnieje redukcja E1 do E2 w porządku normalnym. „Redukcja porządku normalnego zawsze da normalną formę, jeśli taka istnieje”.