У попередній відповіді на сайті «Теоретична інформатика» я сказав, що теорія категорій є «основою» для теорії типів. Тут я хотів би сказати щось сильніше. Теорія категорій - це теорія типів . І навпаки, теорія типів - це теорія категорій . Дозвольте розкрити ці питання.
Теорія категорій - це теорія типів
У будь-якому типізованих формальній мові, і навіть в звичайних математики з використанням неформальної нотації, ми в кінці кінців оголошення функцій з типами . Наслідком у письмовій формі є ідея про те, що і це деякі речі, які називаються "типами", а - "функцією" від одного типу до іншого. Теорія категорій - це алгебраїчна теорія таких "типів" і "функцій". (Офіційно теорія категорій називає їх "об'єктами" та "морфізмами", щоб уникнути ступні на заданих теоретичних пальцях традиціоналістів, але все частіше я бачу теоретиків категорії, які кидають таку обережність на вітер і використовують більш інтуїтивні терміни: "тип "і" функція ". Але,A B ff:A→BABf
Нас усіх виховували на теорії множин із середньої школи і далі. Отже, ми звикли думати про типи, такі як і як множини, та функції, такі як як множинно-теоретичні відображення. Якщо ви ніколи не думали про них так, ви в хорошій формі. Ви уникли теоретичного промивання мозку. Теорія категорій говорить про те, що існує багато типів і багато видів функцій. Отже, уявлення про типи як набори обмежує. Натомість теорія категорій аксіоматизує види та функції алгебраїчно. В основному, це те, що теорія категорій. Теорія типів та функцій. Це дійсно виходить досить складним, залучаючи високий рівень абстракції. Але, якщо ви зможете це навчитися, ви отримаєте глибоке розуміння типів та функцій.Б фABf
Теорія типів - теорія категорій
Під "теорією типів" я маю на увазі будь-який тип введеної формальної мови, заснований на жорстких правилах утворення термінів, які гарантують, що все перевіряє тип. Виявляється, щоразу, коли ми працюємо такою мовою, ми працюємо в категоріально-теоретичній структурі. Навіть якщо ми використовуємо теоретико-множинні позначення і думаємо теоретично множинно, все-таки ми закінчимо писати матеріали, що мають сенс категорично. Це дивовижний факт .
Історично Дана Скотт, можливо, першою зрозуміла це. Він працював над створенням семантичних моделей мов програмування на основі типізованого (і нетипового) обчислення лямбда. Традиційні теоретико-теоретичні моделі були недостатніми для цієї мети, оскільки мови програмування передбачають необмежену рекурсію, якої не вистачає теорії множин. Скотт винайшов серію смислових моделей, які фіксували явища програмування, і прийшов до усвідомлення того, що набране лямбда-числення точно представляє клас категорій, які називаються декартовими закритими категоріями . Існує багато декартових закритих категорій, які не є "теоретично заданими". Але набране лямбда-числення стосується всіх їх однаково. Скотт написав чудовий нарис під назвою " Зв’язані теорії обчислення лямбда""пояснення того, що відбувається, частини якого, здається, доступні в Інтернеті. Оригінальна стаття була опублікована в томі, який називався" До КВ Крі: Нариси комбінаційної логіки, обчислення лямбди та формалізму ", Academic Press, 1980. Беррі та Curien прийшов до такої ж реалізації, ймовірно, незалежно. Вони визначили категоричну абстрактну машину (CAM) для використання цих ідей у реалізації функціональних мов, а мова, яку вони реалізували, отримала назву "CAML", що є основою F # Майкрософт .
Конструктори стандартного типу, такі як , , і т.д., - це функтори . Це означає, що вони не тільки відображають типи на типи, але й функціонують між типами на функції між типами. Поліморфні функції зберігають усі такі функції, що є результатом дії функтора. Теорія категорій була винайдена в 1950-х роках Ейленбергом і Макланом→ L i s t×→Listсаме для формалізації поняття про поліморфні функції. Вони назвали їх "природними перетвореннями", "природними", оскільки вони є єдиними, які можна записати правильним типом, використовуючи змінні типу. Отже, можна сказати, що теорія категорій була винайдена саме для формалізації поліморфних мов програмування, ще до появи мов програмування!
Набір теоретичного традиціоналіста не знає функторів і природних перетворень, які відбуваються під поверхнею, коли він використовує теоретико-теоретичні позначення. Але, поки він щиро використовує типову систему, він дійсно робить категоричні конструкції, не знаючи про них.
Все сказане і зроблене, теорія категорій - це найбільш важлива математична теорія типів і функцій. Отже, всі програмісти можуть отримати користь від вивчення трохи теорії категорій, особливо функціональних програмістів. На жаль, не видається жодних підручників з теорії категорій, орієнтованих саме на програмістів. Книги "Теорія категорій для інформатики", як правило, орієнтовані на студентів / дослідників теоретичних інформатик. Книга Бенджаміна Пірса « Теорія базових категорій для вчених-комп'ютерів» , мабуть, найбільш читабельна з них.
Однак в Інтернеті є безліч ресурсів, які орієнтовані на програмістів. Сторінка Haskellwiki може стати хорошою відправною точкою. У аспірантурі Мідлендса ми маємо лекції з теорії категорій (серед інших). Курс Грем Хаттон був прив'язаний як курс для початківців, а мій - як "просунутий" курс. Але вони охоплюють по суті однаковий зміст, йдучи на різну глибину. Університет Чалмерс має приємну сторінку ресурсів про книги та конспекти лекцій з усього світу. Захоплений сайт блог «SIGFPE» також надає багато хороших інтуїтивні З точки зору програміста.
Основні теми, які ви хочете вивчити:
- визначення категорій та деякі приклади категорій
- функтори та приклади їх
- природні перетворення та приклади їх
- визначення продуктів, копродуктів і експонентів (функціональні простори), початкові та кінцеві об'єкти.
- доповнення
- монади, алгебри та категорії Клейслі
Мої власні конспекти лекцій у Вищій школі Мідлендса висвітлюють усі ці теми, за винятком останньої (монади). В наші дні існує багато інших ресурсів для монадів. Тож це не велика втрата.
Чим більше ви знаєте математики, тим легше було б засвоїти теорію категорій. Оскільки теорія категорій - це загальна теорія математичних структур, корисно знати деякі приклади, щоб оцінити, що означають визначення. (Коли я вивчив теорію категорій, мені довелося скласти власні приклади, використовуючи моє знання семантики мови програмування, тому що в стандартних підручниках були лише математичні приклади, про які я нічого не знав.) Потім вийшла блискуча книга Ламбека і Скотт назвав " Вступ до категоричної логіки""яка пов’язана теорія категорій із системами типів (те, що вони називають" логікою "). Зараз можна зрозуміти теорію категорій, лише пов'язуючи її з системами типів, навіть не знаючи багатьох прикладів. Багато ресурсів, про які я згадував вище, використовують це підхід до пояснення теорії категорій.