Введение

Функциональный язык программирования

Epigram — это функциональный язык программирования с зависимыми типами, а также интегрированная среда разработки (IDE), которая обычно поставляется вместе с языком. Система типов Epigram достаточно мощна, чтобы выражать спецификации программ. Цель проекта — обеспечить плавный переход от обычного программирования к интегрированным программам и доказательствам, корректность которых может быть проверена и сертифицирована компилятором. Epigram использует соответствие Карри — Ховарда, также известное как принцип «предложения как типы», и основан на интуиционистской теории типов. Прототип Epigram был разработан Конором Макбрайдом на основе совместной работы с Джеймсом Маккинной. Его разработка продолжается группой Epigram в Ноттингеме, Дареме, Сент-Эндрюсе и Royal Holloway Лондонского университета в Соединенном Королевстве (Великобритании). Текущая экспериментальная реализация системы Epigram свободно доступна вместе с руководством пользователя, учебным пособием и вспомогательными материалами. Система использовалась в операционных системах Linux, Windows и macOS. В настоящее время разработка не ведется, а версия 2, которая должна была реализовать наблюдательную теорию типов, так и не была официально выпущена, но существует в репозитории GitHub.

Синтаксис

Эпиграмма использует двумерный синтаксис в стиле естественной дедукции, с реализациями для LaTeX и ASCII. Вот несколько примеров из руководства по Эпиграмме:

Рекурсия на натуральных

И в кодировке ASCII:

Добавление

И в кодировке ASCII:

Зависимые типы

Эпиграмма – это, по сути, типизированный лямбда-исчисление с обобщёнными алгебраическими расширениями типов данных, за исключением двух дополнений. Во-первых, типы являются объектами первого класса, имеющими тип ; типы – это произвольные выражения типа , а эквивалентность типов определяется через нормальные формы типов. Во-вторых, в нём используется зависимый функциональный тип; вместо , , где связано со значением, которое аргумент функции (типа ) в конечном итоге принимает. Полные зависимые типы, реализованные в Epigram, представляют собой мощную абстракцию. (В отличие от Dependent ML, значение(я), от которых зависит тип, могут быть любого допустимого типа.) Пример новых возможностей формальной спецификации, предоставляемых зависимыми типами, можно найти в руководстве по Epigram.