juan_gandhi: (Default)
My slides for Scala BTB: https://tinyurl.com/adtincat 

[personal profile] chaource [personal profile] sassa_nf xacid getting a special invitation

What do you think?
juan_gandhi: (Default)
Думаю, с чего начать, с комонады или с сопряженных... давайте-ка сначала пример с комонадой.

Итак, в предыдущей серии мы брали категории C=Set и D=Set×Set - множества и пары множеств, и два функтора, Δ(X) = (X,X) и Π((X,Y)) = X×Y.

Первый функтор - диагональ, он множеству сопоставляет пару, состоящую из двух экземпляров оного, а второй паре множеств сопоставляет декартово произведение; и эти функторы были сопряжены, Δ ⊣Π.

У функтора Δ на самом деле есть не только правый сопряженный, Δ ⊣Π, но и левый, Σ ⊣Δ. Что это за функтор такой? Давайте не надеятся на чудо, а просто его построим. Нам нужно, чтобы по (f1,f2): (Y1,Y2) &: ; (X,X) мы могли взаимно-ознозначно получать &alphal(f1,f2): Σ(Y1,Y2) → X.

Напомню, что стрелка (f1,f2) в Set×Set - это просто пара обычных стрелок (функций) в Set.

Заданы две функции, f1: Y1 → X и f1: Y1 → X. Что это нам даёт? Это нам даёт, взаимно-однозначно, функцию из непересекающегося объединения: Y1 ∐ Y2 → X.

Так что наш функтор Σ - это просто объединение двух компонент. Ну а так как он левый сопряженный к Δ, то композиция ΔΣ, которая для множества X возвращает X ∐X, является комонадой.

Думаю, понятно как определить ε: X.т∐X → X; а δ: X ∐ X → X ∐ X ∐ X ∐ X, как и во вчерашнем примере, складывает первую компоненту слева в первую компоненту справа, а последнюю - в последнюю.

Ну а теперь к монадам и сопряженным функторам.

Вот давайте вообще начнём с монады T: C → C, со всеми её монадическими законами (единица, умножение, ассоциативность умножения и единичность единицы).

Определим алгебру над монадой: это объект A и стрелка a: T(A) → A, обладающая правильными свойствами. А именно:
         


Я тут для простоты выбросил много скобок... ну что вы хотите, я же скальшик а не лиспщик.

Категория алгебр над монадой T в категории C обозначается CT.

Из алгебр, понятное дело, есть забывающий функтор UT. в категорию C - просто забудем, что есть какое-то действие. К этому забывающему функтору UT имеется левый сопряженный функтор FTC → CT, строящий по объекту X свободную алгебру, которая на самом деле выглядит так: μX: TTX → TX.

Откуда сопряженность, FT ⊣ FT? Если есть алгебра b: TB →B, и f: A → B, то имеет место коммутативная диаграмма


- которая всё и объясняет.

Итак, взяв любую сопряженную пару, можно построить монаду, а по монаде - сопряженную пару (свободный, забывающий). Очевидно, что монада, соответствующая этой паре, и есть исходная монада; но одной монаде могут соответствовать много разных сопряженных пар (их целая категория); пара (свободный, забывающий) - предельный случай. Вот другой предельны случай - категория Клейсли.

Возьмём монаду T: C → C и построим на её основе новую категорию, CT, состоящую из тех же объектов, что и исходная категория, но с добавлением стрелок. А именно, всякая стрелка f: :X → TY в C будет стрелкой f: :X → Y в CT. (Это, к примеру, если у нас монада Option, то теперь стрелками будут все частичные функции.) Композиция f;g определяется через ; все стрелки исходной категории превращаются в .

Так что имеется вложение ITC → CT; и к нему я хочу построить левый сопряженный, чтобы было KT ⊣ IT.

Эту сопряженность можно выразить как
f: ITX → Y  <====>  ?: X → KTY

но, по определению CT, это всё равно что задать
f: X → TY  <====>  ?: X → KTY


Определим KTY = TY - и на этом всё.

Для монады Option в множествах категорией Клейсли будет категория множеств и частичных функций, а категорией алгебр - категория множеств с выделенной точкой.

Для монады X2 в множествах категорией Клейсли будет категория множеств и пар функций, а категорией алгебр - категория множеств с заданной бинарной операцией.

Сказать мне вроде на эту тему больше нечего, если не подскажут, чего ещё добавить. Какие-нибудь специфические монады с комонадами?
juan_gandhi: (Default)
Until I was told to take a look at coalgebras, and figured out that input deals with codata, and output deals with data, and that StringReader consists of mapping an algebra to a coalgebra, over the same affine functor, X -> AX + 1, I could not figure out how to properly connect my binary files with parser combinators... and the whole functioning of parser combinators in general.

The main point is that parser combinators work not on data, but on codata. So there.

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

June 2025

S M T W T F S
1 2345 6 7
8 9 10 11 121314
15161718 1920 21
22232425262728
2930     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 27th, 2025 01:36 pm
Powered by Dreamwidth Studios