Lambda Calculus: come funzionano i contesti di valutazione


8

Nel calcolo lambda puro, abbiamo l'insieme di termini definito induttivamente (la grammatica):

e::=xλx.ee1e2

Sotto la strategia di valutazione call-by-value, abbiamo le regole di inferenza per la riduzione beta e le regole su come valutare le applicazioni (regole di congruenza). Sto cercando di capire come i contesti di valutazione possano sostituire le regole di congruenza senza cambiare effettivamente la sintassi della lingua. Senza contesti di valutazione, abbiamo quanto segue:

e1e1e1e2e1e2
e
e2e2ve2ve2.

Questo ha senso, poiché se abbiamo un'istanza di un'espressione , è chiaro che è del formato e quindit=(λf.λx.fx)((λy.y)λz.z)λw.we1e2e1e2

(λf.λx.fx)((λy.y)λz.z)λw.w(λf.λx.fx)(λz.z)λw.w

Se sostituiamo le regole di congruenza con contesti di valutazione: allora abbiamo bisogno di una sola regola per esprimere le regole di congruenza del linguaggio:

E::=[]EevE
eeE[e]E[e].

Sono confuso su come i contesti di valutazione possano dirci come valutare l'espressione dall'alto senza cambiare la sintassi della lingua. Non capisco come il contesto di valutazione "funziona" senza dover riscrivere comett

Et=(λf.λx.fx)[]λw.w

dove . Non vi è alcuna ragione a priori ovvia per valutare sotto chiamata per valore senza conoscenza di . Non ho davvero idea di dove sbaglio. Qualcuno può aiutarmi a correggere il mio pensiero?t=Et[((λy.y)λz.z)]tEt


La riduzione non è una congruenza con strategie di riduzione come call-by-value. Vedi anche qui .
Martin Berger,

Non capisco la tua risposta; il tuo uso della "congruenza" come verbo non ha senso per me. Ho letto le risposte nel link che hai fornito, ma ancora non capisco perché sia presentato come una forma sintattica, tuttavia non viene mai effettivamente utilizzato nella sintassi della lingua per cui è definito. E
sconcertato il

Non sto usando la congruenza come verbo. Non capisco cosa intendi. E è una meta-variabile che va oltre contesti di valutazione. I contesti di valutazione sono un sottoinsieme proprio di contesti. I contesti sono programmi con un buco.
Martin Berger,

Risposte:


8

La sottigliezza sta nella distinzione tra lingua e metalinguaggio. Come diceva René Magritte :

Ceci n'est pas une pipe.

(λf.λx.fx)((λy.y)(λz.z))(λw.w) è un termine lambda, scritto nella sintassi per termini lambda. Chiamiamo questo termine lambda . Sia il termine lambda . Posso scrivere (e questa è una vera uguaglianza): tutto quello che ho fatto è stato dare un nome a un sotterfugio. Se consideri il lato destro di questa uguaglianza " ", non è scritto nella sintassi dei termini lambda; è scritto in una notazione matematica in cui permettiamo a una lettera di indicare un termine lambda.tM(λf.λx.fx)((λy.y)(λz.z))t=M(λw.w)M(λw.w)

Quando scriviamo una regola come indica il seguente assioma: per qualsiasi termine lambda ed e qualsiasi valore , se si riduce a quindi riduce a . Qui stiamo di nuovo usando meta-notazioni (ovvero notazioni matematiche per ragionare su una lingua): la freccia per esprimere la relazione di riduzione; metavariabili in cui una lettera indica l'ordinamento ( per termini lambda,

e2e2ve2ve2
e2e2ve2e2ve2ve2evper i valori) e pedici e numeri primi distinguono tra metavariabili dello stesso tipo; la notazione della frazione per scrivere un assioma induttivo.

Quando scriviamo la regola nuovo è una meta-notazione, parte del metalinguaggio e non della lambda -terma sintassi. La regola significa: per qualsiasi termine lambda ed e qualsiasi contesto di valutazione , se riduce a allora riduce a .

eeE[e]vE[e]
E[]eeE[]eeE[e]E[e]

Se chiamiamo il contesto con il nome (meta-) , allora . Ancora una volta, questa è un'uguaglianza tra due termini lambda, ovvero lo stesso termine lambda si trova su entrambi i lati del segno uguale. Quello che abbiamo a sinistra e a destra sono due diverse meta-notazioni per lo stesso termine lambda : uno che usa un nome che gli abbiamo dato, un altro un po 'più complicato che coinvolge un contesto a cui abbiamo dato un nome.(λf.λx.fx)[](λw.w)Ett=Et[(λy.y)(λz.z)](λf.λx.fx)((λy.y)(λz.z))(λw.w)

Dato il termine , come trovi come può ridurre?t

  • Con la notazione che utilizza più regole, devi trovare un albero di detrazione (in generale - qui la derivazione è lineare, quindi devi semplicemente trovare una catena che porta ad un assioma).
  • Con la notazione che utilizza i contesti di valutazione, è necessario trovare un contesto di valutazione adatto.

La grammatica del contesto di valutazione segue la struttura delle regole di valutazione, quindi in realtà questi non sono in realtà due metodi ma due modi diversi di esprimere la stessa definizione.

Per capirlo, raccomando vivamente il seguente esercizio: nella tua lingua preferita, implementa la valutazione del valore in termini lambda in modo semplice, con un tipo che rappresenta i termini lambda e una funzione che esegue un passo di riduzione.


2
In relazione al tuo ultimo paragrafo: tutti i logici e chiunque studi la sintassi dovrebbero essere fatti per implementare la sostituzione.
Andrej Bauer,
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.