La sottigliezza sta nella distinzione tra lingua e metalinguaggio. Come diceva René Magritte :
(λ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,
e2→e′2ve2→ve′2
e2e′2ve2e′2ve2ve′2→evper 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 .
e→e′E[e]→vE[e′]
E[⋅]ee′E[⋅]ee′E[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.