Что делает язык (и его систему типов) способным доказывать теоремы о своих собственных терминах?

12

Недавно я попытался реализовать Cedille-Core Аарона , минималистский язык программирования, способный доказывать математические теоремы о своих собственных терминах. Я также доказал индукцию для λ-кодированных типов данных на нем, что прояснило, почему его расширения были бы необходимы.

Тем не менее, мне все еще интересно, откуда взялись эти расширения. Почему они такие, какие они есть? Что их оправдывает? Я знаю, например, что некоторые расширения, такие как рекурсия, разрушают язык как систему доказательств. Если бы я решил расширить CoC с другими примитивами, как бы я оправдал это? Я понимаю, что требуется нормализация, но это не доказывает, что эти примитивы "имеют смысл".

Короче говоря, что конкретно определяет язык (и его систему типов) как систему, способную доказывать теоремы о своих собственных терминах?

MaiaVictor
источник
Я прочитал блог, который был связан с этим вопросом, но я не могу найти его сейчас :( Он содержал предложение «System T достаточно!» Или что-то в этом роде, и в нем говорилось о системах зависимых типов.
Лаббекак,
2
Нашел: queuea9.wordpress.com/2010/01/17/… Это на самом деле написано Аароном Стампом, так что вы, возможно, уже знаете об этом.
Лаббекак
Неохраняемая рекурсия «разрушает» язык как систему доказательств, а защищенная рекурсия - нет. Чтобы доказать, что примитивы имеют смысл, я бы сказал, что вы строите модель. И чтобы доказать теоремы о собственных терминах, ему нужен своего рода изоморфизм Карри – Говарда и зависимый тип, чтобы вещи, которые вы доказываете (типы), могли говорить о ваших терминах.
xavierm02

Ответы:

5

[Самореклама следует, но я думаю, что это актуально.]

tututuv,(λx.x)vv

Конечно, вы также можете предполагать эквивалентности, и существует несколько различных форм квантификаторов (типизированные / нетипизированные, универсальные / экзистенциальные). Этот механизм может быть использован для рассуждения о любой программе (их не нужно доказывать, что они завершились или даже напечатаны). Единственным ограничением является то, что программы, используемые в качестве доказательств, должны быть доказаны прекращением системой (произвольная общая рекурсия приводит к несогласованности).

Вот несколько ссылок, если вы хотите проверить это:

Родольф Лепигре
источник