Substituição no Cálculo Lambda
No cálculo lambda, a substituição é o mecanismo que nos permite aplicar funções aos seus argumentos, substituindo variáveis por valores ou expressões.
É como ” executamos” uma função: pegamos o que ela diz para fazer e colocamos o argumento no lugar certo. Mas esse processo não é tão simples quanto parece — precisamos tomar cuidado para não misturar variáveis que têm significados diferentes.
Definição
A substituição no cálculo lambda ocorre quando aplicamos uma função
Formalmente, isso é escrito como:
onde:
é o corpo da função, é a variável ligada pelo , é a expressão que substitui .
Esse processo é chamado de β-redução, e o desafio está em garantir que a substituição preserve o significado original da expressão, evitando confusões entre variáveis livres (não ligadas por um
Warning
A substituição exige atenção especial para evitar erros conhecidos como captura de variáveis.
Distinção entre variáveis livres e ligadas
Como vimos anteriormente, uma variável é ligada se está no escopo de um
Durante a substituição, precisamos garantir que uma variável livre no argumento não seja acidentalmente “capturada” por um
Problema da Captura de Variáveis
Se o argumento contém uma variável livre que coincide com uma variável ligada no corpo da função, uma substituição direta pode gerar um resultado incorreto.
Para corrigir isso, às vezes é necessário renomear as variáveis ligadas antes de substituir.
Técnica de renomeação (α-conversão)
A renomeação, ou α-conversão, permite trocar o nome de uma variável ligada por outro nome que não aparece na expressão, desde que o significado permaneça o mesmo.
Por exemplo,
Exemplo
Exemplo 1
Considere a expressão:
Queremos aplicar a função externa
Substituição Direta (Errada)
Substituímos
Isso está errado. O
Renomeação (Correta)
Antes de substituir, renomeamos a variável ligada
Agora, aplicamos a substituição de
Resultado: