Di recente ho tentato di implementare il Cedille-Core di Aaron , un linguaggio di programmazione minimalista in grado di dimostrare teoremi matematici sui suoi stessi termini. Ho anche dimostrato l'induzione per i tipi di dati con codifica λ, il che ha chiarito il motivo per cui le sue estensioni sarebbero state necessarie.
Nether meno, mi rimane ancora da chiedersi da dove vengano quelle estensioni. Perché sono quello che sono? Cosa li giustifica? So, ad esempio, che alcune estensioni, come la ricorsione, rovinano la lingua come sistema di prove. Se decidessi di estendere il CoC anche con altri primitivi, come potrei giustificare? Capisco che è necessaria una prova di normalizzazione, ma ciò non dimostra che quei primitivi "abbiano un senso".
In breve, che cosa specificamente qualifica una lingua (e il suo sistema di tipi) come un sistema in grado di dimostrare teoremi sui propri termini?