Парадигма | Функциональный |
---|---|
Разработано | Конором Макбрайд. Джеймс МакКинна |
Разработчик | Без обслуживания |
Впервые появился | 2004; 16 лет назад (2004 г.) |
Стабильный выпуск | 1/11 октября 2006 г.; 14 лет назад (11.10.2006) |
Дисциплина ввода | сильная, статическая, зависимая |
OS | Кросс-платформенная : Linux, Windows, macOS |
Лицензия | MIT |
Веб-сайт | e-pig.org |
Под влиянием | |
ALF | |
Под влиянием | |
Agda, Idris |
Epigram - это язык функционального программирования с зависимыми типами и интегрированной средой разработки (IDE) обычно поставляется вместе с языком. Система типов эпиграммы достаточно сильна, чтобы выразить спецификации программы. Цель состоит в том, чтобы поддерживать плавный переход от обычного программирования к интегрированным программам и доказательствам, правильность которых может быть проверена и подтверждена компилятором . Epigram использует соответствие Карри – Ховарда, также называемое принципами предложений как принципа типов, и основывается на интуиционистской теории типов.
Прототип Epigram был реализован Конором МакБрайдом на основе о совместной работе с Джеймсом МакКинной. Его развитие продолжается группой Epigram в Ноттингеме, Дареме, Сент-Эндрюс и Ройал Холлоуэй, Лондонский университет в Соединенное Королевство (Великобритания). Текущая экспериментальная реализация системы Epigram находится в свободном доступе вместе с руководством пользователя, учебным пособием и некоторыми справочными материалами. Система использовалась в Linux, Windows и macOS.
. В настоящее время она не обслуживается, а версия 2, предназначенная для реализации теории наблюдательного типа, никогда не использовалась. официально выпущен, но существует в GitHub. Дизайн Epigram и Epigram 2 вдохновил на разработку Agda, Idris и Coq.
Эпиграмма использует двумерный синтаксис в стиле естественного вывода с версиями в LaTeX и ASCII. Вот несколько примеров из The Epigram Tutorial:
Следующее объявление определяет натуральные числа :
(! (! (N : Nat! Data! ---------! Где! ----------!;! -----------!! Nat: *)! Zero: Nat)! Suc n: Nat)
В объявлении говорится, что Nat
- это тип с kind *
(т.е. это простой тип) и двумя конструкторами: ноль
и успех
. Конструктор su
принимает единственный аргумент Nat
и возвращает Nat
. Это эквивалентно объявлению Haskell «data Nat = Zero | Suc Nat
».
В LaTeX код отображается как:
Обозначение горизонтальной линии можно читать как «предполагая (то, что вверху) верно, мы можем сделать вывод, что (то, что внизу) верно». Например, «предположим, что n
имеет тип Nat
, тогда suc n
имеет тип Nat
». Если наверху ничего нет, то нижнее утверждение всегда верно: «ноль
имеет тип Nat
(во всех случаях)».
... И в ASCII:
NatInd: все P: Nat ->* =>P ноль ->(все n : Nat =>P n ->P (Suc n)) ->all n: Nat =>P n NatInd P mz ms zero =>mz NatInd P mz ms (suc n) =>ms n (NatInd P mz ms n)
... И в ASCII:
плюс xy <= rec x { plus x y <= case x { plus zero y =>y plus (success x) y =>success (плюс xy)}}
Эпиграмма - это, по сути, типизированное лямбда-исчисление с расширениями обобщенного алгебраического типа данных, за исключением двух расширений. Во-первых, это первоклассные сущности типа ; типы - это произвольные выражения типа , а эквивалентность типов определяется в терминах нормальных форм типов. Во-вторых, у него есть зависимый тип функции; вместо , , где привязан в к значению, которое аргумент функции (типа ) в конце концов берет.
Полностью зависимые типы, реализованные в Epigram, представляют собой мощную абстракцию. (В отличие от Dependent ML, значение (я), от которого зависит, может быть любого допустимого типа.) Образец новых формальных возможностей спецификации, которые приносят зависимые типы, можно найти в The Epigram Tutorial.