Aqui está o contexto ( Estrutura e Interpretação de Programas de Computador , seção 1.1.8, sob o título "Nomes locais"):
Um parâmetro formal de um procedimento tem um papel muito especial na definição do procedimento, pois não importa qual o nome do parâmetro formal. Esse nome é chamado de variável vinculada e dizemos que a definição do procedimento liga seus parâmetros formais. O significado de uma definição de procedimento é inalterado se uma variável vinculada for renomeada consistentemente em toda a definição.
No final dessa última linha, há uma nota de rodapé (26), que diz:
O conceito de renomeação consistente é realmente sutil e difícil de definir formalmente. Lógicos famosos cometeram erros embaraçosos aqui.
A que ou a quem o texto se refere? Por que seria difícil definir "renomeação consistente", quais lógicos cometeram erros ao tentar definir isso e quais eram esses erros?
Respostas:
Esta é uma resposta parcial: não tenho idéia sobre a quais erros ou pessoas o SICP está se referindo. Só posso fornecer algumas dicas sobre "por que" renomear variáveis pode ser doloroso de lidar com precisão.
Antes de tudo, parece trivial definir. Por exemplo, podemos renomear variáveis vinculadas em somas indexadas
ondee é qualquer expressão e e{y/x} denota a substituição sintática de cada x por y . Trivial, certo?
Bem, se aplicarmos cegamente a regra acima, obtemos
Isso não é bom. Precisamos adicionar o requisito "y não ocorre em e " ou temos um conflito de nome.
Agora, considere esta renomeação correta
se queremos renomearx emy
Uma abordagem típica aqui é recorrer à redefinição dee { y/ x} como "substituição que evita a captura" e relaxar o requisito " y não ocorre em e " e, em vez disso, usar " y não ocorre livre eme
Em seguida, definimos ocorrências livres:
Por fim, capture evitando a substituição:
Espero ter acertado. (Minha primeira tentativa estava errada, a propósito)
Agora, imagine ter que lidar com essa definição complexa toda vez que quisermos provar algo na teoria da PL. Poderíamos, mas não queremos. É chato, tedioso, propenso a erros, atravessa a prova e não fornece informações ao leitor. Por esse motivo, muitos autores de PL simplesmente ignoram os detalhes dizendo (ou mesmo aceitando!) Que os termos devem ser considerados "até a renomeação de variáveis", que todas as variáveis vinculadas são assumidas distintas daquilo que precisam ser distintas, que assumimos a "convenção Barendregt", ou algo do mesmo efeito.
Para ser brutalmente honesto, isso é trapaça nas provas. Também poderíamos adicionar "piscadela piscadela, nudge nudge, não diga mais nada!" no mesmo espírito. Essencialmente, pedimos misericórdia e dizemos ao leitor: "olha, isso é chato, eu não quero fazer isso, você não quer ler - nós dois sabemos que, com um grande esforço, poderíamos reescrever essa prova para inclua todos os detalhes ".
Tecnicamente, é possível explorar esse atalho para provar uma declaração falsa. O revisor experiente, no entanto, sabe o que é "moralmente bom" e pode ser aperfeiçoado (com grande esforço) e o que é suspeito. O último pode incluir algo que depende da escolha real dos nomes de limite (portanto, não estamos realmente trabalhando "de acordo com o prometido!). Nesses casos, a revisão solicitará mais detalhes, para que ele possa ser convencido.
fonte