Pull to refresh

Comments 12

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

Вы слишком большой, а статья для маленьких.

по каждому морфизму f однозначно определяются такие X, Y ∈ Ob(C), что множества Homc(X, Y) не пересекаются. То есть между элементами X и Y существует единственная связь f

Чего чего!? Что это за такое странное условие? Это в учебнике Ершова так написано?

До фразы "То есть..." взято из учебника, да. Кстати заметила, действительно, начиная с "То есть.." фраза звучит кривовато, это уберу.

В таком случае вы наверное уже понимаете, что пример 2 решен вами неправильно. Ответ правильный, но ход решения нет.

Решение должно быть такое: по определению композиции для любой композиции стрелок существует какая то стрелка равная этой самой композиции. Т.е. существует стрелка g°f из A в A. Согласно рисунку единственная стрелка из A в A это idA значит g°f=idA. Те же рассуждения верны и для f°h=idB. Рассмотрим композицию трёх стрелок g°f°h=g°(f°h)=(g°f)°h т.к. композиция ассоциативна. Значит g°idB=idA°h откуда следует что g=h т.е. это не 2 разные, а одна и та же стрелка.

Ну да, про f и g неверно, но условие про тождественный морфизм - есть аксиома, что он определяется однозначно - все еще имеет смысл. Спасибо за замечание, помогло развеять мое неверное представление)

есть аксиома, что он определяется однозначно

Полагаю, речь о том, что id(A) единственен.

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

На самом деле, прекрасно вас понимаю, теоркат он такой, провоцирует на неправильное прочтение с далеко идущими последствиями.

Покажите, пожалуйста, пример, как с помощью теории категорий можно что-то вычислить. Например, с помощью теории групп можно вычислить очень много полезного. Например, группы Ли применяются в прикладной физике. Ну и уж куда там, матрицы и AI из них, топологические аргументы там же и т.д. SQL это тоже своего рода вполне алгебра. Криптография так же пользуется именно теорией групп! Про теорию категорий пытаюсь смотреть лет 15 и не видел ни разу примера, где бы она давала какой-то вычислительный инструмент. Только самомозерцание её собой я вижу. Подскажете примеры?

Теория категорий действительно ничего не дает науке в плане новых результатов. Однако она показывает общую картину обобщения: будь то категория групп, алгебр или топологий. В общем для понимания единого и прекрасного ))

Ну это как-то такое себе определение. Когомологии и т д. тоже кажутся абстрактной мутью, а с помощью них можно с атомом работать.

По моему опыту ТК хорошо показывает себя в программировании в двух основных случаях:

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

  2. В частности, это позволяет оперировать известными понятиями и аналогиями (пространство, отображение, подпространство, произведение) без уточнения конкретики. Например,

    1. в физике мы можем долго говорить о периодичной волновой функции и порождаемом ей расслоении на зоне Бриллюэна без уточнения, считаем ли мы её гладкой или дважды гладкой: в каждом случае мы просто говорим, что все упомянутые в рассуждении функции будут такими, какими мы хотим. Рассуждения становятся короткими, вся математическая лабуда про гладкость не упоминается, а выкладки не перестают быть формальными. При этом по рассуждениям чётко видно, какие минимальные требования на гладкость накладываются.

    2. В программировании ТК позволяет нам корректно говорить о тех функциях, которыми мы программируем. Ведь если говорить по-честному, то, что мы привыкли называть функциями в программировании, имеет мало что общего с функциями в классической математике: 1) первые могут зацикливаться, а вторые всегда что-то возвращают; 2) первые с необходимостью задают алгоритм вычисления (даже в декларативных языках), вторые — нет; 3) первые имеют нефункциональные характеристики (затраты по времени и памяти), вторые — нет; 4) недетерминизм, работа с состоянием и прочие прелести во всех ЯП, кроме чистых функциональных.
      Тем не менее на практике мы склонные отождествлять эти понятия в одних случаях, и различать только тогда, когда вышеприведённые особенности проявляются. ТК легализует подобную (якобы) демагогию, переводя в статус аккуратно формализованной теории.

  3. (обучение) когда надо спроектировать API, чтобы он воспринимался как естественный интерфейс. SQL тем хорош, что основывается на реляционном исчислении и реляционной алгебре: первое даёт метод решения широкого класса задач, выражаемых на языке первого порядка; второй позволяет быстро оценить, какие запросы эквивалентны. Обычно интерфейс, основанный на алгебраической системе, ощущается как более простой и обоснованный по сравнению с тем, который делает по велению левой пятки. ТК позволяет обобщить это на тот класс систем, API к которым в принципе не может выражаться простой алгебраической системой. В частности, ТК формализует рад полезных понятий:

    1. функтор («структура данных», …)

    2. естественное преобразование

    3. терминальный и инициальный объекты (обычно имеют свои названия в разных предметных областях, вроде «атомарный X» или «пустой X»)

    4. произведение и сумма

    5. изоморфизм («равный с точностью до того, что нам не интересно»)

    6. подобъект (подпространство, под-что-угодно)

    7. универсальность (свободный функтор, сопряжения и т.п.)

Если проектируешь API и сумел достичь того, что большинство структур данных — функторы; большинство функций являются естественными преобразованиями; большинство объектов, с которыми пользователь будет работать, можно собрать из произведений, сумм, терминальных и инициальных объектов; все или почти все функции «уважают» изоморфизмы; все требования состоят в коммутативности некоторых диаграмм, — если всё это есть, то, вероятно, это прекрасный API, который не подложит свинью в неожиданный момент. Пользователь будет воспринимать этот интерфейс как естественный и, в идеале, как единственно возможный и обоснованный.

Я написал «по-маркетологски», но идея тут простая: API должен быть простым и обоснованным. Алгебры — это просто и обоснованно. Категории — это (для пользователя) просто и обоснованно. Для разработчика категории сложнее, ибо теория серьёзнее, но универсальнее.

А чисто посчитать что-то категории не нужны. Подобно типизации и тестированию, ТК не нужен, чтобы собственно считать, но занимают определённое место в проектировании и сопровождении программного продукта.

Sign up to leave a comment.

Articles