Para uma prova de correção, estou procurando uma noção utilizável de equivalência de programa para os sistemas de tipo puro (PTSs) de Barendregt; falta isso, para sistemas de tipos específicos suficientes. Meu objetivo é simplesmente usar a noção, não investigá-la por si mesma.
Essa noção deve ser " extensional " - em particular, para provar que , deve ser suficiente para provar que t 1 para todos os valores v do tipo apropriado.
Equivalência denotacional
A equivalência denotacional satisfaz facilmente todos os lemas certos, mas uma semântica denotacional para PTS arbitrário parece bastante desafiadora - já pareceria difícil para o Sistema F.
Equivalência contextual / observacional
A alternativa óbvia são então várias formas de equivalência contextual (dois termos são equivalentes se nenhum contexto básico puder distingui-los), mas sua definição não é imediatamente utilizável; os vários lemas não são triviais para provar. Eles foram provados para PTS? Como alternativa, a teoria seria uma "extensão óbvia" ou há razões para acreditar que a teoria seria significativamente diferente?
Edição: Eu não disse o que é difícil acima.
Parte fácil: a definição
Definir a equivalência não é muito difícil, e a definição aparece em muitos artigos (começando pelo menos no estudo de Plotkin 1975 sobre o PCF, se não antes - a fonte pode ser a tese de doutorado de Morris de 1968). Nós se, para todos os contextos de terra C , C [ t 1 ] ≃ C [ t 2 ] - ou seja, C [ t 1 ] e C [ t 2 ] derem o mesmo resultado. Você tem algumas opções aqui com muitas alternativas: Por exemplo, em uma linguagem fortemente normalizando, se você tem um tipo de terreno de naturais, você pode dizer que os contextos de terra são os que naturais de retorno, em seguida, significa que a e b avaliar para o mesmo número. Com o não término, para linguagens razoáveis, basta usar "X termina" como observação, porque se dois programas são equivalentes ao observar a terminação, eles também são equivalentes ao observar o resultado.
Parte difícil: as provas
No entanto, esses documentos geralmente não explicam o quão difícil é realmente usar essa definição. Todas as referências abaixo mostram como lidar com esse problema, mas a teoria necessária é mais difícil do que se pensa. Como provamos que ? Realmente fazemos análise de casos e indução em contextos? Você não quer fazer isso.
Como Martin Berger aponta, você deseja usar a bisimulação (como feita por Pitts) ou uma relação de equivalência lógica (que Harper chama simplesmente de "equivalência lógica").
Finalmente, como você prova a extensionalidade conforme definido acima?
Harper resolve essas questões em 10 páginas para o Sistema T, através de considerável inteligência e relações lógicas. Pitts leva mais. Alguns idiomas são ainda mais complexos.
Como lidar com isso
Na verdade, estou tentado a fazer minhas provas condicionalmente em uma teoria conjecturada da equivalência para o PTS, mas as teorias atuais exigem argumentos não triviais, portanto, não tenho certeza da probabilidade de tal conjectura ser mantida.
Estou ciente (embora não em detalhes) dos seguintes trabalhos:
- Andrew Pitts (por exemplo, na ATTAPL para um Sistema F estendido, e em alguns artigos, como as "Teorias de Equivalência de Programas com Base Operacional de 58 páginas").
- Fundamentos práticos de linguagens de programação (capítulos 47-48), inspirados em Pitts (mas que afirma ter provas mais simples).
- Um estudo lógico da equivalência de programas . Não consigo encontrar um resumo em inglês, mas parece gastar muito esforço com efeitos colaterais (referências), o que parece uma complicação ortogonal.