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