Эпиграмма (язык программирования)
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Парадигма | Функциональный |
---|---|
Разработано | Конор МакБрайд Джеймс МакКинна |
Разработчик | Неподдерживаемый |
Впервые появился | 2004 г |
Стабильная версия | 1
/ 11 октября 2006 г |
Дисциплина набора текста | сильный , статичный , зависимый |
ТЫ | Кроссплатформенность : Linux , Windows , macOS. |
Лицензия | С [1] |
Веб-сайт | сеть |
Под влиянием | |
Альф | |
Под влиянием | |
Агда , Идрис |
Epigram — это функциональный язык программирования с зависимыми типами и интегрированной средой разработки (IDE), обычно поставляемой вместе с языком. Epigram Система типов достаточно сильна, чтобы выражать спецификации программы . Целью является поддержка плавного перехода от обычного программирования к интегрированным программам и доказательствам, корректность которых может быть проверена и сертифицирована компилятором . Эпиграмма использует соответствие Карри-Ховарда , также называемое принципом предложений как типов , и основано на интуиционистской теории типов .
Прототип Epigram был реализован Конором МакБрайдом на основе совместной работы с Джеймсом МакКинной. Его развитие продолжают группы Epigram в Ноттингеме , Дареме , Сент-Эндрюсе и Ройял Холлоуэй, Лондонский университет в Соединенном Королевстве (Великобритания). Текущая экспериментальная реализация системы Epigram доступна бесплатно вместе с руководством пользователя, учебным пособием и некоторыми справочными материалами. Система использовалась под Linux , Windows и macOS .
В настоящее время он не поддерживается, а версия 2, предназначенная для реализации теории наблюдательных типов, никогда официально не выпускалась, но существует на GitHub .
Синтаксис [ править ]
Epigram использует двумерный, естественный синтаксис стиля дедукции с версиями в LaTeX и ASCII . Вот несколько примеров из Учебника по эпиграммам :
Примеры [ править ]
Натуральные числа [ править ]
Следующее объявление определяет натуральные числа :
( ! ( ! ( n : Nat !
data !---------! where !----------! ; !-----------!
! Nat : * ) !zero : Nat) !suc n : Nat)
В декларации сказано, что Nat
это тип с добрым характером *
(т.е. это простой тип) и два конструктора: zero
и suc
. Конструктор suc
занимает один Nat
аргумент и возвращает Nat
. Это эквивалентно объявлению Haskell " data Nat = Zero | Suc Nat
".
В LaTeX код отображается так:
Обозначение горизонтальной линии можно прочитать как «предполагая, что (то, что вверху) истинно, мы можем сделать вывод, что (то, что внизу) истинно». Например, «предполагая n
имеет тип Nat
, затем suc n
имеет тип Nat
." Если сверху ничего нет, то нижнее утверждение всегда истинно: " zero
имеет тип Nat
(во всех случаях)».
Рекурсия в натуральных числах [ править ]
... И в ASCII:
NatInd : all P : Nat -> * => P zero ->
(all 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:
plus x y <= rec x {
plus x y <= case x {
plus zero y => y
plus (suc x) y => suc (plus x y)
}
}
Зависимые типы [ править ]
Эпиграмма — это, по сути, типизированное лямбда-исчисление с обобщенными алгебраическими расширениями типов данных, за исключением двух расширений. Во-первых, типы — это сущности первого класса типа ; типы — это произвольные выражения типа , а эквивалентность типов определяется в терминах нормальных форм типов. Во-вторых, у него есть зависимый тип функции; вместо , , где связан в значению, которое аргумент функции (типа ) в итоге берет.
Полнозависимые типы, реализованные в Epigram, представляют собой мощную абстракцию. (В отличие от Dependent ML , зависимые значения могут иметь любой допустимый тип.) Пример новых возможностей формальной спецификации, которые предоставляют зависимые типы, можно найти в The Epigram Tutorial .
См. также [ править ]
- ALF — помощник по доказательству среди предшественников Epigram.
Дальнейшее чтение [ править ]
- Макбрайд, Конор; Маккинна, Джеймс (2004). «Взгляд слева» . Журнал функционального программирования . 14 : 69–111. дои : 10.1017/S0956796803004829 . S2CID 6232997 .
- Макбрайд, Конор (2004). Прототип эпиграммы, кивок и два подмигивания (Отчет).
- Макбрайд, Конор (2004). Учебник по эпиграмме (Отчет).
- Альтенкирх, Торстен; Макбрайд, Конор; Маккинна, Джеймс (2005). Почему зависимые типы имеют значение (Отчет).
- Чепмен, Джеймс; Альтенкирх, Торстен; Макбрайд, Конор (2006). Epigram Reloaded: автономная проверка типов для ETT (отчет).
- Чепмен, Джеймс; Даганд, Пьер-Эварист; Макбрайд, Конор; Моррис, Питер (2010). Нежное искусство левитации (Репортаж).
Ссылки [ править ]
- ^ «Эпиграмма – Официальный сайт» . Проверено 28 ноября 2015 г.
Внешние ссылки [ править ]
- Официальный сайт
- Эпиграмма 1 на GitHub
- Эпиграмма2 на GitHub
- EPSRC по ALF, LEGO и тому подобному; архивная версия от 2006 года