Como declarar a adequação de uma codificação do cálculo lambda em si?

8

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 :MMME

EM=βM.

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.

Brennan.Tobias
fonte
1
Escolha uma determinada "codificação adequada" concreta (por exemplo, a fornecida por Kleene). Dizer que uma codificação é adequada, se houver um -termo tendo um termo codificado pelo para a codificação Kleene. Isso é um pouco bobo, mas isso funcionaria para seus propósitos? ιλιι(M)
Cody
1
Eu acho que você realmente listou as operações principais: informar o tipo de termo (variável, abstração, aplicativo) e, quando apropriado, obter subtermos. O único ponto delicado é representar a ligação das lambdas, mas você pode fazer isso usando a notação de Bruijn. Qualquer outra operação razoável (por exemplo, contando a profundidade) segue-se a elas, porque você é capaz de desconstruir completamente um termo. Você concordaria?
Damiano Mazza
O que @DamianoMazza disse. Eu tentei explicar um pouco disso em math.andrej.com/2016/01/04/… #
Andrej Bauer
@ Andrej Bauer Não acredito que você precise de todas essas coisas. Não para resolver o meu problema.
Andrea Asperti 13/03/19
Claro que não, o bit relevante é apenas um parágrafo no começo, explicando o que é necessário para ter uma codificação aceitável da sintaxe.
Andrej Bauer

Respostas:

5

Como apontado por outros, a definição óbvia de uma codificação "adequada" é que ela é equitranslutável a qualquer codificação padrão. A questão é, portanto, caracterizar essas codificações em termos de propriedades mais elementares.

( Nota histórica . Smullyan estudou essa questão no contexto da lógica combinatória. Quando eu era estudante, Henk Barendregt sugeriu as conjecturas de Smullyan para mim como um problema de pesquisa - o que levou à minha primeira publicação científica.)

http://drops.dagstuhl.de/opus/volltexte/2011/3249/

Para resumir, dado um mapa , consideramos se existem combinadores que satisfazem determinadas propriedades. Os mais significativos são:¯:ΛΛ

  • AM¯N¯=MN¯
  • BM¯=M¯¯
  • PiM0M1¯=Mi¯,i{0,1}
  • ZbM¯={λxy.xMb{I,K,S}λxy.yotherwise
  • ΔM¯N¯={λxy.xMNλxy.yotherwise
  • UM¯=M¯s , onde é uma codificação padrão¯s
  • U1M¯s=M¯

É fácil ver que qualquer codificação adequada possui essas propriedades. O principal resultado do artigo (Corolário 14) é que, para uma codificação adequada, basta um dos seguintes:

  • A+Δ ;
  • U1+Δ ;
  • U1+Pi+Zb ;
  • Pi+Zb+ "o intervalo de está contido em um conjunto recursivamente enumerável e existe um combinador que decide se um determinado elemento desse conjunto está ou não no intervalo".¯
Andrew Polonsky
fonte
4

Esta não é uma resposta. É uma elaboração da pergunta, que me parece interessante e talvez deva merecer mais atenção do que realmente recebeu.

Antes de mais, deixe-me dizer que existe uma condição importante na definição de Barendregt que foi omitida por Brennan, a saber, o fato de o estar na forma normal , que exclui imediatamente a função de identidade como uma codificação adequada.M

Agora, a questão pode ser formulada com mais precisão, seguindo a sugestão de Cody.

Dadas duas codificações, elas são recursivamente isomórficas? Em outras palavras, suponha que haja duas codificações, de modo que

𝖤1M1=βMand𝖤2M2=βM
existe um termo lambda tal que para qualquer termoFM

E2(FM1)=βM
e vice-versa?

Se a resposta não for, quais são os requisitos abstratos "mínimos" que devem ser adicionados para garantir isso?

Andrea Asperti
fonte