Ich habe kürzlich versucht, Aarons Cedille-Core zu implementieren , eine minimalistische Programmiersprache, die mathematische Theoreme zu ihren eigenen Begriffen beweisen kann. Ich habe auch eine Induktion für λ-codierte Datentypen darauf nachgewiesen, was klarer machte, warum seine Erweiterungen notwendig wären.
Trotzdem frage ich mich immer noch, woher diese Erweiterungen stammen. Warum sind sie was sie sind? Was rechtfertigt sie? Ich weiß zum Beispiel, dass einige Erweiterungen wie die Rekursion die Sprache als Beweissystem ruinieren. Wenn ich mich entschließen würde, CoC auch mit anderen Primitiven zu erweitern, wie würde ich das rechtfertigen? Ich verstehe, dass ein Beweis der Normalisierung notwendig ist, aber das beweist nicht, dass diese Primitive "Sinn machen".
Kurz gesagt, was genau qualifiziert eine Sprache (und ihr Typensystem) als ein System, das Theoreme über ihre eigenen Begriffe beweisen kann?