Pull to refresh

Comments 44

UFO just landed and posted this here
Спасибо. А скажите, текст стал сложнее по содержанию или по изложению? Я так понимаю, что говоря о многочисленных новых обозначениях и определениях, Вы имеете ввиду второе, но достаточно ли просто объясняется то, что кроется за вводимыми обозначениями?

Я смотрю на всё это следующим образом:
С одной стороны введение терминологии и обозначений далеко не всегда является необходимым, но с другой стороны, оно нацеленно на то, чтобы упростить дальнейшее изложение, сделать его язык более высокоуровневым. Другое дело, что для того, что для того, чтобы читатель мог легко понимать этот новый язык, он должен приобрести интуитивное восприятие вводимых терминов, чтобы читая их не расшифровывать каждый раз, а понимать в целом. И задача автора в том, чтобы упростить формирование этой интуиции у читателя — с помощью наглядных примеров, аналогий и экстраполяций.

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

Насчёт перевода «instance» как «воплощение» — я встречал такой вариант в Мягком введении в Haskell. И мне кажется, это слово достаточно хорошо отражает смысл понятия класс как абстракции, которую воплощают в себе конкретные сущности. «Экземпляр» же с одной стороны отражает суть класса как совокупности типов, что тоже хорошо. Думаю, стоит чередовать эти термины, поскольку они не противоречат друг другу ")
По-моему, когда нажимаешь «Ответить» -> «Предпросмотр» -> «Написать», комментарий постится не туда "/
UFO just landed and posted this here
Ага.
«экземпляр воплощает класс в типе» – это хорошо, ёмко.
它走完 категории 的厂房 и их 来体验 структура.

Но я честно как-нибудь попытаюсь разобраться в том, о чём написано.
UFO just landed and posted this here
(: Хотелось просто сделать название ёмким.
Вы спрашивайте, если что непонятно – буду рад разъяснить (;
α ↦ Maybe α ↦ [Maybe α] — а вто тут что за странный квадратик? И какой Вы используете шрифт? А то я попробовал всяко разные, везде этот квадратик отображается квадратиком.
Хм,, даже не думал, что у кого-то возникнут проблемы с юникодовскими символами… У меня в браузере по умолчанию шрифты Times и Courier. Пока писал, в редакторе использовал Monofur.
А какой именно символ у Вас отображается квадратиком? Просто Вы скопировали из поста видимо и оно у меня в тут и там нормально всё выглядит. Там написано: a -> Maybe a -> [Maybe a]. Только вместо «a» – альфа, а вместо "->" – другая стрелочка, что-то типа |-->.
Стрелочка и некоторые другие. Видимо, это какая-то проблема со шрифтами у меня, потому что на другой машине с точно таким же Firefox всё показывается нормально. Буду разбираться.
А я тут, как обычно, с критикой :) А чем, собственно, вот эти все построения отличаются от понятия полугруппы с единицей (ну, того же моноида теоретико-множественного). То есть, мы уже знаем, из предыдущей математики, что существуют такие полугруппы, в том числе и для отображений с композицией. Эмс. В чём смысле перезаписи этого понятия в терминах теории категорий? Или это станет понятно из следующей публикации?
UFO just landed and posted this here
Думается, что многим было бы интересно почитать именно про особенности применения ТК (определения и так все знают, они не такие уж и сложные). А раз есть моноид и теоретикомножественный и теоретикокатегорный, то на его примере можно было бы как раз и показать отличия. Вот. Я бы с удовольствием такое бы почитал. Потому что пока в интернете я наталкиваюсь именно на определения ТК и на описание того, чему они соответствуют в других областях математики.
UFO just landed and posted this here
Значит, надо выражать примерами :) Можно ли какие-нибудь привести с указанием: а вот на это решение повлияло знание ТК. Даже без объяснения, как именно повлияло, это был бы весьма интересный материал.
UFO just landed and posted this here
Как пример, можно почитать про подход Denotational design with type class morphisms.

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

В общем, в Haskell-е надо использовать моноиды-функторы-аппликативные функторы-монады-стрелки вовсю. И, говорят, будет счастье.
Это действительно одно и то же. Вот что пишет Маклейн:
«Моноид – это категория с одним объектом. Как следствие, моноид определяется множеством своих стрелок, единичной стрелкой и правилом композиции стрелок. Поскольку произведение определено для любой пары стрелок, то моноид можно описать как множество M с бинарной операцией M x M --> M, ассоциативной и имеющей единицу. Таким образом, моноид – то же самое, что полугруппа с единицей

(«Категории для работающего математика», Гл 1.2)

Разница просто в используемой терминологии. С точки зрения изложения материала, я посчитал, что правильнее привести сначала пример того, что читатель уже знает – категории, но именно категории с одним объектом и потом объяснить, что уже известные категорные аксиомы, в данном частном случае, называются структурой моноида. А потом можно объяснять другие ипостаси этого понятия и приводить примеры множеств с бинарной операцией. Я предполагаю, что читатель может ничего не знать о теории групп и потому не лезу в отдельную теорию, которая не является необходимой для основной темы статьи ")
UFO just landed and posted this here
Так-то оно так. Но я рассчитываю всё же на не подготовленного читателя: думаю, на хабре в основном программисты, которые хотя и учились в техническом вузе, давно забыли теорию групп и прочую абстрактную алгебру.
.
В любом случае я не вижу проблем с теми, кто знает теорию групп — я ведь никого не обманываю эквивалентными определениями — напротив, таким подкованным читателям по-моему полезно взглянуть на знакомое понятие с нового ракурса.

UFO just landed and posted this here
А почему теория групп перестала быть частью абстрактной алгебры? Наверное 3/4 книги «Прикладная абстрактная алгебра» посвящена именно теории групп :) И забывать её уж точно не нужно, ибо используется она в огромном количестве алгоритмов.
Я не говорил, что она не является частью. «теорию групп и прочую абстрактную алгебру» – значит одна часть и все остальные части целого. А насчёт нужно забывать или нет – к чему говорить о долге, я говорю о том, что многие действительно забывают. Или Вы рассчитываете, что все помнят, постоянно используют и понимают это?
Ну. Собственно, мой вопрос был не о том, почему именно в этой стетье рассказывается о ТК-моноиде. Это понятно. Программисты на Haskell её любят. Вопрос в другом: а какие преимущества даёт TK подход?
Категориальное определение облегчает дальнейшее обобщение понятий. В случае моноида — на произвольные категории и n-категории: топологические группы, группы Ли, 2-моноиды и прочие представители семейства получаются из определения тривиальным образом. Ну и в пределе — можно красивой табличной нарисовать стабилизационную гипотезу Баеца-Долана.
А смысл? Например, группы Ли же полезны не как абстрактные группы, а как группы вполне определённых симметрий. Какая польза от определения их именно в терминах ТК? Вот чего я не понимаю…
Понятие полезности надо как-то строго определять, потому как у разных людей оно разное. В категориальном определении, прежде всего, есть высокий уровень абстракции: мы не обращаем внимания на внутреннее устройство, зато легко можем заметить место структуры в иерархии.

Так, в теории множеств мы определяем декартово произведение, а в теории категорий — произведение в общем, как предел. Следствием этого является то, что поменяв подлежащую категорию (гарантировав лишь, что она обладает соответствующими пределами) мы получаем новую конструкцию, что называется, бесплатно. А рассмотрев её свойства, делаем выводы о проблемах применимости теоретико-множественных подходов к категории Гильбертовых пространств (например).

То же самое о группах. Если вас интересует их структура и свойства как объекта, теоретико-категориальный подход вряд ли будет удачным решением. Но если вас интересует структура взаимодействий, общие и различные аспекты разных частных случаев, нетривиальные обобщения — куда как проще будет воспользоваться специально разработанным для этого языком. Учитывая тематику сайта, ТМ — это структурное программирование, а ТК — ООП: в первом случае нас интересует структура, во втором — интерфейсы.
Ну и да, в данном конкретном случае теоретико-категориальный подход хорош как минимум потому, что монаду теоретико-множественно вводить уж очень неудобно — в то время, как обобщение от ТК-моноида делается тривиально.
UFO just landed and posted this here
Я вот вашу формулировку не очень понимаю. Особенно «моноид над эндофункторами». Позвольте я распишу чуть подробнее:
Монада – это моноидальный объект в моноидальной категории эндофункторов.

Моноидальная категория эндофункторов:
  • Объекты: эндофункторы некоторой категории С.
  • Морфизмы: естественные преобразования.
  • Моноидальная структура:
    • Умножение: композиция функторов.
    • Единица: тождественный функтор.

Моноид (моноидальный объект) в этой категории – это объект с двумя морфизмами (опять умножение и единица), то есть функтор с двумя ест. преобр-ми. Это и есть монада.

Думаю так иероглифов меньше… не?
UFO just landed and posted this here
Ну вот меня просто смущает, что частенько говорят, «моноид» вместо более точного «моноидальный объект» – и так и так конечно правильно, но первое можно неправильно истолковать.
UFO just landed and posted this here
Да. Но когда говорят просто «моноид в категории», имхо, не очень понятно, что это такой особый объект-моноид.
А можно так: моноид — это дегенеративная (одноэлементная) категория. 2-моноид, соответственно, дегенеративная 2-категория.
Эх, надеялся, что вы уже в этом посте доберётесь до монад… Отличные статьи! Продолжайте, пожалуйста!
Спасибо ") Монады постараюсь охватить в следующей части. Хотя вообще-то, я хотел написать следующую часть про естественные преобразования, а уже в 4й собрать всё воедино и преподнести монады, как венец всех этих… абстракций ")
Боюсь, что если всё запихнуть в одну часть, получится скомкано и сложно… После того, как я понял, что вторая часть пошла хуже из-за каких-то сложностей в изложении, я с трудом оцениваю степень подробности, с которой надо писать дальше…
Вы лучше не торопитесь и делайте так, как собирались. Также помните, что примеры — ваши главные друзья. Советовать что-то более конкретное не стану, потому что, во-первых, думаю, что это не в последнюю очередь вопрос творческий, и вам нужно доверять своей интуиции и вдохновению, а во-вторых, потому что у меня есть кое-какой теоркатегорный бэкграунд, и говорить что делать, чтобы статьи стали более доступны хабровчанам, я не считаю возможным.
Спасибо. Да, постараюсь подготовить хорошие примеры и иллюстрации.
Отличные статьи (обе)! Написаные для программистов, а не для математиков, они радуют меня с недавних пор привычными хаскельными обозначениями. Теперь жду про монады :-)

Спасибо!
Спасибо ") Рад, что Вам понравилось!
К сожалению, продолжение откладывается, в связи с тем, что я сейчас очень занят дипломом. Но когда появится свободное время, обязательно напишу про естественные преобразования, монады и, возможно, ещё некоторые темы связанные с математикой, осознанной через призму хаскеля. В ходе работы над дипломом много таких интересных вещей накапливается, но, к сожалению прямо сейчас нет времени на то, чтобы писать о них статьи… "(
Спасибо за статьи, вы очень хорошо объясняете! Жаль, что продолжение (надеюсь только пока) не состоялось.
Sign up to leave a comment.

Articles