Теорія категорій (не) для програмування?


21

Вивчивши Haskell та інші не такі чисті мови FP, я вирішив прочитати про теорію категорій. Отримавши гарне розуміння теорії категорій, я почав думати про те, як поняття теорії категорій можна використовувати для роздуму над розробкою програм, але як би я не намагався, здається, це не шлях.

Провівши багато невдалих спроб пов'язати теорію категорій із розробкою програм, я дійшов висновку, що:

  • Теорія категорій корисна при розробці мови програмування .
  • Теорія категорій - це не те, що ви використовуєте при розробці програм (навіть при використанні мови, розробленої на основі категорій). Наприклад: При програмуванні в Haskell ви будете використовувати типи, конструктор типів, функції, функції вищого порядку тощо, щоб створити свою програму, а не концепції теорії категорій.

Підсумовуючи, у нас є система нижче шарів (замовлення від низького до високого):

Теорія категорій -> Мова програмування -> Програма

На конкретному шарі ви використовуєте поняття безпосередньо нижнього шару .

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

ПРИМІТКА: Під розробкою програм я маю на увазі розробку програм на основі різних концепцій, таких як паралельність, паралелізм, реактивність, передача повідомлень тощо.


1
Ви вважаєте монади частиною мови програмування чи програм? Стрілки?
Дейв Кларк

2
Це вражає мене як філософське питання, принаймні частково. Я не впевнений, що є одна правильна відповідь. Один адекватний теорія категорій застосовуватиме інтуїцію, отриману від неї під час програмування, інший сприятиме різному способу мислення.
Рафаель

2
Більшість програм, що написані, використовують мови програмування, не натхненні теорією категорій. Наскільки я можу сказати, середній програміст не знає теорії категорій, і тому більшість програм (включаючи вашу операційну систему та ваш браузер) не надихаються вищою математикою.
Yuval Filmus

1
@YuvalFilmus: Моє питання спрямоване на функціональні мови програмування
Ankur

1
дивіться також це питання для деяких застосувань CS
моноїдів

Відповіді:


13

Ну, це, звичайно, залежить від того, яку програму ви намагаєтеся розробити.

Якщо ви розробляєте програму обліку для шоколадного магазину вашої тітки, я дуже сумніваюся, теорія категорій буде корисною.

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

Якщо ви хочете написати програми, які обчислюють точні дійсні числа та інші структури, що виникають при математичному аналізі, перше питання, на яке вам потрібно відповісти, це те, що означає правильно реалізувати складний математичний об’єкт (наприклад, диференційована функція, колектор тощо). ). Тут дуже допомагає знати теорію та логіку категорій, оскільки вони дають вам систематичний спосіб перекладу визначень математичних структур у специфікації та реалізацію відповідних структур даних. Казкове слово, яке ви повинні шукати, - це теорія реалізації . Але це лише один приклад.

Найкращий спосіб зрозуміти, як корисна теорія категорій - це переглянути програми, написані людьми, які знають багато теорії категорій (і математики взагалі). Очевидним прикладом цього є Мартін Ескардо та його неможливі функції, наприклад:

М. Ескаро та П. Олива: Які послідовні ігри, теорема Тихонофа та зсув подвійного заперечення мають спільне , математично структуроване функціональне програмування 2010, ACM Press. (із супровідними файлами Haskell та Agda )

Ви можете поскаржитися, що це не лише теорія категорій, а й логіка та топологія. Такі скарги були б серйозно помилковими. Теорія кращих категорій завжди змішується з іншими речами.

Нарешті, я б радив не робити грандіозних висновків щодо природи речей на основі трохи самостійного читання.


В цьому і полягає моя суть. Якщо я розробляю програмне забезпечення для бухгалтерського обліку, система типу буде моєю мовою для проектування. Якщо я розробляю математичне програмне забезпечення навіть тоді, я буду використовувати систему типів для представлення понять теорії категорій. Що в основному вказує на те, що теорія типів АБО системи типів є більш загальними абстракціями, ніж теорія категорій.
Анкур

1
Це смішне твердження. Я думаю, вам, можливо, варто дізнатися ще дещо, перш ніж робити подібні висловлювання. Можливо, ви можете почати з existentialtype.wordpress.com/2011/03/27/the-holy-trinity
Андрій Бауер

Я не дослідник, доктор наук, вчений, математик чи теоретик категорій, тому не засмучуйтесь з приводу моїх тверджень, вони не збираються публікуватись у якомусь науковому журналі чи науково-дослідних роботах. Я просто програміст, який намагається зрозуміти іншу сторону монети. До речі, дякую за посилання.
Анкур

1
Я усвідомлюю це, саме тому я пропоную вам бути обережними щодо того, як робити висновки: у вас просто немає інформації, необхідної для здійснення таких висновків. І саме тому я посилаюсь на публікацію в блозі Боба Гарфера, а не, скажімо, на якусь технічну книгу про взаємозв'язок теорії типів та теорії категорій. Я намагаюся допомогти, але я би сподівався натомість трохи більше застереження від вас, коли справа доходить до великих висновків щодо природи цілої галузі математики.
Андрій Бауер

Наприклад, ви заявили, що "теорія типів є більш загальною абстракцією, ніж теорія категорій". Це приклад твердження, яке слід знати не робити на основі незначних знань. Я працюю професійно в цій галузі, і навіть я б дуже обережно робив такий висновок чи протилежний.
Андрій Бауер

6

Люди використовували КТ для опису типів даних.

  1. Тип даних визначався конкретною категорією, об'єктами якої є кінцеві послідовності типів (мова специфікації) і стрілки яких були проекціями чи іншими композиціями операцій типу даних. Наприклад, об'єктом є домен і являє собою кодомейн push-операції стеків. Це дає вам синтаксис, але ви все ще не маєте поняття семантики.
  2. Алгебра, тобто примірник типу, є функтором від теорії до Енса, категорії (малих) множин. (Ми використовуємо "малі", щоб уникнути парадоксу Рассела, але це, головним чином, не має значення.)
  3. Виявляється, властивості закриття категорій відповідають сімействам логічних теорій. Наприклад, якщо категорія теорії закрита під продуктами, тип даних можна аксіоматизувати рівняннями. Якщо категорію теорії закрити за допомогою відкатів, то тип даних можна аксіоматизувати за допомогою речень Рога.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.