Rachunek Lambda: różnica między kontekstami a kontekstami oceny

12

Po pierwsze, chciałbym powiedzieć, że mój tekst poniżej może zawierać błędy, więc możesz wskazać wszelkie błędy w moim sformułowaniu pytania.

Rozważ niepoprawny rachunek lambda z wartościami logicznymi i instrukcjami if, których warunki są podane przez tę składnię:

 t ::= v | t t | if t t t | x
 v ::= \x.t | #t | #f

Konteksty C w tym przypadku byłyby podane zgodnie z następującą składnią:

C ::= [-] | \x. C | C t | t C | if C t t | if t C t | if t t C 

Dodatkowo można zdefiniować konteksty oceny E zgodnie z inną składnią:

E ::= [-] | \x. E | v E | E t | if E t t 

Podzieliłem moje pytanie na trzy podpunkty, którymi chciałbym się zająć.

  1. Kiedy stosuje się te dwa pojęcia? Wiem na przykład, że konteksty oceny są używane do definiowania semantyki rachunku różniczkowego, ale użycie kontekstów wciąż mi umyka. Chciałbym też trochę potwierdzić moją wiedzę tutaj.
  2. Kiedy należy preferować jedno i dlaczego?
  3. Czy możesz wskazać odpowiednie artykuły, które mogą pomóc mi w rozwiązaniu tej kwestii?

źródło

Odpowiedzi:

15

Kontekst jest wykorzystywany do wielu celów, ale zwykle do definiowania zgodności programów. Konteksty oceny są podzbiorem kontekstów. Są zwykle używane do definiowania relacji redukcji. Podam przykład każdego z nich.

Jednym z formalnych sposobów definiowania równości programu jest stwierdzenie, że dwa programy i Nkontekstowo równe i mogą się wzajemnie zastępować w każdym kontekście bez zmiany zachowania. Można to określić w następujący sposób: M i N są kontekstowo równe dostępne dla wszystkich sytuacjach końcowych C [ ] o M i N : C, [ M ] T tylko wtedy, gdy C [ N ] T . Mówimy, że dla M , N kontekst się kończyMNMNC[]MNC[M]tC[N]tM,Njeśli ani ani C [ N ] nie mają wolnych zmiennych. EXPRESSION M t oznacza, że program M zmniejsza się skończoną liczbę kroków do wartości ti . (Nawiasem mówiąc, należy zauważyć, że definicja równoważności kontekstowej jest bardziej zaangażowana w przypadku bogatych pojęć obliczeniowych, np. Równoległych procesów).C[M]C[N]MtMt

MNE[M]E[N]
λλMNλx.Mλx.NλZrewidowany raport na temat syntaktycznych teorii kontroli sekwencyjnej i stanu autorstwa Felleisen i Hieb.
Martin Berger
źródło
14

[]

C::=[]xtCCtλx.C

C[]tC[t]t[]C[t][]t

(λx.M)NβM{xN}
M{xN}xNM

tMNxt=(λx.M)Nttt=(λx.M)NtCMNxt=C[(λx.M)N]C[M{xN}]

(λx.M)NβM{xN}(β)MβNC[M]βC[N](γ)
(λx.M)NβM{xN}(β)MβNλx.Mβλx.N(Cλ)MβNMPβNP(C@<)MβNPMβPN(C@>)

Ta definicja daje redukcję beta, tzn. Pojęcie oceny, które pozwala na ograniczenie dowolnego okresu. Obliczenia wykonywane w językach programowania często nie pozwalają na ograniczenie subtermów w funkcjach: reguła redukcji może być zastosowana tylko na najwyższym poziomie, lub po lewej lub prawej stronie aplikacji. Możemy to wyrazić, definiując nowy rodzaj kontekstu, który nie zezwala na wszystkie formy składniowe: Możemy użyć tej składni do zdefiniowania pojęcia semantycznego bez oceny częściowej: Możemy również przedstawić tę definicję, rozszerzając ją, tak jak to zrobiliśmy powyżej dla pełnej redukcji wersji beta:

D::=[]xtDDt
(λx.M)NnpM{xN}MnpND[M]npD[N]
(λx.M)NnpM{xN}(β)MnpNMPnpNP(C@<)MnpNPMnpPN(C@>)
D byłby nazywany kontekstem oceny, ponieważ służy do zdefiniowania pojęcia oceny. Kontekst oceny nie jest szczególnym rodzajem kontekstu; raczej, nazywając ją kontekst oceny jest to kwestia tego, co służy do kontekstu .

Podam jeszcze jeden przykład kontekstu. Zdefiniujmy wartości zgodnie z następującą składnią: Teraz zdefiniujmy inny rodzaj kontekstów: W porównaniu z powyżej, dziura może znajdować się po stronie funkcji aplikacji, jeśli argumentem aplikacji jest wartość. Zdefiniuj zatem następujące pojęcie redukcji: V

V::=xV1Vnλx.M
E::=[]MEEV
D
(λx.M)VcbvaM{xV}(βcbva)MβNE[M]cbvaE[N](γcbva)
Z zastrzeżeniem, że argument funkcji musi być wartością w pierwszej regule i że abstrakcje lambda nie są kontekstami, definiujemy strategię oceny call-by-value. Przy dalszym ograniczeniu, że argument jest oceniany przed funkcją, jest to wywołanie kolejności aplikacji według wartości.
Gilles „SO- przestań być zły”
źródło
1
Twoja ostatnia definicja kontekstów oceny jest bliższa pierwotnemu pojęciu Felleisen i Hieb. Są to środki składniowe, które pomagają wyrazić kolejność oceny warunków rachunku różniczkowego. Kontekst ewaluacji jest szczególnym rodzajem kontekstu, ponieważ pozwala jednoznacznie rozdzielić pojęcie na kontekst i redeks (jeśli to możliwe), wskazując w ten sposób deterministycznie, gdzie powinien nastąpić następny krok redukcji.
Dave Clarke
@DaveClarke Na marginesie możesz także użyć kontekstów oceny do zdefiniowania oceny dla niedeterministycznych pojęć obliczeń, w których nie masz unikalnego rozkładu na kontekst oceny i redeks.
Martin Berger,
@MartinBerger: Indeedy.
Dave Clarke
@DaveClarke Czy masz na myśli „ deterministyczny kontekst oceny jest szczególnym rodzajem kontekstu”? Potrafię wziąć dowolny zestaw kontekstów i na tej podstawie zdefiniować strategię oceny.
Gilles „SO- przestań być zły”
@Gilles: Konteksty oceny mogą definiować deterministyczną strategię redukcji. Nie sądzę, że widziałem wyrażenie „deterministyczny kontekst oceny”. Są one oczywiście szczególnym rodzajem kontekstu. Zgadzam się z twoim komentarzem; chodzi o to, że twoja odpowiedź pomija historyczne znaczenie kontekstów oceny, które polegało na zdefiniowaniu deterministycznego pojęcia redukcji.
Dave Clarke