Параметричность
В языков программирования теории параметричность — это абстрактное свойство единообразия, которым обладают параметрически полиморфные функции, которое отражает интуитивное представление о том, что все экземпляры полиморфной функции действуют одинаково.
Идея [ править ]
Рассмотрим этот пример, основанный на множестве X и типе T ( X ) = [ X → X ] функций из X в себя. Функция высшего порядка дважды X : T ( X ) → T ( X ), заданная дважды X ( f ) = f ∘ f , интуитивно независима от множества X . Семейство всех таких функций дважды X , параметризованных множествами X , называется « параметрически полиморфной функцией ». Мы просто напишем дважды для всего семейства этих функций и запишем его тип как Х. Т ( Икс ) → Т ( Икс ). Отдельные функции дважды X называются компонентами или экземплярами полиморфной функции. Обратите внимание, что все функции-компоненты дважды X действуют «одинаково», потому что они заданы по одному и тому же правилу. Другие семейства функций, полученные выбором одной произвольной функции из каждого T ( X ) → T ( X ), не имели бы такой однородности. Их называют « специальными полиморфными функциями» . Параметричность — это абстрактное свойство, которым обладают равномерно действующие семейства, такие как дважды , что отличает их от специальных семейств. При адекватной формализации параметричности можно доказать, что параметрически полиморфные функции типа Х. T ( X ) → T ( X ) взаимно однозначны с натуральными числами. Функция, соответствующая натуральному числу n, задается правилом f ж н , т. е. полиморфное числительное Чёрча для n . Напротив, коллекция всех специальных семейств была бы слишком велика, чтобы представлять собой набор.
История [ править ]
Теорема параметричности была первоначально сформулирована Джоном К. Рейнольдсом , который назвал ее теоремой абстракции . [1] В своей статье «Теоремы бесплатно!» [2] Филип Вадлер описал применение параметричности для вывода теорем о параметрически полиморфных функциях на основе их типов.
Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( июнь 2008 г. ) |
Реализация языка программирования [ править ]
Параметричность — основа многих программных преобразований , реализованных в компиляторах языка программирования Haskell . Эти преобразования традиционно считались правильными в Haskell из-за нестрогой семантики Haskell. Несмотря на то, что Haskell является ленивым языком программирования, он поддерживает некоторые примитивные операции, такие как оператор seq
- которые включают так называемую «выборочную строгость», позволяющую программисту принудительно вычислить определенные выражения. В своей статье «Свободные теоремы при наличии seq » [3] Патрисия Йоханн и Янис Фойгтлендер показали, что из-за наличия этих операций общая теорема параметричности не справедлива для программ на Haskell; таким образом, эти преобразования в целом несостоятельны.
Зависимые типы [ править ]
Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( июнь 2013 г. ) |
См. также [ править ]
Ссылки [ править ]
- ^ Рейнольдс, Дж. К. (1983). «Типы, абстракция и параметрический полиморфизм» (PDF) . Обработка информации . Северная Голландия, Амстердам. стр. 513–523.
- ^ Уодлер, Филип (сентябрь 1989 г.). "Теоремы бесплатно!" . 4-я Международная конференция. по функциональному программированию и архитектуре компьютеров . Лондон.
- ^ Иоганн, Патрисия; Янис Фойгтлендер (январь 2004 г.). «Свободные теоремы при наличии след . » . Учеб., Основы языков программирования . стр. 99–110. дои : 10.1145/964001.964010 .