Для доказательства корректности я ищу пригодное для использования понятие эквивалентности программы для систем чистого типа (PTS) Барендрегта; не хватает этого, для достаточно специфических систем типов. Моя цель - просто использовать это понятие, а не исследовать его ради самого себя.
Это понятие должно быть « экстенсиональным » - в частности, чтобы доказать, что , должно быть достаточно, чтобы доказать, что t 1 для всех значений v соответствующего типа.
Денотационная эквивалентность
Денотационная эквивалентность легко удовлетворяет всем правильным леммам, но денотационная семантика для произвольной PTS кажется довольно сложной задачей - это уже казалось бы сложным для Системы F.
Контекстуальная / наблюдательная эквивалентность
Тогда очевидной альтернативой являются различные формы контекстуальной эквивалентности (два термина эквивалентны, если никакой основной контекст не может их различить), но его определение не может быть сразу использовано; различные леммы не тривиальны, чтобы доказать. Они были доказаны для PTS? В качестве альтернативы, будет ли теория «очевидным расширением», или есть основания полагать, что теория будет существенно отличаться?
РЕДАКТИРОВАТЬ: я не сказал, что сложно выше.
Легкая часть: определение
Определение эквивалентности не так уж сложно, и определение появляется во многих работах (начиная, по крайней мере, с исследования PCF Плоткина в 1975 году, если не раньше - источником может быть докторская диссертация Морриса в 1968 году). Мы если для всех основных контекстов C , C [ t 1 ] ≃ C [ t 2 ] - то есть C [ t 1 ] и C [ t 2 ] дают одинаковый результат, У вас есть несколько вариантов здесь с множеством альтернатив: например, в сильно нормализующем языке, если у вас есть базовый тип натуралов, вы можете сказать, что базовые контексты - это те, которые возвращают натуралы, и тогда означает, что a и б оценить до того же числа. При отсутствии завершения для приемлемых языков достаточно использовать «X заканчивается» в качестве наблюдения, потому что, если две программы эквивалентны при наблюдении завершения, они также эквивалентны при наблюдении результата.
Трудная часть: доказательства
Тем не менее, эти документы часто не объясняют, насколько сложно на самом деле использовать это определение. Все ссылки ниже показывают, как справиться с этой проблемой, но нужная теория сложнее, чем кажется. Как доказать, что ? Делаем ли мы на самом деле анализ и введение в контекст? Ты не хочешь этого делать.
Как указывает Мартин Бергер, вместо этого вы хотите использовать либо бисимуляцию (как это сделал Питтс), либо отношение логической эквивалентности (которое Харпер просто называет «логической эквивалентностью»).
Наконец, как вы доказываете экстенсиональность, как определено выше?
Харпер решает эти вопросы на 10 страницах для System T, благодаря значительным умам и логическим связям. Питтс берет больше. Некоторые языки еще более сложны.
Как с этим бороться
На самом деле я испытываю соблазн сделать мои доказательства условно предполагаемой теорией эквивалентности для PTS, но фактические теории требуют нетривиальных аргументов, поэтому я не уверен, насколько вероятна такая гипотеза.
Я знаю (хотя и не подробно) о следующих работах:
- Эндрю Питтс (например, в ATTAPL для расширенной Системы F и в нескольких статьях, таких как 58-страничные «Оперативные теории эквивалентности программ»).
- Практические основы языков программирования (главы 47-48), вдохновленные Питтом (но утверждающие, что имеют более простые доказательства).
- Логическое исследование эквивалентности программы . Я не могу найти аннотацию на английском языке, но она, похоже, тратит много усилий на побочные эффекты (ссылки), что кажется ортогональным осложнением.