No artigo Discriminando termos lambda codificados - Henk Barendregt, um codificador de um termo lambda M é um termo tal que M (e suas partes) podem ser reconstruídas a partir dele de maneira definível por lambda. Essencialmente, precisamos ser capazes de escrever um auto-intérprete \ mathsf E :
Há uma variedade de codificações como a de Kleene, que usa números naturais e a codificação moderna mais eficiente é uma sintaxe de ordem superior de Mogensen. Outra codificação possível (trivial) é a função de identidade, então o intérprete é novamente a função de identidade.
Existe alguma noção razoável de uma "codificação adequada" que proíba as codificações triviais?
Essa pergunta surgiu ao considerar o problema de parada aplicado ao cálculo lambda em vez de máquinas de Turing: se declarado em termos de codificação trivial, é válido pelo motivo trivial de que não há essencialmente nada que possamos fazer com um termo lambda citado.
Em outras palavras: Qual é o conjunto de funções que deveríamos esperar poder computar nos termos lambda citados?
Posso listar algumas coisas como: contar a profundidade do termo, obter subtermos, dizer se o nó raiz de um termo é um lambda ou aplicativo, ... mas hesitaria em definir uma "codificação adequada" apenas listando várias funções isso veio à mente.