[personal profile] posic
что такое конический слабый предел категорий. Как получить категорию Эйленберга-Мура в виде предела диаграммы, составленной из категории с монадой? Не могу врубиться в то, что утверждается по этому поводу в литературе. На самый первый поверхностный взгляд, вроде оно не бессмысленно, а в деталях картинка не складывается у меня. Надо, видимо, вчитаться в работу Росса Стрита 1976 года.

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

Date: 2023-12-18 04:44 pm (UTC)
chaource: (Default)
From: [personal profile] chaource
Про категорiю Эйленберга-Мура въ связи съ монадами я что-то слышалъ. Это что-то вроде initial object для категорiи adjunctions данной монады. Когда-то я интересовался этимъ, потому что была надѣжда получить такъ называемые "трансформеры монадъ" автоматически. Надѣжда не оправдалась. Оказалось, что есть тамъ и terminal object in the category of adjunctions. Иногда трансформеръ получается изъ terminal object, иногда изъ initial object, а иногда ни изъ того, ни изъ другого. И поскольку ничего путнаго придумать не удалось, я бросилъ это изучать.

То, что программисты называютъ "трансформеромъ" данной монады T - это какой-либо эндофункторъ F въ категорiи монадъ, для котораго выполняются два условiя:

1) F(Id) = T , гдѣ Id - это тождественная монада (т.е. тождественный эндофункторъ, который всегда одновременно является монадой).

2) Существуетъ естественное преобразованiе ID -> F, гдѣ ID - это тождественный эндофункторъ уже въ категорiи монадъ.

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

Можно составить нѣкiй списокъ полезныхъ для программированiя монадъ въ категорiи Set, и для каждой есть рецептъ построенiя трансформера. Есть примѣрно 6 разныхъ типовъ рецептовъ, и никакой особо внятной системы тамъ не видно.

Первая въ спискѣ монада - это эндофункторъ категорiи Set, называемый Maybe. Этотъ эндофункторъ беретъ множество и дѣлаетъ изъ него новое множество съ добавленнымъ дизъюнктивно однимъ элементомъ, который гарантированно не является элементомъ стараго множества. Обозначимъ этотъ элементъ *. Тогда функторъ дѣлаетъ такъ:

Maybe {a, b, c} = {a, b, c, *}


Я не знаю, какъ это лучше обозначить, чтобы математикамъ было ясно. Программисты пишутъ Maybe S = 1 + S
Edited Date: 2023-12-18 04:58 pm (UTC)

Date: 2023-12-19 08:45 am (UTC)
chaource: (Default)
From: [personal profile] chaource
А что такое "аддитивная монада"? Но вообще я бы посмотрѣлъ на примѣры, интересно. Даже если множество безконечно, это не обязательно плохо для программированiя, потому что, скажемъ, множество натуральныхъ чиселъ тоже безконечно, а программисты обычно допускаютъ такiя множества и во многихъ языкахъ есть типъ "цѣлое число неограниченнаго размѣра".

Date: 2024-02-06 10:38 am (UTC)
chaource: (Default)
From: [personal profile] chaource
Например, пусть R -- кольцо. Тогда монада M_R сопоставляет каждому множеству X множество всех формальных линейных комбинаций элементов X с коэффициентами из R. То есть берется прямая сумма X копий абелевой группы R, и рассматривается просто как множество -- это множество M_R(X). Единица и умножение в кольце R индуцируют структуру монады на функторе M_R.

Если я правильно понялъ, то M_R(X) это просто декартово произведенiе R × X. Монада получается изъ-за того, что R является моноидомъ съ единицей и произведенiемъ.

M_R(M_R(X)) → M_R(X) опредѣляется какъ R × R × X → R × X, гдѣ функцiя R × R → R это умноженiе въ кольцѣ.

Такая монада въ программированiи извѣстна и называется "the Writer monad". Используется вмѣсто кольца просто моноидъ.
Edited Date: 2024-02-06 10:44 am (UTC)

Date: 2024-02-06 01:08 pm (UTC)
chaource: (Default)
From: [personal profile] chaource
Ага, я ошибся. Однако тогда всё становится гораздо болѣе другое...

Тогда M_R(M_R(X)) = (X → R) → R и для программированiя это совершенно непонятно что такое. Въ программированiи нельзя построить функцiю изъ (X → R) → R въ X → R, потому что (X → R) → R коварiантно по X, a X → R контраварiантно. Но это только потому, что функцiи въ программированiи интерпретируются какъ элементы Hom-set какой-то категорiи. А здѣсь совершенно другое.

Date: 2024-02-06 01:11 pm (UTC)
chaource: (Default)
From: [personal profile] chaource
Скажемъ, M_R(M_R(X)) для этого примѣра выглядитъ такъ: это множество формальныхъ линейныхъ комбинацiй вида:

1 (0 x + 0 y) + 0 (0 x + 1 y) + 2(0 x + 2 y) + ...

Потомъ мы раскрываемъ скобки и получаемъ опять элементъ множества M_R(X).

Я не вижу, какъ это выглядѣло бы въ примѣненiи къ программированiю. Тамъ всё по-другому работаетъ.

Я раньше думалъ, что программированiе используетъ категорiю множествъ и тамъ пишетъ эндофункторы. Однако, категорiя множествъ, видимо, гораздо богаче, чѣмъ то, что необходимо для программированiя. Потому что напримѣръ въ категорiи множествъ есть два вида функтора Powerset, одинъ коварiантный, другой контраварiантный, а въ программированiи есть только контраварiантный аналогъ.
Edited Date: 2024-02-06 01:14 pm (UTC)

Date: 2024-02-06 01:32 pm (UTC)
chaource: (Default)
From: [personal profile] chaource
Это очень сложная структура по мѣркамъ программированiя. Моноидомъ не обойдешься, нужно кольцо (а такого обычно нѣтъ для стандартныхъ структуръ данныхъ).

Чтобы вычислить раскрытiе скобокъ, нужно перечислить всѣ комбинацiи. Въ терминахъ программированiя это выглядитъ такъ. Дается элементъ mmx ∈ M_R(M_R(X)) = (X → R) → R и мы должны вычислить соотвѣтствующiй ему элементъ mx ∈ M_R(X) = X → R. Чтобы вычислить функцiю типа X → R, мы должны по любому данному элементу x ∈ X вычислить соотвѣтствующее значенiе r ∈ R. Чтобы это сдѣлать, мы должны сначала перечислить всѣ возможныя функцiи f ∈ X → R. Каждую такую функцiю f надо подставить въ mmx и получить соотвѣтствующее значенiе mmx(f) ∈ R, это значенiе помножить на f(x) и всѣ результаты просуммировать. Получится mx(x).

mx(x) = \sum _ {f ∈ X → R} mmx(f) * f(x)

Теперь видно, что результатъ контраварiантенъ по x.

Но ни въ одномъ языкѣ программированiя нѣтъ такой конструкцiи - итерацiя по всѣмъ функцiямъ типа A → B. Не говоря уже объ итерацiи только по такимъ функцiямъ, которыя принимаютъ ненулевое значенiе лишь въ конечномъ числѣ точекъ.

Date: 2024-02-06 01:35 pm (UTC)
chaource: (Default)
From: [personal profile] chaource
https://math.stackexchange.com/questions/1487902/covariant-power-set-functor

А тутъ есть обсужденiе, гдѣ не требуется отмѣченная точка и абелева группа. Это какой-то другой powerset функторъ?

Date: 2024-02-06 02:41 pm (UTC)
chaource: (Default)
From: [personal profile] chaource
Въ общемъ, имѣя элементъ px ∈ X → 2 и функцiю f: X → Z, мы строимъ элементъ pz ∈ Z → 2. Для даннаго z ∈ Z мы вычисляемъ:

pz(z) = LogicalOr_{x ∈ X} (px(x) LogicalAnd f(x) == z).

Для вычисленiя этого нужна итерацiя по всѣмъ элементамъ множества X, для которыхъ px(x) = true.

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

А вотъ списокъ всѣхъ такихъ функцiй уже далеко не просто составлять.

Profile

Leonid Positselski

January 2026

S M T W T F S
     12 3
4 567 8910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 9th, 2026 05:48 pm
Powered by Dreamwidth Studios