Uma abordagem para essas questões é através de codificações .
Digamos que você tenha um idioma eu1 e um idioma eu2 e queira mostrar que eles são de alguma forma "iguais", você pode fazer isso encontrando uma codificação
[[ ⋅ ]] : L1→ L2
e, em seguida, mostre que, para todos os programas o seguinte é válido:eu1M, N
M≅1Niff[[ M1]] ≅2[[ M2]]
Aqui é uma noção escolhida de equivalência de programa para . Para fazer isso nos idiomas digitados, normalmente também é tipos para por meio da função que é estendida aos ambientes de digitação, de forma que algo como o seguinte seja válido:≅EueuEueu1eu2┌ ⋅ ┐
Γ ⊢1M: αimplica┌ y- ┐ ⊢2[[ M]] : ┌ ct ┐
Aqui é o julgamento de digitação para . Toda a abordagem é chamada de
abstração completa .
⊢EueuEu
Para evitar a "maldição da universalidade de Church-Turing", normalmente impõe-se condições em , por exemplo, que seja de composição ou seja fechado com renomeação injetiva. Quanto mais condições , mais forte será o resultado completo da abstração.[[ ⋅ ]][[ ⋅ ]]
Isso também é o que Orchard e Yoshida estão tentando fazer (Teoremas 1 a 5), embora não o alcancem.