В предыдущем ответе на сайте «Теоретическая информатика» я сказал, что теория категорий является «фундаментом» для теории типов. Здесь я хотел бы сказать что-то покрепче. Теория категорий - это теория типов . И наоборот, теория типов - это теория категорий . Позвольте мне подробнее остановиться на этих моментах.
Теория категорий - это теория типов
В любом типизированных формальном языке, и даже в обычных математике с использованием неформальной нотации, мы в конце концов объявления функций с типами . В письменной форме подразумевается, что и - это некоторые вещи, называемые «типами», а - это «функция» от одного типа к другому. Теория категорий - это алгебраическая теория таких «типов» и «функций». (Официально теория категорий называет их «объектами» и «морфизмами», чтобы не наступать на теоретико-множественные пальцы традиционалистов, но все чаще я вижу, как теоретики категорий бросают такую осторожность и используют более интуитивные термины: «тип»). "и" функция ". Но,A B ff:A→BABf
Мы все воспитывались на теории множеств начиная со средней школы. Итак, мы привыкли думать о таких типах, как и как о множествах, а функции, такие как как о теоретико-множественных отображениях. Если вы никогда не думали о них таким образом, вы в хорошей форме. Вы избежали теоретико-множественного промывания мозгов. Теория категорий гласит, что существует много типов типов и функций. Таким образом, идея типов как множеств является ограничивающей. Вместо этого теория категорий аксиоматизирует типы и функции алгебраическим способом. По сути, это и есть теория категорий. Теория типов и функций. Это становится довольно сложным, включая высокие уровни абстракции. Но если вы научитесь этому, вы приобретете глубокое понимание типов и функций.B fABf
Теория типов - это теория категорий
Под «теорией типов» я подразумеваю любой типизированный формальный язык, основанный на жестких правилах формирования терминов, которые гарантируют, что все типы проверяются. Оказывается, всякий раз, когда мы работаем на таком языке, мы работаем в теоретико-категоричной структуре. Даже если мы используем теоретико-множественные нотации и мыслим теоретико-множественными, все же мы заканчиваем тем, что пишем вещи, которые имеют смысл категорично. Это удивительный факт .
Исторически Дана Скотт, возможно, была первой, кто осознал это. Он работал над созданием семантических моделей языков программирования, основанных на типизированном (и нетипизированном) лямбда-исчислении. Традиционные теоретико-множественные модели были неадекватны для этой цели, потому что языки программирования включают в себя неограниченную рекурсию, которой не хватает теории множеств. Скотт изобрел серию семантических моделей, в которых запечатлены явления программирования, и пришел к выводу, что набранное лямбда-исчисление точно представляет класс категорий, называемых декартовыми замкнутыми категориями . Существует множество закрытых декартовых категорий, которые не являются «теоретико-множественными». Но напечатанное лямбда-исчисление относится ко всем из них одинаково. Скотт написал хорошее эссе под названием « Соотношение теорий лямбда-исчисления«Объясняя, что происходит, отдельные части которых, по-видимому, доступны в Интернете. Оригинальная статья была опубликована в томе« To HB Curry: Очерки по комбинаторной логике, лямбда-исчислению и формализму », Academic Press, 1980. Berry and Curien пришли к той же реализации, вероятно, независимо: они определили категориальную абстрактную машину (CAM), чтобы использовать эти идеи для реализации функциональных языков, а язык, который они реализовали, назывался «CAML», который лежит в основе F # от Microsoft .
Конструкторы стандартных типов, такие как , , и т. Д., Являются функторами . Это означает, что они не только отображают типы в типы, но также выполняют функции между типами в функции между типами. Полиморфные функции сохраняют все такие функции, являющиеся результатом действий функтора. Теория категорий была изобретена в 1950-х годах Эйленбергом и Маклейном→ L i s t×→Listточно формализовать понятие полиморфных функций. Они назвали их «естественными преобразованиями», «естественными», потому что они единственные, которые вы можете написать с корректным типом, используя переменные типа. Таким образом, можно сказать, что теория категорий была изобретена именно для формализации полиморфных языков программирования, еще до появления языков программирования!
Теоретико-множественный традиционалист не знает функторов и естественных преобразований, которые происходят под поверхностью, когда он использует теоретико-множественные обозначения. Но до тех пор, пока он верно использует систему типов, он действительно делает категориальные конструкции, не зная о них.
Все сказанное и сделанное, теория категорий является наиболее существенной математической теорией типов и функций. Таким образом, все программисты могут извлечь пользу из изучения теории категорий, особенно функциональные программисты. К сожалению, нет никаких учебников по теории категорий, предназначенных специально для программистов. Книги «Теория категорий для информатики», как правило, предназначены для студентов / исследователей в области теоретической информатики. Книга Бенджамина Пирса « Базовая теория категорий для компьютерщиков», пожалуй, самая читаемая из них.
Тем не менее, в Интернете есть множество ресурсов, предназначенных для программистов. Страница Haskellwiki может быть хорошей отправной точкой. В аспирантуре Мидлендса мы читаем лекции по теории категорий (среди прочих). Курс Грэма Хаттона был оценен как курс для начинающих, а мой - как продвинутый. Но оба они охватывают по существу один и тот же контент, уходя в разные глубины. У университета Чалмерса есть хорошая страница ресурса с книгами и примечаниями лекции со всего мира. Восторженный сайт блог «SIGFPE» также предоставляет много хороших интуитивные С точки зрения программиста.
Основные темы, которые вы хотели бы изучить:
- определение категорий и некоторые примеры категорий
- функторы и их примеры
- природные преобразования и примеры из них
- определения продуктов, копроизведений и показателей (функциональных пространств), начальных и конечных объектов.
- примыкания
- монады, алгебры и категории Клейсли
Мои собственные лекционные заметки в аспирантуре Мидлендса охватывают все эти темы, кроме последней (монады). В наши дни для монад доступно множество других ресурсов. Так что это не большая потеря.
Чем больше математики вы знаете, тем легче будет изучить теорию категорий. Поскольку теория категорий является общей теорией математических структур, полезно знать некоторые примеры, чтобы понять, что означают определения. (Когда я изучал теорию категорий, мне приходилось создавать свои собственные примеры, используя мои знания семантики языка программирования, потому что в стандартных учебниках были только математические примеры, о которых я ничего не знал.) Затем появилась блестящая книга Ламбека. а Скотт назвал « Введение в категориальную логику»«которая относила теорию категорий к системам типов (то, что они называют« логикой »). Теперь можно понять теорию категорий, просто связав ее с системами типов, даже не зная множества примеров. Многие ресурсы, которые я упомянул выше, используют это подход к объяснению теории категорий.