J'ai récemment tenté d'implémenter le Cedille-Core d' Aaron , un langage de programmation minimaliste capable de prouver des théorèmes mathématiques sur ses propres termes. J'ai également prouvé l'induction de types de données codés λ dessus, ce qui a permis de comprendre pourquoi ses extensions seraient nécessaires.
Nether Nether, je me demande toujours d'où viennent ces extensions. Pourquoi sont-ils ce qu'ils sont? Qu'est-ce qui les justifie? Je sais, par exemple, que certaines extensions, comme la récursivité, ruinent le langage comme système de preuves. Si je décidais d'étendre également CoC avec d'autres primitives, comment pourrais-je justifier? Je comprends qu'une preuve de normalisation est nécessaire, mais cela ne prouve pas que ces primitives "ont du sens".
Bref, qu'est-ce qui qualifie précisément une langue (et son système de types) comme un système capable de prouver des théorèmes sur ses propres termes?