Яке співвідношення між функторами в SML та теорії категорій?


24

З тієї ж думки , як ця заява по Andrej Bauer в цьому відповіді

Громада Хаскелла розробила низку методик, натхнених теорією категорій, з яких монади найбільш відомі, але не повинні плутати їх з монадами .

Яке співвідношення між функторами в SML та функторами в теорії категорій?

Оскільки я не знаю про деталі функторів іншими мовами, такими як Haskell або OCaml, якщо є ціннісна інформація, будь ласка, додайте також розділи для інших мов.


1
Ви можете спробувати надіслати електронною поштою Дейву МакКвіну для остаточної відповіді.
Жил "ТАК - перестань бути злим"

Відповіді:


14

Категорії утворюють (велику) категорію, об'єктами якої є (малі) категорії, морфізми яких є функціоналами між малими категоріями. У цьому сенсі функтори в теорії категорій - це "великі морфізми".

ML-функтори - це не функтори в категоричному сенсі цього слова. Але вони є "функціями більшого розміру" у теоретико-теоретичному сенсі.

Подумайте про конкретні типи даних у типовій мові програмування як "малі". Таким чином int, boolі int -> intт. Д. Невеликі, заняття в java невеликі, як і структури в C. Ми можемо зібрати всі типи даних у велику колекцію, що називається Type. Конструктор типу, такий як listабо arrayє функцією від Typeдо Type. Отже, це "велика" функція. Функція ML - лише трохи складніша велика функція: вона приймає в якості аргументу кілька дрібних речей і повертає кілька дрібних речей. "Кілька дрібних речей, зібраних разом" відома як структура в ML. З точки зору теорії типу Мартіна-Лефа, ми маємо Всесвіт Type малих типів. Великі типи зазвичай називають видами . Отже, ми маємо:

  1. Значення - це елементи типів (приклад 42 : int:)
  2. типи - це елементи Type(приклад int : Type:)
  3. Підписи ML - види (наприклад OrderedType:)
  4. конструктори типу - це елементи типу (наприклад list : Type -> Type:)
  5. ML СТРУКТУР є елементами видів (приклад: String : OrderedType)
  6. ML функтори функції між видами (наприклад Map.Make : Map.OrderedType -> Make.S)

Тепер ми можемо провести аналогію між ML та категоріями, згідно з якими функтори відповідають функторам. Але ми також помічаємо, що типи даних в ML є як "малі категорії без морфізмів", іншими словами вони схожі на множини більше, ніж вони схожі на категорії. Тоді ми могли б використати аналогію між ML та теорією множин:

  1. типи даних - це як набори
  2. види схожі на множинно-теоретичні класи
  3. функтори - це як функції розміру класу

15

Стандартна структура МЛ схожа на алгебру . Його підпис описує цілий клас алгебр подібної форми.

F:MonGrpF:AbRng

Більшість цих ідей було опрацьовано у серіях робіт Берсталла та Гогуена при розробці мови специфікації під назвою CLEAR (Посилання c5 та c6 на сторінці DBLP .) Девід МакКуїн працював спільно з Берсталлом та Саннеллою в той час, і був тісно знайомий з питаннями. Система модулів Standard ML заснована на цих ідеях.

Що більшість людей буде дивуватись, а що про морфізми? Категорії теоретичні функтори мають предметну частину та частину морфізму. Чи мають однакові стандартні функціонери ML? Відповідь ТАК і НІ.

  • Частина відповіді ТАК застосовується, якщо структури першого порядку. Потім між різними структурами одного і того ж підпису виникають гомоморфізми, а стандартні функціонери ML автоматично відображають їх у гомоморфізми підпису результату.
  • НЕТ частина відповіді застосовується, коли структури мають операції вищого порядку.

Чи означає це, що Standard ML відхиляється від теорії категорій? Я не думаю, що так. Я вважаю за краще, що Standard ML робить все правильно, і теорія категорій ще не наздогнала. Теорія категорій ще не знає, як поводитися з функціями вищого порядку. Якогось дня це буде.


"Теорія категорій ще не знає, як поводитися з функціями вищого порядку". Це звучить як інше питання, тому що я думав, що теорія категорій може зробити це все як фундамент.
Гай Кодер

2
T(X)=[XX]twiceX=T(X)T(X)
Uday Reddy

Я насправді поставив це справжнім питанням .
Гай Кодер

"Стандартна структура ML схожа на алгебру ". Не є функтори трохи загальнішими за це? Ніщо не заважає структурі містити непов'язані об'єкти (типи, значення та функції), тобто. не утворюючи алгебри.
didierc

2
@didierc Підпис для алгебр складається з одного або декількох видів (наприклад, наших типів), однієї або декількох операцій (як наші функції) та необов'язково деяких аксіом (наприклад, наші технічні характеристики). Алгебра для підпису вибирає конкретні набори для цих видів, а також особливі функції для цих операцій, наприклад , що аксіоми задоволені. Підписи та структури SML - це саме такі речі, за винятком того, що SML дозволяє виконувати операції вищого порядку, тоді як Algebra цього не робить.
Удай Редді

3

Наскільки мені відомо, офіційного зв'язку між функторами в теорії категорій та функторами в ML (SML або OCaml, вони недостатньо близькі для нашої мети тут).

У теорії категорій функтори - це функції, які діють на об'єкти. Вони на один рівень вище морфізмів, які часто є функціями, що діють на елементах (у багатьох категоріях є об'єкти, які є наборами з деякою алгебраїчною будовою, і стрілки, які є гомоморфізмами між цими структурами). Функтор ML - це функція, яка працює на модулях, на один рівень вище функцій, які працюють на основних мовних значеннях. Я думаю, схожість тут зупиняється.

Функтори ML були хрещені Дейвом МакКуїном в його перегляді 1985 р. Модулів для стандартного ML (citeseerx), що з'явилися в бюлетені « Поліморфізм» (в оригінальній статті використовувався вираз «параметричний модуль» - пізніші публікації, як правило, використовують прикметник «параметризований»). На жаль, я не можу знайти його копію. У своїй роботі 1986 р. Використання залежних типів для вираження модульної структури (citeseerx) він дає назву як встановлену.


2
Функціонери - це не просто функції на об'єктах, вони також відображають морфізми. Функціонери - це "морфізми між категоріями".
Андрій Бауер

@AndrejBauer Так, функтори - це функції на об'єктах. Не кожна функція на об'єктах є функтором, але це важливе значення.
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.