Calcolo lambda: differenza tra contesti e contesti di valutazione


12

In primo luogo, vorrei dire che il mio testo qui sotto può contenere errori, quindi sentiti libero di evidenziare eventuali errori nella mia formulazione della domanda.

Considera un calcolo lambda non tipizzato con booleani e istruzioni if ​​i cui termini sono dati da questa sintassi:

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

I contesti C in questo caso verrebbero dati secondo questa sintassi:

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

Inoltre, si potrebbero definire i contesti di valutazione E secondo questa altra sintassi:

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

Ho diviso la mia domanda in tre punti secondari che vorrei affrontare.

  1. Quando vengono utilizzate le due nozioni? So per esempio che i contesti di valutazione sono usati per definire la semantica del calcolo, ma l'uso dei contesti mi sfugge ancora. Vorrei anche qualche conferma delle mie conoscenze qui.
  2. Quando si preferisce l'uno all'altro e perché?
  3. Potresti indicare articoli pertinenti che potrebbero aiutarmi a risolvere la questione?

Risposte:


15

Il contesto viene utilizzato per molti scopi, ma in genere per definire congruenze sui programmi. I contesti di valutazione sono un sottoinsieme di contesti. Sono in genere utilizzati per definire le relazioni di riduzione. Lasciami fare un esempio di ciascuno.

Un modo formale per definire l'uguaglianza dei programmi è quello di dire che due programmi e sono contestualmente uguali e possono sostituirsi a vicenda in ogni contesto senza cambiare comportamento. Possiamo definirlo come segue: e sono contestualmente uguali forniti per tutti i contesti di chiusura per e : se e solo se . Diciamo che un contesto si sta chiudendo per se né né hanno variabili libere. L'espressioneN M N C [ ] M N C [ M ] t C [ N ] t M , N C [ M ] C [ N ] M t M tMNMNC[]MNC[M]tC[N]tM,NC[M]C[N]Mtsignifica che il programma riduce in un numero finito di passi al valore . (A parte, nota che la definizione di equivalenza contestuale è più coinvolta per le nozioni ricche di calcolo, ad esempio processi simultanei.)Mt

Al contrario, i contesti di valutazione sono contesti che non bloccano la valutazione. Più precisamente, un contesto di valutazione è un termine con un buco nel punto in cui deve aver luogo il prossimo passo di riduzione atomica (o può avvenire per un calcolo non deterministico). Quindi la seguente regola dovrebbe valere per i contesti di valutazione: Come esempio di utilizzo dei contesti di valutazione, considera le regole di riduzione per call-by-value -calculus, dove non riduciamo sotto . Quindi, anche quando , non abbiamo una riduzione λλMNλx. Mλx. Nλ

MNE[M]E[N]
λλMNλx.Mλx.N. Questo può essere facilmente espresso con la regola contestuale generale sopra, insieme a una grammatica per i contesti di valutazione che omette espressioni . I contesti di valutazione sono stati utilizzati per la prima volta in The Revised Report On The The Syntactic Theories of Sequential Control and State di Felleisen e Hieb.λ

14

Un contesto è una nozione sintattica. Un contesto è un termine con un buco in esso. (Occasionalmente ci sono contesti multi-hole, la definizione sarà data chiaramente in quel caso.) La sintassi dei contesti è definita prendendo la sintassi dei termini e permettendo a un sotterma di essere un buco anziché un termine. In BNF (io uso il lambda-calcolo come esempio, senza valori booleani e if che non danno nulla all'esempio.): []

C::=[]xtCCtλx.C

Insieme alla definizione di un contesto arriva la definizione di mettere un termine in un contesto. Se è un contesto e è un termine, allora è il termine ottenuto inserendo nell'albero della sintassi dove il foro è in . Questa è sostanzialmente una sostituzione in cui si garantisce che la variabile si verifichi esattamente una volta (ma si noti che la "variabile" che viene sostituita è una variabile a livello meta, , non una variabile nel lambda-calcolo o altra lingua dei termini ).C[]tC[t]t[]C[t][]t

I contesti sono usati per formulare varie definizioni in semantica. Un esempio comune è che la maggior parte delle nozioni di valutazione implica la definizione di contesti in cui la valutazione può essere eseguita. Ad esempio, considera il lambda-calcolo. La nozione fondamentale di valutazione è data dalla regola di riduzione beta: dove è la sostituzione applicata al .

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

Questa non è la definizione completa di beta-riduzione: dato un termine , può beta-ridurre se ci sono sottotermi e e una variabile tale che ; ma più in generale possono beta-ridurre se c'è un sottotermine tale che . Un altro modo per esprimere questo è che può ridurre beta se c'è un contesto e alcuni termini e e una variabile tale chetMNxt=(λx.M)Nttt=(λx.M)NtCMNxt=C[(λx.M)N]. Quando c'è una tale riduzione, il lato destro è . Per usare una notazione formale, la riduzione beta è definita dalle seguenti regole di detrazione: La stessa definizione può essere espressa rendendo espliciti tutti i tipi di contesti: 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@>)

Questa definizione produce beta-riduzione, ovvero una nozione di valutazione che consente di ridurre qualsiasi sotterfugio. I calcoli eseguiti nei linguaggi di programmazione spesso non consentono di ridurre i sottotermini all'interno delle funzioni: la regola di riduzione può essere applicata solo al livello superiore, o sul lato sinistro o sul lato destro di un'applicazione. Possiamo esprimerlo definendo un nuovo tipo di contesto che non consente tutte le forme sintattiche: Possiamo usare questa sintassi per definire la nozione semantica di valutazione non parziale: Potremmo anche presentare questa definizione espandendola, come abbiamo fatto sopra per la riduzione beta completa:

D::=[]xtDDt
(λx.M)NnpM{xN}MnpND[M]npD[N]
(λx.M)NnpM{xN}(β)MnpNMPnpNP(C@<)MnpNPMnpPN(C@>)
D verrebbe chiamato contesto di valutazione perché viene utilizzato per definire una nozione di valutazione. Un contesto di valutazione non è un tipo speciale di contesto; piuttosto, chiamarlo un contesto di valutazione è una questione di ciò per cui il contesto è usato .

Darò un altro esempio di contesto. Definiamo i valori base alla seguente sintassi: Ora definiamo un altro tipo di contesti: Rispetto a sopra, il buco può trovarsi sul lato funzionale di un'applicazione se l'argomento dell'applicazione è un valore. Definire quindi la seguente nozione di riduzione: V

V::=xV1Vnλx.M
E::=[]MEEV
D
(λx.M)VcbvaM{xV}(βcbva)MβNE[M]cbvaE[N](γcbva)
Con la limitazione che l'argomento della funzione deve essere un valore nella prima regola e che le astrazioni lambda non sono contesti, stiamo definendo una strategia di valutazione call-by-value. Con l'ulteriore limitazione che l'argomento viene valutato prima della funzione, si tratta di una chiamata d'ordine applicativa per valore.

1
La tua ultima definizione di contesti di valutazione è più vicina alle nozioni originali di Felleisen e Hieb. Sono un mezzo sintattico per aiutare a esprimere l'ordine di valutazione dei termini di un calcolo. Un contesto di valutazione è un tipo speciale di contesto, in quanto consente di fattorizzare in modo univoco un termine in un contesto e un redex (quando possibile), indicando in tal modo, deterministicamente, dove dovrebbe avvenire la fase di riduzione successiva.
Dave Clarke,

@DaveClarke A parte, puoi anche usare contesti di valutazione per definire la valutazione per nozioni non deterministiche di calcolo, dove non hai una scomposizione unica nel contesto di valutazione e redex.
Martin Berger,

@MartinBerger: Indeedy.
Dave Clarke,

@DaveClarke Intendi "un contesto di valutazione deterministica è un tipo speciale di contesto"? Posso prendere una serie arbitraria di contesti e definire una strategia di valutazione basata su di essa.
Gilles 'SO- smetti di essere malvagio' il

@Gilles: i contesti di valutazione possono definire una strategia di riduzione deterministica. Non credo di aver visto la frase "contesto di valutazione deterministica". Sono ovviamente un tipo speciale di contesto. Sono d'accordo con il tuo commento; il punto è più che alla tua risposta manca il significato storico dei contesti di valutazione, che è stato quello di definire una nozione deterministica di riduzione.
Dave Clarke,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.