A sutileza reside em onde é feita a distinção entre linguagem e metalinguagem. Como René Magritte colocou:
( λ f. λ x . fx ) ( ( λ y. y) ( λ z. z) ) ( λ w . w )é um termo lambda, escrito na sintaxe dos termos lambda. Vamos chamar isso de termo lambdat. DeixeiM seja o termo lambda ( λ f. λ x . fx ) ( ( λ y. y) ( λ z. z) )). eu consigo escrevert = M( λ w . w )(e esta é uma verdadeira igualdade): tudo o que fiz foi dar um nome a um subtermo. Se você considerar o lado direito dessa igualdade "M( λ w . w )”, Não está escrito na sintaxe dos termos lambda; está escrito em uma notação matemática em que permitimos que uma carta represente um termo lambda.
Quando escrevemos uma regra como
e2→e′2ve2→ ve′2
afirma o seguinte axioma: para qualquer termo lambda
e2 e
e′2 e qualquer valor
v, E se
e2 reduz a
e′2 então
ve2 reduz a
ve′2. Aqui estamos novamente usando meta-notações (ou seja, notações matemáticas para raciocinar sobre uma linguagem): a seta
→expressar a relação de redução; metavariáveis em que uma letra indica a classificação (
e para termos lambda,
vpara valores) e subscritos e números primos distinguem entre metavariáveis do mesmo tipo; a notação de fração para escrever um axioma indutivo.
Quando escrevemos a regra
e →e′E[ e ] → v E[e′]
então de novo
E[ ⋅ ]é uma meta-notação, parte da metalinguagem e não da sintaxe lambda-term. A regra significa: para quaisquer termos lambda
e e
e′ e qualquer contexto de avaliação
E[ ⋅ ], E se
e reduz a
e′ então
E[ e ] reduz a
E[e′].
Se chamarmos o contexto ( λ f. λ x . fx ) [ ⋅ ] ( λ w . w ) pelo (meta-) nome Et, então t =Et[ ( λ y. y) ( λ z. z) ]. Novamente, essa é uma igualdade entre dois termos lambda, ou seja, o mesmo termo lambda está em ambos os lados do sinal de igual. O que temos à esquerda e à direita são duas meta-notações diferentes para o mesmo termo lambda( λ f. λ x . fx ) ( ( λ y. y) ( λ z. z) ) ( λ w . w ): um que usa um nome que demos a ele, outro que é um pouco mais complicado envolvendo um contexto ao qual demos um nome.
Dado o termo t, como você descobre como isso pode reduzir?
- Com a notação usando várias regras, você precisa encontrar uma árvore de deduções (em geral - aqui a derivação é linear, portanto, basta encontrar uma cadeia que conduz a um axioma).
- Com a notação usando contextos de avaliação, é necessário encontrar um contexto de avaliação adequado.
A gramática do contexto da avaliação segue a estrutura das regras de avaliação, portanto, na verdade, não são realmente dois métodos, mas duas maneiras diferentes de expressar a mesma definição.
Para entender isso, recomendo vivamente o seguinte exercício: no seu idioma favorito, implemente a avaliação de chamada por valor de termo lambda de maneira direta, com um tipo representando termos lambda e uma função executando uma etapa de redução.