Не понимаю обозначения морфизмов в определении моноидов

Я пытаюсь понять что Monoid с точки зрения теории категорий, но я немного запутался с нотацией, используемой для его описания. Вот Википедия:

В теории категорий моноид (или моноидный объект) (M, µ, η) в моноидальной категории (C, ⊗, I) является объектом M вместе с двумя морфизмами.

μ: M ⊗ M → M называется умножением,

η: I → M называется единицей

Моя путаница связана с обозначением морфизма. Почему бинарная операция часть записи морфизма? Мое понимание морфизма заключается в том, что это своего рода функция, которая может отображаться из одного типа в другой (домен в кодомен), например M → M, Почему операция часть домена в определении? Второе замешательство о I, Почему I домен? Здесь нет I объект в Monoid совсем. Это просто нейтральный элемент объекта M,

Я это понимаю Monoid это категория с одним объектом, морфизмом идентичности и бинарной операцией, определенной для этого объекта, но запись заставляет меня думать, что я чего-то не понимаю.

Является M ⊗ M как-то связано с декартовым произведением, так что область морфизма определяется как M x M?

Изменить: я получил действительно полезный ответ на мой вопрос по обмену стека математики.

1 ответ

Решение

Является M ⊗ M В некоторой степени это связано с декартовым произведением, поэтому область морфизма определяется как M x M?

Именно так. Более конкретно, мы получаем те моноиды, которые выражаются Monoid класс из базы, выбирая Hask (категорию со всеми типами Haskell в качестве объектов и всеми функциями Haskell в качестве морфизмов) в качестве C, (,) (конструктор парного типа) как , и () (тип блока) как я. Подписи µ и η, переведенные в Haskell, становятся:

μ :: (M, M) -> M
η :: () -> M

Карринг, и используя как () -> M функции находятся в непосредственном соответствии с M ценности (все они выглядят как \() -> m для некоторых m), мы знакомимся Monoid методы:

mappend :: M -> M -> M
mempty :: M

Обратите внимание, что категориальное определение гораздо более общее, чем просто Monoid, Например, мы могли бы продолжать работать в Hask, заменяя (,) а также () с их двойниками, Either а также Void, таким образом получая:

μ :: Either A A -> A
η :: Void -> A

Каждый тип Хаскелла является моноидом именно таким образом (either id id и η является absurd).


Другой пример - использование C в качестве категории Haskell. Functor s (с естественными преобразованиями между ними - которые я напишу как type f ~> g = forall a. f a -> g a - как морфизмы), Compose как , и Identity как я:

-- Note the arrows here are ~>, and not ->
μ :: Compose M M ~> M
η :: Identity ~> M

Эти два обычно пишутся как:

-- "Inlining" the definitions of Compose, Identity, and ~>
join :: M (M a) -> M a
return :: a -> M a

Другими словами, Monad является моноидом в категории Functor s (что является специфической для Хаск версией "монада является моноидом в категории эндофункционеров"). Стоит отметить, что, как и в другом примере, это не единственный способ вывести моноиды из этой категории (см. Последний абзац этого ответа для указателей - остальная часть, на самом деле, может иметь отношение к чтению, как это обсуждает понятие моноидальной категории).

Другие вопросы по тегам