Niedawno próbowałem zaimplementować Cedille-Core Aarona , minimalistyczny język programowania zdolny do udowodnienia twierdzeń matematycznych na temat własnych terminów. Udowodniłem również indukcję dla typów danych zakodowanych na λ, co wyjaśniło, dlaczego jego rozszerzenia byłyby konieczne.
Nie mówiąc już o tym, wciąż zastanawiam się, skąd pochodzą te rozszerzenia. Dlaczego są tacy, jacy są? Co je usprawiedliwia? Wiem na przykład, że niektóre rozszerzenia, takie jak rekurencja, rujnują język jako system dowodów. Gdybym zdecydował się rozszerzyć CoC na inne prymitywy, jak mam to uzasadnić? Rozumiem, że dowód normalizacji jest konieczny, ale to nie dowodzi, że te prymitywne „mają sens”.
Krótko mówiąc, co konkretnie kwalifikuje język (i jego system typów) jako system zdolny do udowodnienia twierdzeń o własnych terminach?