Теория категорий
Пределы и копределы: универсальные конструкции
SQL JOIN - это pullback. Curry/uncurry - это сопряжение функторов. Монады State и List - это сопряжения. Теория категорий не абстрактная математика - это язык, на котором написаны паттерны каждого функционального программиста.
- SQL JOIN = pullback в категории баз данных
- Haskell curry/uncurry = Product ⊣ Exponential adjunction
- State monad = сопряжение (- × S) ⊣ (S → -)
- React: useState = хранение состояния через монаду State
Универсальное свойство: суть категориальных конструкций
**Универсальное свойство** - способ определить объект не по его «устройству», а по его отношениям с другими объектами. Это главный инструмент теории категорий: определять через связи, а не через строение.
**Двойственность (duality):** Каждой концепции в теории категорий соответствует двойственная, полученная переворачиванием всех стрелок. Копредел = двойственный предел, копроизведение = двойственное произведение.
Зачем определять произведение через универсальное свойство, а не через элементы?
Пределы: pullback и уравнитель
**Предел** - обобщение произведения на произвольные диаграммы. Важнейшие частные случаи: pullback (тяговое произведение) и equalizer (уравнитель).
**Пределы и сохранение функторами:** Не каждый функтор сохраняет пределы. Правые присоединённые функторы сохраняют пределы; левые - копределы. Это ключевая теорема для понимания монад.
Что вычисляет pullback A ×_C B в категории Set?
Сопряжения: самое важное понятие теории категорий
**Сопряжение** (adjunction) F ⊣ G между функторами F: C→D и G: D→C - наиболее фундаментальная концепция теории категорий. «Adjoint functors arise everywhere» (Saunders Mac Lane).
**Монады из сопряжений:** Любое сопряжение F ⊣ G порождает монаду T = G∘F. Монада Maybe = T из сопряжения Pointed ⊣ Forgetful. Список = T из Free ⊣ Forgetful. Все монады (в Set) возникают из сопряжений (Eilenberg-Moore, 1965).
Curry/uncurry в Haskell - это пример чего в теории категорий?
Ключевые идеи
- Универсальное свойство: объект определяется отношениями с другими, не строением
- Предел: произведение, pullback, equalizer - все через универсальное свойство
- Pullback A ×_C B = {(a,b) | f(a) = g(b)} - SQL JOIN
- Сопряжение F ⊣ G: Hom(F(c), d) ≅ Hom(c, G(d))
- Curry/uncurry = сопряжение Product ⊣ Exponential
Связанные темы
Пределы и сопряжения - фундамент монад.
Вопросы для размышления
- Докажите, что декартово произведение - это частный случай pullback (когда C = {*} терминальный объект).
- Как free/forgetful adjunction объясняет, почему свободная монада - самая общая монада?
- Почему правые присоединённые функторы сохраняют пределы?