Материалы курса: https://maxxk.github.io/formal-models-2015/
Takahashi M. Parallel Reductions in λ-Calculus // Information and computation. 1995.
Редекс — терм удаления, для которого есть правило редукции.
Нормальная форма терма относительно редукции — это такой вид, при котором к нему неприменимы правила редукции.
Головная нормальная форма терма — если в головной позиции (корне дерева) не стоит редекс.
Нормализация — свойство формальной системы: если у терма есть нормальная форма, то она единственная.
Сильная нормализация — у всех термов есть единственная нормальная форма (= нет термов, редукция которых не завершается).
Просто типизированное λ-исчисление обладает свойством сильной типизации.
Normalization by Evaluation (A. Abel, Habilitation thesis, 2013)
Обычно определяется следующим образом: A эквивалентен B, если A и B приводятся β-редукцией к идентичному виду, с точностью до корректных (не меняющих) переименований переменных. На индексах де Брёйна последнее замечание неактуально.
Пусть \(f : α → β\). Тогда \(λ (x : α). f · x\) интуитивно эквивалентен исходной \(f\), но по указанному выше определению формально это разные термы.
η-эквивалентность включает такое понятие и, в случае просто типизированного λ-исчисления, не нарушает разрешимости эквивалентности типов.
Проверка типов разрешима — если есть алгоритм, который для любого терма определяет, корректно ли он типизирован.
Эквивалентность термов разрешима — если есть алгоритм, который для любой пары термов определяет, эквивалентны ли они при заданных правилах.
Типы — импликативные суждения. Доказательства — термы, имеющие этот вид.
Если ввести тип ложных высказываний как базовый тип False без правил введения и с правилом удаления ex falso, можно ввести и отрицание — «не α» ≡ α → False.
Алгоритм проверки типов.
Достаточны аннотации типов у констант и переменных абстракции, остальные — можно вывести.
Две взаимно-рекурсивные функции — check
и infer
.
infer
выводит тип терма, check
проверяет, что терм имеет заданный тип.
Опциональные аннотации.
В частности, для нумералов Чёрча представимый класс называется «расширенные полиномы» над ℕ:
ifzero
(n, m, p) = if
n = 0 then
m else
pВ следующий раз мы рассмотрим различные способы расширения набора типов и постараемся убрать разделение между типами и термами.
Barendregt H.P. Introduction to generalized type systems // J. Funct. Program. 1991. Vol. 1, № 2. P. 125–154.
Б. Пирс. Типы в языках программирования. М.: Лямбда-прес, 2011. Часть V (глава 23), VI.
Могу порекомендовать дополнительно введение, главы 5-6, 8-12, 20-24, 26 как литературу по значительной части нашего курса.
Задача 5.1/6.1** Реализовать алгоритм двусторонней проверки типов для λ-исчисления с простыми типами (синтаксис входных данных — на ваше усмотрение).
Задача 5.2/6.2* Реализовать нумералы Чёрча с операцией сложения.
Задача 6.3*** Реализовать алгоритм проверки типов для одного из расширений λ-исчисления (полиморфное, с конструкторами типов, с зависимыми типами)