Монада - это просто моноид в категории эндофункторов, в чем проблема?

попробуйте следующее:

       indicatorComboBox = new JComboBox() {

        /**
         * Do not fire if set by program.
         */
        protected void fireActionEvent() {
            // if the mouse made the selection -> the comboBox has focus
            if(this.hasFocus())
                super.fireActionEvent();
        }
    };
688
задан Cœur 9 November 2018 в 15:22
поделиться

1 ответ

Ответы здесь делают превосходное задание в определении и моноиды и монады, однако, они все еще, кажется, не отвечают на вопрос:

И на менее важной ноте, действительно ли это верно, и раз так Вы могли дать объяснение (надо надеяться, тот, который может быть понят под кем-то, у кого нет большого опыта Haskell)?

основная проблема, которая отсутствует здесь, является другим понятием "моноида", так называемое categorification более точно - тот моноида в моноидальной категории. Печально сама книга Маршрута Mac делает это очень сбивающим с толку :

Все сказали, монада в X является просто моноидом в категории эндофункторов X с продуктом × замененный составом эндофункторов и единицы, установленной эндофунктором идентификационных данных.

Основной беспорядок

, Почему это сбивает с толку? Поскольку это не определяет то, что является "моноидом в категории эндофункторов" X. Вместо этого это предложение предлагает брать моноид в набор всех эндофункторов вместе с составом функтора как бинарная операция и функтор идентификационных данных как моноидальная единица. Который работает превосходный и превращается в моноид любое подмножество эндофункторов, которое содержит функтор идентификационных данных и закрывается под составом функтора.

все же это не корректная интерпретация, которая книге не удается ясно дать понять на том этапе. Монада f , зафиксировал эндофунктор, не подмножество эндофункторов, закрытых под составом. Общая конструкция должна использовать f для [1 173], генерируют моноид путем взятия набора всего k - составы сгиба f^k = f(f(...)) из [1 112] с собой, включая [1 113], который соответствует идентификационным данным f^0 = id. И теперь набор S из всех этих полномочий для всего k>=0 является действительно моноидом "с продуктом Г — замененный составом эндофункторов и единицы, установленной эндофунктором идентификационных данных".

И все же:

  • Этот моноид S может быть определен для любого функтора f или даже буквально для любой самокарты X. Это - моноид, сгенерированный [1 120].
  • моноидальная структура [1 121] данный составом функтора и функтором идентификационных данных ничего не имеет, делают с [1 122] являющийся или не являющийся монадой.

И сделать вещи более сбивающими с толку, определение "моноида в моноидальной категории" появляется позже в книгу, как Вы видите от оглавление . И все же понимание этого понятия абсолютно очень важно для понимания соединения с монадами.

(Строгие) моноидальные категории

Движение к Главе VII по Моноидам (который прибывает позже, чем Глава VI по Монадам), мы находим определение так называемого строгая моноидальная категория как трижды (B, *, e), где B категория, *: B x B-> B , bifunctor (функтор относительно каждого компонента с другим зафиксированным компонентом) и e является объектом единицы в [1 127], удовлетворяя законы о единице и ассоциативность:

(a * b) * c = a * (b * c)
a * e = e * a = a

для любых объектов a,b,c из [1 129], и те же идентификационные данные для любых морфизмов a,b,c с [1 131] замененный [1 132], морфизма идентификационных данных [1 133]. Это теперь поучительно, чтобы заметить, что в нашем случае интереса, где B категория эндофункторов [1 135] с естественными преобразованиями как морфизмы, * состав функтора и e функтор идентификационных данных, все эти законы удовлетворены, как может быть непосредственно проверен.

то, Что прибывает после в книгу, является определением "расслабленного" моноидальная категория , где законы только содержат по модулю некоторые фиксированные естественные преобразования, удовлетворяющие так называемый отношения когерентности , который однако не важен для наших случаев категорий эндофунктора.

Моноиды в моноидальных категориях

Наконец, в разделе 3 "Моноида" Главы VII, фактическое определение дано:

моноид А c в моноидальной категории (B, *, e) является объектом [1 140] с двумя стрелками (морфизмы)

mu: c * c -> c
nu: e -> c

создание 3 коммутативных схем. Вспомните, что в нашем случае, это морфизмы в категории эндофункторов, которые являются естественными преобразованиями, соответствующими точно join и return для монады. Соединение становится еще более четким, когда мы делаем состав * более явным, заменяя c * c [1 145], где c наша монада.

Наконец, заметьте, что 3 коммутативных схемы (в определении моноида в моноидальной категории) записаны для общих (нестрогих) моноидальных категорий, в то время как в нашем случае все естественные преобразования, возникающие как часть моноидальной категории, являются на самом деле идентификационными данными. Это сделает схемы точно тем же как те в определении монады, делая корреспонденцию завершенной.

Заключение

, Таким образом, любая монада является по определению эндофунктором, следовательно объект в категории эндофункторов, где одноместные join и return операторы удовлетворяют определение моноид в той конкретной (строгой) моноидальной категории . Наоборот, любой моноид в моноидальной категории эндофункторов является по определению тройным (c, mu, nu) состоящий из объекта и двух стрелок, например, естественных преобразований в нашем случае, удовлетворяя те же законы как монада.

Наконец, отметьте основное отличие между (классическими) моноидами и более общими моноидами в моноидальных категориях. Эти две стрелки mu и nu выше больше не являются бинарной операцией и единицей в наборе. Вместо этого у Вас есть зафиксированный эндофунктор того c. Состав * функтора и один только функтор идентификационных данных не обеспечивают полную структуру, необходимую для монады, несмотря на тот запутывающий комментарий в книге.

Другой подход должен был бы соответствовать стандартному моноиду C из всех самокарт набора A, где бинарная операция является составом, который виден для отображения стандартного декартова произведения C x C в [1 157]. Передавая categorified моноиду, мы заменяем декартово произведение x составом * функтора, и бинарная операция заменяется естественным преобразованием mu от [1 161] до [1 162], который является набором эти join операторы

join: c(c(T))->c(T)

для каждого объекта T (тип в программировании). И нейтральные элементы в классических моноидах, которые могут быть отождествлены с изображениями карт от фиксированного одного набора точки, заменяются набором эти return операторы

return: T->c(T) 

, Но теперь нет никаких более декартовых произведений, таким образом, никакие пары элементов и таким образом никакие бинарные операции.

2
ответ дан 22 November 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: