Довідковий запит: Теорія категорій, що стосується систем типів


13

Я постійно чую, як треба вивчити теорію категорій, щоб справді зрозуміти теорію мови програмування. Поки що я навчився великій кількості PL, не вступаючи ніколи в сферу категорій. Однак я подумав, що настав час зробити стрибок, щоб побачити, чого я пропустив.

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

Я думаю, моє запитання насправді двояке:

  1. Чи важлива теорія категорій для розуміння "глибоких понять" в ПЛ?
  2. Що є джерелом, яке пояснює теорію категорій з точки зору практичних застосувань для типів систем та програмування?

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


2
@Raphael Дуже погано ставити запитання, яке складається з двох різних питань, які лише невиразно пов'язані між собою. Але питання 1. не є суб'єктивним. Це скоріше запит на роз'яснення та пояснення. Я думаю, питання 2. малося на увазі в тому сенсі, що він задоволений посиланням на місце, де це пояснюється, а не власне поясненням.
Томас Клімпель,

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

1
@Raphael Як питання одне суб'єктивне? Це може бути важко судити - це ви маєте на увазі? І це могло б відповісти «Це залежить від того, який ти людина». - це те, що ти маєш на увазі? Все ще може виявитися, що це, безумовно, істотно або, безумовно, не суттєво, правда? (І люди, схоже, згодні, що це не суттєво.)
k.stm

1
@ k.stm Загальна форма питання хвилює мене. Якщо хтось запитав: "Чи алгебра важлива для розуміння глибоких понять формальних мов?", Я знаю на факт, що різні люди дадуть різні відповіді - виходячи зі своїх уподобань та смаку. Я не очікую, що тут буде інакше.
Рафаель

1
@Raphael Добре, я розумію. Але я думаю, що це люди, які дають суб’єктивні відповіді на об'єктивне питання. (Мені здається, що люди кажуть: "О, я п'ю п'ять чашок на день, і я почуваюся чудово!", Коли запитують, здорова чи ні кава.)
k.stm

Відповіді:


15

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

Теоретичні методи категорій були корисними здебільшого в незначній частині досліджень мови програмування, а саме при аналізі функціонального програмування, особливо, оскільки велике відкриття Модгі, що деякі обчислювальні ефекти мають монадичну структуру. У 1990-х роках, після прориву Модгі, було проведено чимало досліджень, щоб поширити категоричні методи на інші форми мов програмування. Однак, наскільки мені відомо, категоричними методами не було знайдено всього корисного для ОО, паралельних, паралельних та розподілених обчислень, обчислень з тимчасовою обробкою або компіляторів. З цієї причини люди в основному відмовилися від розширення категоричних методів.

Категоричні підходи до набраного програмування добре працюють у чистих функціях. Дійсно, деякі прості системи набору тексту є категоріями. Це описано в напр

Зараз дуже багато роботи над типами для паралельних процесів (наприклад, типів сеансів), і жодне з них не має категоричного характеру станом на вересень 2016 року.

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

Нарешті, теорія категорій - це прекрасна математика, і її варто вивчити просто тому, що вона така охайна.


Дивіться внесок Удай Редді в цій дискусії для іншого погляду.


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

2
@gardenhead Тоді, можливо, КТ не все так корисно для вас. Якщо ви хочете прочитати багато праць у просторі "Функціональне програмування", включаючи роботу над типами, то багато з них будуть використовувати мову CT.
Мартін Бергер

Є чи це один дублікат?
Рафаель

2
Я б ще запропонував книгу cs.unibo.it/~asperti/PAPERS/book.pdf "Категорії, типи та структури", яка, очевидно, не надрукована, але це посилання на pdf з одного з домашні сторінки авторів, тому я думаю, це законно.
Джон Форкош

6

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

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

Ідея тут полягає у використанні категорій замість наборів або "невизначених бітів" як можливої ​​семантики для заданої теорії типів або мови програмування. Чому варто це робити? Розглянемо подвійність між дією та спостереженням. Різні спостереження (або принаймні їх порядок у часі) не заважають одне одному (поза квантовою механікою), але це необов'язково вірно для різних дій. Закріплені забобони щодо логіки, закладені в теорії множин, ускладнюють моделювання дій, порівняно з моделюючими спостереженнями.


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

За допомогою синтаксичної семантики подвійність можна розглядати теорію типів як формальну синтаксичну мову або обчислення для теорії категорій, і, навпаки, теорію категорій можна розглядати як надання семантики для теорії типів.

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


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


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