Definicja rachunku lambda

Rachunek lambda to formalny system matematyczny oparty na abstrakcji lambda i zastosowaniu funkcji . Podano tutaj dwie definicje języka: definicję standardową i definicję wykorzystującą wzory matematyczne.

Standardowa definicja

Ta formalna definicja została podana przez Alonzo Churcha .

Definicja

Wyrażenia lambda składają się z

  • zmienne , , ..., , ...
  • symbole abstrakcji lambda ”.
  • nawiasy ( )

Zbiór wyrażeń lambda można zdefiniować indukcyjnie :

  1. Jeśli jest zmienną, to
  2. jest zmienną i , to
  3. Jeśli , to

Przypadki reguły 2 są znane jako abstrakcje, a przypadki reguły 3 są znane jako aplikacje.

Notacja

Aby notacja wyrażeń lambda była czytelna, zwykle stosuje się następujące konwencje.

  • Skrajne nawiasy są odrzucane: zamiast
  • Zakłada się, że aplikacje są lewostronnie skojarzone: można pisać zamiast
  • Ciało abstrakcji rozciąga się tak daleko w prawo, jak to możliwe : oznacza i nie
  • Sekwencja abstrakcji jest skrócona: jest skracane jako

Zmienne swobodne i związane

operator abstrakcji wiąże swoją zmienną wszędzie tam, gdzie występuje w abstrakcji. Mówi się, że zmienne, które wchodzą w zakres abstrakcji, są powiązane . Wszystkie inne zmienne są nazywane free . Na w poniższym wyrażeniu związaną i wolna: . Należy również zauważyć, że zmienna jest związana z jej „najbliższą” abstrakcją. W poniższym przykładzie pojedyncze wystąpienie wyrażenia w wyrażeniu jest ograniczone przez drugą lambdę:

Zbiór wolnych zmiennych wyrażenia lambda , jest oznaczony jako i jest zdefiniowany przez rekurencję w strukturze terminów, jak co następuje:

  1. , gdzie jest zmienną

Mówimy, że wyrażenie, które nie zawiera wolnych zmiennych, jest zamknięte . Zamknięte wyrażenia lambda są również znane jako kombinatory i są równoważne terminom w logice kombinatorycznej .

Zmniejszenie

Znaczenie wyrażeń lambda jest definiowane przez sposób, w jaki można je zredukować.

Istnieją trzy rodzaje redukcji:

  • α-konwersja : zmiana zmiennych powiązanych ( alfa );
  • β-redukcja : zastosowanie funkcji do ich argumentów ( beta );
  • η-redukcja : która oddaje pojęcie ekstensjonalności ( eta ).

Mówimy również o wynikowych równoważnościach: dwa wyrażenia są β-równoważne , jeśli można je β-przekonwertować na to samo wyrażenie, a równoważność α/η jest zdefiniowana podobnie.

Termin redex , skrót od wyrażenia redukowalnego , odnosi się do terminów podrzędnych, które można zredukować za pomocą jednej z reguł redukcji. Na przykład jest β-redexem w wyrażaniu podstawienia za M ; jeśli nie jest wolny w , jest η-redex. Wyrażenie, do którego redukuje się redex, nazywa się jego redukcją; używając poprzedniego przykładu, redukty tych wyrażeń to odpowiednio i .

konwersja α

Konwersja alfa, czasami nazywana zmianą nazwy alfa, umożliwia zmianę powiązanych nazw zmiennych. Na przykład konwersja alfa może dać . Terminy, które różnią się tylko konwersją alfa, nazywane są ekwiwalentami alfa . Często w zastosowaniach rachunku lambda terminy równoważne α są uważane za równoważne.

Dokładne zasady konwersji alfa nie są całkowicie trywialne. Po pierwsze, podczas konwersji alfa abstrakcji jedynymi wystąpieniami zmiennych, których nazwy są zmieniane, są te, które są powiązane z tą samą abstrakcją. Na przykład konwersja alfa może skutkować , ale nie mogło to skutkować . Ten ostatni ma inne znaczenie niż oryginał.

Po drugie, konwersja alfa nie jest możliwa, jeśli spowodowałaby przechwycenie zmiennej przez inną abstrakcję. Na przykład, jeśli zastąpimy przez w , otrzymujemy , co wcale nie jest takie samo.

W językach programowania o zakresie statycznym konwersję alfa można wykorzystać do uproszczenia rozpoznawania nazw , zapewniając, że żadna nazwa zmiennej nie maskuje nazwy w zakresie zawierającym (patrz zmiana nazwy alfa w celu uproszczenia rozpoznawania nazw ).

Podstawienie

, napisane to proces zastępowania wszystkich wolnych wystąpień zmiennej w wyrażeniu { . Substytucja na warunkach rachunku lambda jest definiowana przez rekurencję na strukturze terminów w następujący sposób (uwaga: x i y to tylko zmienne, podczas gdy M i N to dowolne wyrażenie λ).

Aby zastąpić abstrakcję lambda, czasami konieczna jest konwersja wyrażenia α. Na przykład nie jest poprawne, aby skutkowało , ponieważ podstawiony miał być wolny, ale ostatecznie został Prawidłowe podstawienie w tym przypadku to aż do α-równoważności. Zauważ, że substytucja jest definiowana jednoznacznie aż do równoważności α.

β-redukcja

Redukcja β oddaje ideę zastosowania funkcji. β w kategoriach podstawienia: β-redukcja jest mi .

kodowanie , mamy następującą β-redukcję: .

η-redukcja

Redukcja η wyraża ideę ekstensjonalności , która w tym kontekście polega na tym, że dwie funkcje są takie same wtedy i tylko wtedy, gdy dają ten sam wynik dla wszystkich argumentów. η-redukcja konwertuje między i nie pojawia się za darmo w .

Normalizacja

Celem β-redukcji jest obliczenie wartości. Wartość w rachunku lambda jest funkcją. Tak więc β-redukcja trwa, dopóki wyrażenie nie wygląda jak abstrakcja funkcji.

Wyrażenie lambda, którego nie można dalej zredukować ani przez β-redex, ani η-redex, ma postać normalną. Zauważ, że konwersja alfa może konwertować funkcje. Wszystkie postacie normalne, które można przekształcić na siebie nawzajem przez konwersję α, są zdefiniowane jako równe. Zobacz główny artykuł na temat normalnej postaci Beta, aby uzyskać szczegółowe informacje.

Normalny typ formularza Definicja.
Normalna forma Żadne redukcje β lub η nie są możliwe.
Normalna postać głowy W postaci abstrakcji lambda, której ciało nie jest redukowalne.
Słaba Głowa Normalna Forma W postaci abstrakcji lambda.

Definicja składni w BNF

Rachunek Lambda ma prostą składnię. Program rachunku lambda ma składnię wyrażenia, w którym

Nazwa BNF Opis
Abstrakcja
  <  wyrażenie  >  ::=  λ  <  lista-zmiennych  >  .  <  wyrażenie  > 
Definicja funkcji anonimowej.
Termin aplikacji
   <  wyrażenie  >  ::=  <  termin-aplikacji  > 
Aplikacja
    <  termin-aplikacji  >  ::=  <  termin-aplikacji  >  <  element  > 
Wywołanie funkcji.
Przedmiot
   <  termin-aplikacji  >  ::=  <  pozycja  > 
Zmienny
   <  pozycja  >  ::=  <  zmienna  > 
Np. x, y, fakt, suma, ...
Grupowanie
  <  element  >  ::=  (  <  wyrażenie  >  ) 
Wyrażenie w nawiasach.

Lista zmiennych jest zdefiniowana jako,

  <  lista-zmiennych  >  :=  <  zmienna  >  |  <  zmienna  >  ,  <  lista-zmiennych  > 

Zmienna używana przez informatyków ma składnię,

    
   
     
    <  zmienna  >  ::=  <  alfa  >  <  rozszerzenie  >  <  rozszerzenie  >  ::=  <  rozszerzenie  >  ::=  <  znak rozszerzenia  >  <  rozszerzenie  >  <  znak rozszerzenia  >  ::=  <  alfa  >  |  <  cyfra  >  | _  

Matematycy czasami ograniczają zmienną do pojedynczego znaku alfabetu. Podczas korzystania z tej konwencji przecinek jest pomijany na liście zmiennych.

Abstrakcja lambda ma niższy priorytet niż aplikacja, więc;

Aplikacje pozostają asocjacyjne;

Abstrakcja z wieloma parametrami jest równoważna z wieloma abstrakcjami jednego parametru.

Gdzie,

  • x jest zmienną
  • y jest listą zmiennych
  • z jest wyrażeniem

Definicja jako wzory matematyczne

Problem, w jaki sposób można zmieniać nazwy zmiennych, jest trudny. Ta definicja pozwala uniknąć problemu, zastępując wszystkie nazwy nazwami kanonicznymi, które są tworzone na podstawie pozycji definicji nazwy w wyrażeniu. Podejście jest analogiczne do tego, co robi kompilator, ale zostało przystosowane do pracy w ramach ograniczeń matematyki.

Semantyka

Wykonanie wyrażenia lambda przebiega przy użyciu następujących redukcji i przekształceń,

  1. α-konwersja -
  2. β-redukcja -
  3. η-redukcja -

Gdzie,

  • canonym to zmiana nazwy wyrażenia lambda w celu nadania wyrażeniu standardowych nazw na podstawie pozycji nazwy w wyrażeniu.
  • Operator podstawienia , jest podstawieniem nazwy wyrażenie lambda wyrażeniu lambda .
  • Swobodny zestaw zmiennych to zbiór zmiennych, które nie należą do abstrakcji lambda w .

Wykonanie polega na wykonywaniu redukcji β i redukcji η na podwyrażeniach w kanonimie wyrażenia lambda, aż wynikiem będzie funkcja lambda (abstrakcja) w postaci normalnej .

Wszystkie konwersje α wyrażenia λ są uważane za równoważne.

Kanonim - Nazwy kanoniczne

Canonym to funkcja, która pobiera wyrażenie lambda i zmienia nazwy kanonicznie na podstawie ich pozycji w wyrażeniu. Może to zostać zaimplementowane jako

Gdzie N to ciąg „N”, F to ciąg „F”, S to ciąg „S”, + to konkatenacja, a „nazwa” konwertuje ciąg na nazwę

Operatorzy mapy

Odwzoruj jedną wartość na inną, jeśli wartość znajduje się na mapie. O to pusta mapa.

Operator podstawienia

Jeśli L jest wyrażeniem lambda, x jest nazwą, a y jest wyrażeniem lambda; oznacza zastąpienie x przez y w L. Zasady są następujące:

Zauważ, że reguła 1 musi zostać zmodyfikowana, jeśli ma być używana w wyrażeniach lambda, których nazwy nie zostały zmienione kanonicznie. Zobacz Zmiany w operatorze podstawienia .

Wolne i związane zbiory zmiennych

Zbiór zmiennych wolnych wyrażenia lambda, M, jest oznaczony jako FV(M). Jest to zestaw nazw zmiennych, których instancje nie są powiązane (używane) w abstrakcji lambda, w wyrażeniu lambda. Są to nazwy zmiennych, które mogą być powiązane ze zmiennymi parametrów formalnych spoza wyrażenia lambda.

Zbiór powiązanych zmiennych wyrażenia lambda, M, jest oznaczony jako BV(M). Jest to zestaw nazw zmiennych, które mają instancje powiązane (używane) w abstrakcji lambda, w wyrażeniu lambda.

Poniżej podano zasady dla obu zestawów.

- Swobodny zbiór zmiennych Komentarz - Zbiór zmiennych związanych Komentarz
gdzie x jest zmienną gdzie x jest zmienną
Wolne zmienne M z wyłączeniem x Zmienne związane M plus x.
Połącz wolne zmienne z funkcji i parametru Połącz powiązane zmienne z funkcji i parametru

Stosowanie;

  • Zbiór zmiennych swobodnych FV jest używany powyżej w definicji redukcji η .
  • Bound Variable Set, BV, jest używany w regule dla β-redexu niekanonicznego wyrażenia lambda.

Strategia oceny

Ta matematyczna definicja ma taką strukturę, że przedstawia wynik, a nie sposób jego obliczenia. Jednak wynik może być inny w przypadku leniwej i chętnej oceny. Ta różnica jest opisana we wzorach oceny.

Podane tutaj definicje zakładają, że zostanie użyta pierwsza definicja pasująca do wyrażenia lambda. Ta konwencja jest stosowana, aby definicja była bardziej czytelna. W przeciwnym razie wymagane byłyby pewne warunki, aby definicja była precyzyjna.

Uruchamianie lub ocenianie wyrażenia lambda L to,

gdzie Q jest przedrostkiem nazwy, prawdopodobnie pustym ciągiem znaków, a eval jest zdefiniowany przez,

Następnie strategia ewaluacji może zostać wybrana jako:

Wynik może być różny w zależności od zastosowanej strategii. Ocena chętna zastosuje wszystkie możliwe redukcje, pozostawiając wynik w normalnej postaci, podczas gdy ocena leniwa pominie niektóre redukcje parametrów, pozostawiając wynik w „normalnej postaci słabej głowy”.

Normalna forma

Wszystkie redukcje, które można było zastosować, zostały zastosowane. Jest to wynik uzyskany z zastosowania chętnej oceny.

We wszystkich innych przypadkach

Słaba głowa w normalnej formie

Zastosowano redukcje funkcji (głowy), ale nie wszystkie redukcje parametru zostały zastosowane. Jest to wynik uzyskany z zastosowania oceny leniwej.

We wszystkich innych przypadkach

Wyprowadzenie normy z definicji matematycznej

Standardowa definicja rachunku lambda posługuje się pewnymi definicjami, które można uznać za twierdzenia, których można dowieść na podstawie definicji w postaci wzorów matematycznych .

Definicja nazewnictwa kanonicznego rozwiązuje problem tożsamości zmiennej poprzez konstruowanie unikalnej nazwy dla każdej zmiennej na podstawie pozycji abstrakcji lambda dla nazwy zmiennej w wyrażeniu.

Ta definicja wprowadza zasady stosowane w definicji standardowej i wyjaśnia je w kategoriach kanonicznej definicji zmiany nazwy.

Zmienne swobodne i związane

Operator abstrakcji lambda, λ, przyjmuje formalną zmienną parametru i wyrażenie ciała. Podczas oceny zmienna parametru formalnego jest identyfikowana z wartością parametru rzeczywistego.

Zmienne w wyrażeniu lambda mogą być „powiązane” lub „wolne”. Zmienne powiązane to nazwy zmiennych, które są już dołączone do formalnych zmiennych parametrów w wyrażeniu.

Mówi się, że zmienna parametru formalnego wiąże nazwę zmiennej, gdziekolwiek występuje ona w ciele. Zmienne (nazwy), które zostały już dopasowane do formalnej zmiennej parametru, nazywane są powiązanymi . Wszystkie inne zmienne w wyrażeniu są nazywane free .

Na przykład w poniższym wyrażeniu y jest zmienną związaną, a x jest wolną: . Należy również zauważyć, że zmienna jest powiązana z jej „najbliższą” abstrakcją lambda. W poniższym przykładzie pojedyncze wystąpienie x w wyrażeniu jest ograniczone przez drugą lambdę:

Zmiany w operatorze podstawienia

W definicji Operatora Zastępczego reguła,

należy wymienić na,

Ma to na celu zatrzymanie zastępowania powiązanych zmiennych o tej samej nazwie. To nie miałoby miejsca w kanonicznie przemianowanym wyrażeniu lambda.

Na przykład poprzednie zasady zostałyby błędnie przetłumaczone,

Nowe zasady blokują to zastąpienie, tak że pozostaje takie,

Transformacja

Znaczenie wyrażeń lambda jest definiowane przez sposób, w jaki wyrażenia mogą być przekształcane lub redukowane.

Istnieją trzy rodzaje transformacji:

  • α-konwersja : zmiana zmiennych powiązanych ( alfa );
  • β-redukcja : stosowanie funkcji do ich argumentów ( beta ), wywoływanie funkcji;
  • η-redukcja : która oddaje pojęcie ekstensjonalności ( eta ).

Mówimy również o wynikowych równoważnościach: dwa wyrażenia są β-równoważne , jeśli można je β-przekonwertować na to samo wyrażenie, a równoważność α/η jest zdefiniowana podobnie.

Termin redex , skrót od wyrażenia redukowalnego , odnosi się do terminów podrzędnych, które można zredukować za pomocą jednej z reguł redukcji.

konwersja α

Konwersja alfa, czasami nazywana zmianą nazwy alfa, umożliwia zmianę powiązanych nazw zmiennych. Na przykład konwersja alfa może dać . Terminy, które różnią się tylko konwersją alfa, nazywane są ekwiwalentami alfa .

W konwersji α nazwy mogą być zastępowane nowymi nazwami, jeśli nowa nazwa nie jest wolna w treści, ponieważ prowadziłoby to do przechwycenia wolnych zmiennych .

że podstawienie nie będzie rekurencyjne w treści wyrażeń lambda z parametrem formalnym powodu zmiany operatora podstawienia opisanej powyżej.

Zobacz przykład;

konwersja α wyrażenie λ Nazwany kanonicznie Komentarz
Oryginalne wyrażenia.
poprawnie zmień nazwę y na k, (ponieważ k nie jest używane w treści) Brak zmian w kanonicznym wyrażeniu o zmienionej nazwie.
naiwnie zmień nazwę y na z (źle, ponieważ z jest wolne w ) zostaje przechwycony.

β-redukcja (unikanie przechwytywania)

β-redukcja oddaje ideę zastosowania funkcji (zwanej także wywołaniem funkcji) i implementuje podstawienie rzeczywistego wyrażenia parametru zamiast formalnej zmiennej parametru. β-redukcja jest zdefiniowana w kategoriach podstawienia.

Jeśli żadne nazwy zmiennych nie są wolne w rzeczywistym parametrze i związane w treści, β-redukcję można przeprowadzić na abstrakcji lambda bez zmiany nazwy kanonicznej.

Zmiana nazwy alfa może być użyta do zmiany nazw, które są wolne w związane w warunek wstępny tej transformacji.

Zobacz przykład;

β-redukcja wyrażenie λ Nazwany kanonicznie Komentarz
Oryginalne wyrażenia.
naiwna beta 1,
Kanoniczny
Naturalny
x (P) i y (PN) zostały uchwycone w podstawieniu.

Alfa zmień nazwę wewnętrzna, x → a, y → b

Beta 2,
Kanoniczny
Naturalny
x i y nie zostały przechwycone.

w tym przykładzie

  1. W β-redeksie,
    1. Wolne zmienne to
    2. Zmienne związane to
  2. Naiwny β-redex zmienił znaczenie wyrażenia, ponieważ x i y z rzeczywistego parametru zostały przechwycone, gdy wyrażenia zostały podstawione w wewnętrznych abstrakcjach.
  3. Zmiana nazwy alfa usunęła problem, zmieniając nazwy x i y w wewnętrznej abstrakcji, tak aby różniły się od nazw x i y w rzeczywistym parametrze.
    1. Wolne zmienne to
    2. Zmienne związane to
  4. Następnie β-redex miał zamierzone znaczenie.

η-redukcja

Redukcja η wyraża ideę ekstensjonalności , która w tym kontekście polega na tym, że dwie funkcje są takie same wtedy i tylko wtedy, gdy dają ten sam wynik dla wszystkich argumentów.

Redukcji η można używać bez zmian w wyrażeniach lambda, których nazwy nie zostały zmienione kanonicznie.

W tym przykładzie pokazano problem z użyciem η-redex, gdy f ma wolne zmienne,

Zmniejszenie Wyrażenie lambda β-redukcja
Naiwna redukcja η

To niewłaściwe użycie redukcji η zmienia znaczenie, pozostawiając x w niepodstawiony.