Ao transformar termos de um idioma para outro, a propriedade intuitivamente desejada é a preservação da semântica (como usada, por exemplo, aqui para uma transformação do CPS):
Estou um pouco preocupado, no entanto, ao conciliar isso com os termos clássicos correção (ou solidez) e integridade dos sistemas lógicos. Normalmente, eu consideraria a declaração acima a propriedade de integridade de (e o inverso a definição de correção).
Intuitivamente, no entanto, um compilador deve estar correto e não completo (como por exemplo, a verificação de tipo geralmente exclui os programas corretos). O inverso da afirmação acima é verdadeira apenas se é injetivo: se o idioma de origem contiver, por exemplo, booleanos e operações neles e a compilação os substituir por codificação da Igreja, o idioma de destino poderá avaliar operações booleanas em termos compilados de literais booleanos e abstrações lambda, que o idioma de origem não pode avaliar.
- Estou certo de presumir que a afirmação acima é propriedade da integridade (para que o requisito intuitivo realmente tenha um nome contra-intuitivo)?
- Também estou certo em minha conclusão de que um compilador não injetor geralmente não está correto?