У нас было немного времени для разговора, и в ходе разговора я понял, что стал меньше бояться некоторых тем, связанных с монадами.
Монады, похоже, беспокоят многих людей. На YouTube даже есть видео под названием «Монады ранят мою голову!»... Вскоре после этого говорящая женщина восклицает:
Какого чёрта?! Как вы вообще объясните, что такое монада?
Джон Баез, [1]
В теории категорий , разделе математики , монада — это тройка , состоящая из функтора T из категории в себя и двух естественных преобразований , удовлетворяющих условиям типа ассоциативности. Например, если — функторы, сопряженные друг другу, то вместе с определяемым отношением сопряженности — монада.
В кратком смысле, монада — это моноид в категории эндофункторов некоторой фиксированной категории ( эндофунктор — это функтор, отображающий категорию в себя). Согласно Джону Баэзу, монаду можно рассматривать по крайней мере двумя способами: [1]
Монады используются в теории пар сопряженных функторов , и они обобщают операторы замыкания на частично упорядоченных множествах на произвольные категории. Монады также полезны в теории типов данных , денотационной семантике императивных языков программирования и в функциональных языках программирования , позволяя языкам без изменяемого состояния делать такие вещи, как имитация циклов for ; см. Монада (функциональное программирование) .
Монаду также называют, особенно в старой литературе, тройкой , триадой , стандартной конструкцией и фундаментальной конструкцией . [2]
Монада — это определенный тип эндофунктора . Например, если и являются парой сопряженных функторов , с левым сопряженным к , то композиция является монадой. Если и обратны друг другу, соответствующая монада является тождественным функтором . В общем случае, присоединения не являются эквивалентностями — они связывают категории различной природы. Теория монад имеет значение как часть усилий по пониманию того, что именно «сохраняют» присоединения. Другая половина теории, то, что можно узнать аналогичным образом из рассмотрения , обсуждается в рамках двойственной теории комонад .
В этой статье обозначает категорию . Монада на состоит из эндофунктора вместе с двумя естественными преобразованиями : (где обозначает тождественный функтор на ) и (где — функтор из в ). Они требуются для выполнения следующих условий (иногда называемых условиями когерентности ):
Мы можем переписать эти условия, используя следующие коммутативные диаграммы :
Объяснение обозначений и см. в статье о естественных преобразованиях , или ниже приведены коммутативные диаграммы, не использующие эти понятия:
Первая аксиома сродни ассоциативности в моноидах , если мы думаем о ней как о бинарной операции моноида, а вторая аксиома сродни существованию элемента тождества (который мы думаем как заданный посредством ). Действительно, монаду на можно альтернативно определить как моноид в категории , чьи объекты являются эндофункторами , а морфизмы — естественными преобразованиями между ними, с моноидальной структурой, индуцированной композицией эндофункторов.
Монада набора мощности является монадой в категории : Для набора пусть будет набором мощности , а для функции пусть будет функцией между наборами мощности, индуцированными путем взятия прямых изображений под . Для каждого набора у нас есть карта , которая назначает каждому синглтону . Функция
принимает набор множеств в его объединение . Эти данные описывают монаду.
Аксиомы монады формально подобны аксиомам моноида . Фактически, монады являются частными случаями моноидов, а именно, они являются как раз моноидами среди эндофункторов , которые снабжены умножением, заданным композицией эндофункторов.
Композиция монад, в общем случае, не является монадой. Например, функтор double power set не допускает никакой монадной структуры. [3]
Категориальное двойственное определение является формальным определением комонады ( или котрипла ); это можно быстро выразить в терминах, что комонада для категории является монадой для противоположной категории . Следовательно, это функтор из в себя, с набором аксиом для коединицы и коумножения , которые получаются путем изменения положения стрелок везде в только что данном определении.
Монады относятся к моноидам так же, как комонады относятся к комоноидам . Каждое множество является комоноидом уникальным образом, поэтому комоноиды менее знакомы в абстрактной алгебре , чем моноиды; однако комоноиды в категории векторных пространств с их обычным тензорным произведением важны и широко изучаются под названием коалгебр .
Понятие монады было изобретено Роже Годеманом в 1958 году под названием «стандартная конструкция». Монаду называли «двойной стандартной конструкцией», «тройной», «моноидом» и «триадой». [4] Термин «монада» был использован не позднее 1967 года Жаном Бенабу . [5] [6]
Функтор тождества на категории — это монада. Его умножение и единица — это функция тождества на объектах .
Любое присоединение
дает монаду на C. Эта очень распространенная конструкция работает следующим образом: эндофунктор является составным
Этот эндофунктор быстро оказывается монадой, где единичная карта вытекает из единичной карты присоединения, а карта умножения строится с использованием коединичной карты присоединения:
Фактически, любая монады может быть найдена как явное присоединение функторов с использованием категории Эйленберга–Мура (категории -алгебр). [7]
Двойная дуализация монада для фиксированного поля k возникает из присоединения
где оба функтора задаются путем отправки векторного пространства V в его двойственное векторное пространство . Связанная монада отправляет векторное пространство V в его двойное двойственное . Эта монада обсуждается, в гораздо большей общности, Коком (1970).
Для категорий, возникающих из частично упорядоченных множеств (с единственным морфизмом из в тогда и только тогда, когда ), формализм становится намного проще: сопряженные пары являются связями Галуа , а монады — операторами замыкания .
Например, пусть будет забывающим функтором из категории Grp групп в категорию Set множеств, и пусть будет свободным групповым функтором из категории множеств в категорию групп. Тогда является левым сопряженным к . В этом случае ассоциированная монада берет множество и возвращает базовое множество свободной группы . Единичное отображение этой монады задается отображениями
включая любой набор в набор естественным образом, как строки длины 1. Далее, умножение этой монады есть отображение
сделанные из естественной конкатенации или «уплощения» «строк строк». Это равносильно двум естественным преобразованиям . Предыдущий пример о свободных группах может быть обобщен на любой тип алгебры в смысле многообразия алгебр в универсальной алгебре . Таким образом, каждый такой тип алгебры порождает монаду в категории множеств. Важно, что тип алгебры может быть восстановлен из монады (как категории алгебр Эйленберга–Мура), поэтому монады также можно рассматривать как обобщающие многообразия универсальных алгебр.
Другая монада, возникающая из присоединения, — это когда — эндофунктор в категории векторных пространств, который отображает векторное пространство в его тензорную алгебру и который отображает линейные отображения в их тензорное произведение. Тогда у нас есть естественное преобразование, соответствующее вложению в его тензорную алгебру , и естественное преобразование, соответствующее отображению из в полученное простым расширением всех тензорных произведений.
При мягких условиях функторы, не допускающие левого сопряженного, также порождают монаду, так называемую монаду коденсити . Например, включение
не допускает левого сопряженного. Его монада коденсити — это монада на множествах, отправляющая любое множество X в множество ультрафильтров на X . Этот и подобные примеры обсуждаются в Leinster (2013).
Следующие монады над категорией множеств используются в денотативной семантике императивных языков программирования , а аналогичные конструкции используются в функциональном программировании.
Эндофунктор монады « может быть» или «частичность» добавляет точку непересечения: [8]
Единица измерения получается путем включения множества в :
Умножение отображает элементы в себя, а две непересекающиеся точки в — в одну в .
Как в функциональном программировании, так и в денотационном семантике монада Maybe моделирует частичные вычисления , то есть вычисления, которые могут завершиться неудачей.
При наличии множества эндофунктор монады состояния отображает каждое множество в множество функций . Компонент единицы в отображает каждый элемент в функцию
Умножение отображает функцию в функцию
В функциональном программировании и денотационном семантике монада состояния моделирует вычисления с сохранением состояния .
При наличии множества эндофунктор монады читателя или окружения отображает каждое множество в множество функций . Таким образом, эндофунктор этой монады — это в точности функтор hom . Компонента единицы at отображает каждый элемент в константную функцию .
В функциональном программировании и денотационном семантике монада окружения моделирует вычисления с доступом к некоторым данным, доступным только для чтения.
Монада списка или недетерминизма отображает множество X в множество конечных последовательностей (т. е. списков ) с элементами из X. Единица отображает элемент x из X в список синглтона [x]. Умножение объединяет список списков в один список.
В функциональном программировании монада list используется для моделирования недетерминированных вычислений . Ковариантная монада powerset также известна как монада set и также используется для моделирования недетерминированных вычислений.
При наличии монады в категории естественно рассматривать -алгебры , т.е. объекты , на которые действует способом, совместимым с единицей и умножением монады. Более формально, -алгебра - это объект вместе со стрелкой , называемой структурной картой алгебры, такой, что диаграммы
добираться.
Морфизм -алгебр - это стрелка такая , что диаграмма
коммутирует. -алгебры образуют категорию, называемую категорией Эйленберга–Мура и обозначаемую .
Например, для свободной групповой монады, обсуждавшейся выше, -алгебра представляет собой множество вместе с отображением из свободной группы, порожденной в направлении , при соблюдении условий ассоциативности и унитальности. Такая структура эквивалентна утверждению, что является группой.
Другим примером является монада распределения в категории множеств. Она определяется путем отправки множества множеству функций с конечным носителем и таким образом, что их сумма равна . В нотации конструктора множеств это множество Рассматривая определения, можно показать, что алгебры над монадой распределения эквивалентны выпуклым множествам , т. е. множествам, снабженным операциями для , подчиняющимся аксиомам, напоминающим поведение выпуклых линейных комбинаций в евклидовом пространстве. [9]
Другим полезным примером монады является функтор симметричной алгебры в категории -модулей для коммутативного кольца . отправляющий -модуль в прямую сумму симметричных тензорных степеней , где . Например, где -алгебра справа рассматривается как модуль. Тогда алгебра над этой монадой является коммутативной -алгеброй. Существуют также алгебры над монадами для знакопеременных тензоров и полных тензорных функторов, дающие антисимметричные -алгебры и свободные -алгебры, так что где первое кольцо является свободной антисимметричной алгеброй над в -генераторами, а второе кольцо является свободной алгеброй над в -генераторами.
Существует аналогичная конструкция для коммутативных -алгебр [10] стр. 113, которая дает коммутативные -алгебры для коммутативной -алгебры . Если - категория -модулей , то функтор - это монада, заданная как , где -времена. Тогда существует ассоциированная категория коммутативных -алгебр из категории алгебр над этой монадой.
Как было сказано выше, всякое присоединение порождает монаду. И наоборот, всякая монада возникает из некоторого присоединения, а именно, из свободно-забывчивого присоединения
чей левый сопряженный элемент отправляет объект X в свободную T -алгебру T ( X ). Однако обычно существует несколько различных присоединений, порождающих монаду: пусть будет категорией, объектами которой являются присоединения, такие что и чьи стрелки являются морфизмами присоединений, которые являются тождественными на . Тогда указанное выше свободно-забывающее присоединение, включающее категорию Эйленберга–Мура, является конечным объектом в . Начальным объектом является категория Клейсли , которая по определению является полной подкатегорией , состоящей только из свободных T -алгебр, т.е. T -алгебр вида для некоторого объекта x из C .
При наличии любого присоединения с ассоциированной монадой T функтор G может быть разложен как
т. е. G ( Y ) может быть естественным образом наделена структурой T -алгебры для любого Y в D . Присоединение называется монадическим присоединением , если первый функтор дает эквивалентность категорий между D и категорией Эйленберга–Мура . [11] По расширению, функтор называется монадическим, если у него есть левый сопряженный, образующий монадическое присоединение. Например, свободно-забывающее присоединение между группами и множествами является монадическим, поскольку алгебры над ассоциированной монадой являются группами, как было упомянуто выше. В общем случае, знание того, что присоединение является монадическим, позволяет реконструировать объекты в D из объектов в C и T -действия.
Теорема Бека о монадичности дает необходимое и достаточное условие для того, чтобы присоединение было монадическим. Упрощенная версия этой теоремы утверждает, что G является монадическим, если он консервативен (или G отражает изоморфизмы, т. е. морфизм в D является изоморфизмом тогда и только тогда, когда его образ при G является изоморфизмом в C ) и C имеет и G сохраняет коуравнители .
Например, забывающий функтор из категории компактных хаусдорфовых пространств в множества является монадическим. Однако забывающий функтор из всех топологических пространств в множества не является консервативным, поскольку существуют непрерывные биективные отображения (между некомпактными или нехаусдорфовыми пространствами), которые не являются гомеоморфизмами . Таким образом, этот забывающий функтор не является монадическим. [12] Двойственная версия теоремы Бека, характеризующая комонадические присоединения, актуальна в различных областях, таких как теория топосов и разделы алгебраической геометрии, связанные со спуском . Первым примером комонадического присоединения является присоединение
для гомоморфизма колец между коммутативными кольцами. Это присоединение является комонадическим, по теореме Бека, тогда и только тогда, когда B является строго плоским как A -модуль. Таким образом, оно позволяет спускать B -модули, снабженные данными спуска (т. е. действием комонады, заданным присоединением), к A -модулям. Полученная теория строго плоского спуска широко применяется в алгебраической геометрии.
Монады используются в функциональном программировании для выражения типов последовательных вычислений (иногда с побочными эффектами). См. монады в функциональном программировании и более математически ориентированный модуль Wikibook b:Haskell/Category theory.
Монады используются в денотативной семантике нечистых функциональных и императивных языков программирования . [13] [14]
В категорической логике была проведена аналогия между теорией монад-комонад и модальной логикой посредством операторов замыкания , внутренних алгебр и их связи с моделями S4 и интуиционистскими логиками .
Можно определить монады в категории 2. Монады, описанные выше, являются монадами для .