Теория категорий

Пределы и копределы: универсальные конструкции

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 объясняет, почему свободная монада - самая общая монада?
  • Почему правые присоединённые функторы сохраняют пределы?

Связанные уроки

  • ml-07
  • aa-12-modules
Пределы и копределы: универсальные конструкции

0

1

Войти