Recentemente, tentei implementar o Cedille-Core de Aaron , uma linguagem de programação minimalista capaz de provar teoremas matemáticos sobre seus próprios termos. Eu também provei a indução para tipos de dados codificados em λ, o que deixou mais claro por que suas extensões seriam necessárias.
Menos ainda, ainda me pergunto de onde vieram essas extensões. Por que eles são o que são? O que os justifica? Eu sei, por exemplo, que algumas extensões, como a recursão, arruinam o idioma como um sistema de provas. Se eu decidisse também estender o CoC com outras primitivas, como justificaria? Entendo que é necessária uma prova de normalização, mas isso não prova que esses primitivos "façam sentido".
Em resumo, o que especificamente qualifica uma linguagem (e seu sistema de tipos) como um sistema capaz de provar teoremas sobre seus próprios termos?