Cálculo Lambda: Como os contextos de avaliação “funcionam”


8

No cálculo lambda puro, temos o conjunto de termos definido indutivamente (a gramática):

e:: =xλx.ee1e2

Sob a estratégia de avaliação de valor por chamada, temos as regras de inferência para redução beta e regras sobre como avaliar aplicativos (regras de congruência). Estou tentando entender como os contextos de avaliação podem substituir as regras de congruência sem realmente alterar a sintaxe do idioma. Sem contextos de avaliação, temos o seguinte:

e1e1e1e2e1e2
e
e2e2ve2ve2.

Isso faz sentido, pois se tivermos uma instância de uma expressão , fica claro que é do formato e, portanto,t=(λ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 substituirmos as regras de congruência pelos contextos de avaliação: , precisamos de apenas uma regra para expressar as regras de congruência da linguagem:

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

Estou confuso sobre como os contextos de avaliação podem nos dizer como avaliar a expressão de cima sem alterar a sintaxe do idioma. Não entendo como o contexto da avaliação "funciona" sem reescrever comott

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

onde . Não há razão a priori óbvia para avaliar sob chamada por valor sem o conhecimento de . Eu realmente não tenho idéia de onde estou errado. Alguém pode ajudar a corrigir meu pensamento?t=Et[((λy.y)λz.z)]tEt


A redução não é uma congruência com estratégias de redução, como chamada por valor. Veja também aqui .
Martin Berger

Eu não entendo sua resposta; seu uso de "congruência" como verbo não faz sentido para mim. Li as respostas no link que você forneceu, mas ainda não entendo por que é apresentado como uma forma sintática, mas nunca é realmente usado na sintaxe do idioma para o qual está definido. E
baffld

Não estou usando congruência como verbo. Eu não entendo o que você quer dizer. E é uma meta-variável que abrange os contextos de avaliação. Os contextos de avaliação são um subconjunto adequado de contextos. Contextos são programas com um buraco.
Martin Berger

Respostas:


8

A sutileza reside em onde é feita a distinção entre linguagem e metalinguagem. Como René Magritte colocou:

Ceci n'est pas une pipe.

(λ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

e2e2ve2ve2
afirma o seguinte axioma: para qualquer termo lambda e2 e e2 e qualquer valor v, E se e2 reduz a e2 então ve2 reduz a ve2. Aqui estamos novamente usando meta-notações (ou seja, notações matemáticas para raciocinar sobre uma linguagem): a setaexpressar 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

eeE[e]vE[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 lambdae 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.


2
Em conexão com o seu último parágrafo: todos os lógicos e todos os que estudam sintaxe devem ser feitos para implementar a substituição.
187 Andrej Bauer #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.