psilogic: (Default)
psilogic ([personal profile] psilogic) wrote2010-11-12 04:41 pm

Про теорию категорий в стиле фэнтези

Тут пошла такая пьянка: [livejournal.com profile] a_shen помянул теорию категорий, [livejournal.com profile] avva помянул теорию категорий... причем, помянули в таком смысле, что это нечто жутко абстрактное, непонятно, как объяснить простым смертным.

Захотелось мне посмотреть, что за страшная такая теория категорий. То есть, попробовать объяснить хотя бы самому себе. :)

Начинать я люблю с определений: раз и два.

Ну что тут скажешь: видим образчики того, как составить определение так, "чтобы никто не догадался". Как нарочно, чтобы было непонятно. Значков много, разложены значки кривовато. Например, определение в вики содержит такое:

"задано множество морфизмов (или стрелок) HomC(A,B)..."

- ну и к чему относится "Hom" - к понятию "морфизм" или к понятию "множество морфизмов"? Я сначала подумал первое, потом стал читать дальше, оказалось - второе. Вот и получается: вроде как математика, формулы, а все-равно - двусмысленности.

Дальше пошли примеры, и, когда сопоставил примеры с определениями, стало более-менее ясно. Не так страшен черт, как его малюют. И объяснить, вроде бы, не так уж и сложно - по крайней мере себе. Можно даже в стиле фэнтези.



Объект

Во-первых, представьте себе некий "объект". Тут есть первая психологическая ловушка - для примера может прийти в голову что-то простое типа "число 5" или "точка A". Так вот, не берите простое, берите сразу сложное - и тогда (как ни парадоксально) понять будет проще.

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

Вот что такое объект. А в категории таких объектов много. То есть, клан магов-полиморфов например. Замечу: это вовсе НЕ аналогия и не художественная метафора, это - вполне корректный пример, частный случай, поскольку теория категорий почти не ограничивает, что именно считать объектами.

Морфизм = превращение

Во-вторых, понятие "морфизм" или "стрелка". Маг-полиморф говорит: "лупус-задрупус-мордус-впередус-жопус-в-хвостус" и превращается, скажем, в волка. Вот морфизм - это и есть превращение. Опять же, для понятности лучше представлять себе превращение сложного объекта в другой сложный объект. Дальше я буду часто говорить "превращение" - мне кажется, это "качественный" и интуитивно понятный перевод термина "морфизм" на русский язык.

Кстати, еще одна психологическая ловушка, мешающая пониманию: слово морфизм - существительное. Но существительные по-умолчанию ассоциируются с предметами. А морфизм удобнее представлять себе как действие с началом и завершением.

Композиция = последовательное превращение

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

Последний пример называется "композиция". Композиция - это два превращения, идущих друг за другом: маг -> облако протоплазмы -> волк.

Еще одно извращение, мешающее пониманию: вместо того, чтобы писать превращения в порядке применения, их пишут наоборот:

("конденсус-канис" o "хомо-дисперсус")

- значок "o" - обозначает операцию композиции. Почему пишут наоборот - не знаю, может, изобретатель теории категорий был евреем, и ему так привычнее :)

Тождественный морфизм = превращение в себя

А теперь представим себе студента школы магии. Перепутал он "у" и "о" в астральных формулах. Начал балаболить: "лОпус-задрОпОс..." - и дело не пошло. Хвост начал отрастать, но отвалился и испарился. И вроде бы все на месте - лишних деталей не осталось. То есть, была некая попытка превращения, но объект вернулся в прежнее состояние. Вот вам тождественный морфизм.

Категория

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

Что за условия? Да ничего особенного - пара аксиом: ассоциативность и закон тождества.

- Ассоциативность. Пусть маг-полиморф может принимать 4 формы: человек, волк, собака, кот. И пусть есть 4 заклинания:
1. человек->волк
2. волк->собака->кот
3. человек->волк->собака
4. собака->кот
Так вот, закон ассоциативности утверждает, что в кота можно превратиться обоими возможными путями:
(заклинание 1) человек->волк, (заклинание 2) волк->собака->кот
все равно, что:
(заклинание 3) человек->волк->собака, (заклинание 4) собака->кот

- Закон тождества. Пусть есть заклинание превращения в самого себя (как "лОпус-задрОпОс"). Тогда неважно, когда его применять - до другого превращения или после:
человек->волк
все равно, что:
человек->человек, человек->волк
или:
волк->человек
все равно, что:
волк->человек, человек->человек

Всякие-разные морфизмы

Еще один студент с факультета полиморфизма обнаружил в Книге Заклинаний формулу превращения в дракона. Пробормотал: "драгонаутус-фойер-гросс-райзер!" - и превратился в огромное жЫвотное. Попробовал изрыгнуть пламя - вах! Получается! "Ладно", - подумал он, - "а теперь обратно". Обернулся к подставке, на которой лежала книга, а там - только пепел. Упс! Кажется, перестарался огнеметчик.

Вот когда для заданного превращения все-таки есть возможность превратиться обратно - тогда это превращение называется "изоморфизм".

Студент стал искать выход из своего затруднительного положения. Оказалось, что подходящего заклинания - чтобы превратиться из дракона прямиком в человека - никак не обнаруживается. Но нашлось нечто другое: куча заклинаний превращения из дракона в разных животных. Студент решил посмотреть, нельзя ли скомбинировать все эти заклинания так, чтобы найти путь к человеческому облику. Обнаружилось, что есть заклинание лемур->человек и длинная, сложная цепочка заклинаний, ведущих от дракона к лемуру. Причем, единственная цепочка.

Вот такая ситуёвина, когда для первой части превращения есть только один подходящий метод, называется "мономорфизмом".

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

"Биморфизм" – когда и для первой, и для второй части есть по одному подходящему варианту.

"Эндоморфизм" – когда одно превращение или серия превращений возвращает к исходной точке, например человек->волк->человек.

"Автоморфизм" – изоморфизм И эндоморфизм.

Тонкость, которую я НЕ понял: чем отличаются тождественный морфизм, эндоморфизм и автоморфизм? На первый взгляд – это одно и то же, в смысле определения эквивалентны. Может ли быть эндоморфизм, который НЕ является единичным? Может ли быть эндоморфизм, который НЕ является изоморфизмом?

[identity profile] psilogic.livejournal.com 2010-11-12 03:39 pm (UTC)(link)
[ А где там упоминается маг-полиморф? ]

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

[ Так вот, в категории множеств с отображениями в качестве переходов тождественным отображением называется отображение, отображающее каждый элемент множества в себя ]

Спасибо, кажется, до меня дошло - там операции равенства морфизмов выходят на сравнения на уровне элементов множеств. Надо обдумать :)

[identity profile] psilogic.livejournal.com 2010-11-12 03:40 pm (UTC)(link)
может, тег какой-нибудь закрыть забыл

морфизмы с приставками

[identity profile] falcao.livejournal.com 2010-11-12 03:40 pm (UTC)(link)
Толкование слова "морфизм" как "превращение" мне кажется вполне адекватным. Но У Вас тут есть много смысловых неточностей.

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

Я предпочитаю записывать композицию морфизмов в порядке их применения. В такой нотации, если f был морфизмом A в B, то должен существовать такой морфизм g из B в A, для которого не только f o g = idA, но и g o f = idB. Только в этом случае про f можно говорить, что это изоморфизм.

> чем отличаются тождественный морфизм, эндоморфизм и автоморфизм?

Рассмотрим категорию, объектами которой являются конечные множества, а морфизмами -- отображения этих множеств друг в друга. Тождественным морфизмом объекта A={1,2,3} в себя будет такой морфизм I, при котором I(1)=1, I(2)=2, I(3)=3. Это будет и автоморфизм, и эндоморфизм. Но обратное неверно.

А именно, если определить отображение f из A в A при помощи равенств f(1)=2, f(2)=3, f(3)=1, то это будет изоморфизм объекта A в себя, то есть автоморфизм. Он же будет и эндоморфизмом. А вот если взять что-то вроде h из A в A такого, что h(1)=1, h(2)=1, h(3)=2, то это уже не будет автоморфизм, но эндоморфизмом он является.

На мой взгляд, знакомство с терминологией теории категорий практически не даёт ничего полезного. Приходится заучивать много новых слов, мотивировка которых не всегда понятна. Употреблять же эти слова даже многим специалистам приходится редко. Скажем, я в своих статьях НИКОГДА не употребляю категорного языка.

[identity profile] psilogic.livejournal.com 2010-11-12 03:41 pm (UTC)(link)
У нас было пару семестров, и, похоже, это по смыслу как бы "связующая часть". Всякие группы, кольца, поля - от них до категорий рукой подать.

Re: морфизмы с приставками

[identity profile] psilogic.livejournal.com 2010-11-12 03:43 pm (UTC)(link)
Сэр Тигр, Вас я оставлю "на сладкое", вечерком обдумаю :) akuklev мне уже частично мозги вправил, будет материал "на закрепление".

Re: морфизмы с приставками

[identity profile] psilogic.livejournal.com 2010-11-12 04:29 pm (UTC)(link)
[ А вот если взять что-то вроде h из A в A такого, что h(1)=1, h(2)=1, h(3)=2, то это уже не будет автоморфизм, но эндоморфизмом он является. ]

Тогда там неправильное опЕрделение?

"Морфизмы объекта A в себя называются эндоморфизмами"

- в Вашем примере получается h из A={1,2,3} в A'={1,2}

Что касается употребления: в программировании используют понятные термины: "отношение один к одному", "один ко многим" и т.п. imho тут удобно, т.к. запоминать ничего не надо

[identity profile] thedeemon.livejournal.com 2010-11-12 04:56 pm (UTC)(link)
+1 к Розетте.
Там и про категории в программировании есть немножко (категория с объектами-типами данных и морфизмами-функциями).

соответствия

[identity profile] falcao.livejournal.com 2010-11-12 05:00 pm (UTC)(link)
А что Вам кажется не соответствующим определению? Там вообще-то всё правильно.

> в Вашем примере получается h из A={1,2,3} в A'={1,2}

Нет, это не так. Я рассматриваю отображение из A в A, в соответствии с понятием отображения. На это я имею право несмотря на то, что значение 3 оно не принимает. Напомню, что отображением f из A в B называется правило, которое каждому элементу из A сопоставляет некоторый элемент из B. При этом нигде не говорится, что все элементы из B должны быть "поюзаны". Это дополнительное требование, которое может быть наложено, но тогда получается понятие "сюръективного" отображения, которое также называют отображением A на B.

Вы правы только в том, что отображение из {1,2,3} в {1,2} тоже можно рассмотреть, но это будет уже другой морфизм, и он эндоморфизмом не будет.

Если нужен более "чистый" пример, то можно рассмотреть его на примере бесконечных множеств. Скажем, взять морфизм из N в N, заданный по правилам h(1)=h(2)=1, h(3)=2, h(4)=3 и так далее. Это будет эндоморфизм, но он не является автоморфизмом.

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

Кстати, вся терминология касательно соответствий, отношений и операций -- это намного полезнее теоретико-категорных понятий.

[identity profile] thedeemon.livejournal.com 2010-11-12 05:03 pm (UTC)(link)
Реквестирую иллюстрацию natural transformation и монады!

В помощь: http://www.pureanimegallery.com/v/ergoproxy/misc/monad2-proxy.jpg.html :)

[identity profile] dimmel.livejournal.com 2010-11-12 05:19 pm (UTC)(link)
Пока удерживается. У меня девицы воспитанные. Ну, в основном... 8-)))

Мебель Вам привезли?.. ;-)

[identity profile] alisarin.livejournal.com 2010-11-12 05:51 pm (UTC)(link)
"Категории обыденного сознания" - http://nounivers.narod.ru/ofir/coc.htm ...

Re: соответствия

[identity profile] psilogic.livejournal.com 2010-11-12 05:51 pm (UTC)(link)
[ А что Вам кажется не соответствующим определению? ]

То, что в определении говорится A про "морфизм в себя", и Вы это трактуете как "в подмножество себя". Но там нигде не прописано, что A есть множество, а значит нет никаких оснований подразумевать подмножество, а под морфизмом - отображение множества на множество, это может быть только частным случаем. Следовательно, "в себя" может значить разве что эквивалентность объектов (A=A). Я непраф?

[ можно рассмотреть его на примере бесконечных множеств ]

Ага, вот это я понимаю.

[ говорить следует о соответствиях, а не об отношениях ]

Тут, к сожалению, чисто терминологическая нестыковка: в программировании "отношение" - это слово, специально "зарезервированное" под это дело:
вот это

Re: Мебель Вам привезли?.. ;-)

[identity profile] psilogic.livejournal.com 2010-11-12 05:53 pm (UTC)(link)
это не те категории. по ссылке категория = класс или категория = множество

[identity profile] psilogic.livejournal.com 2010-11-12 06:01 pm (UTC)(link)
там слишком глубокая рекурсия понятий - "раскручивать", бегая по ссылкам, долго и муторно :) разве что потом, если удосужусь литературу проштудировать

Re: Мебель Вам привезли?.. ;-)

[identity profile] alisarin.livejournal.com 2010-11-12 06:08 pm (UTC)(link)
:(

Нет более дурацких понятий, чем математические. Например, "объект" в программировании (вообще - http://nounivers.narod.ru/ofir/fraud.htm). Тогда данное рассуждение подразумевает "структуры" или "упорядоченности" состава - типа "колонной" или "шеренгой". Я не прав?

Re: Мебель Вам привезли?.. ;-)

[identity profile] psilogic.livejournal.com 2010-11-12 06:15 pm (UTC)(link)
"Объект" в программировании - это местоимение, имеющее смысл "нечто или некто", то есть имеет совершенно произвольный смысл. В математике, в теории категорий, похоже такой же смысл. В философии - противопоставление "субъекту". В естествознании - то, что изучается (объект исследования). Какой из этих вариантов более дурацкий? :)

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

Re: Мебель Вам привезли?.. ;-)

[identity profile] alisarin.livejournal.com 2010-11-12 06:26 pm (UTC)(link)
В философии (конечно, смотря в какой) - "объект" это консолидированный комплекс, который в смысле такого комплекса обладает свойством некоторой упорядоченной переместительности: "а по небу плывут облака". Вполне рациональное по сути понимание...

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

типа "как вы яхту назовете, так она и поплывет" ;-)

Re: Мебель Вам привезли?.. ;-)

[identity profile] psilogic.livejournal.com 2010-11-12 06:31 pm (UTC)(link)
В программировании это даже не роль, это все, что угодно. Ну и роль тоже. Может быть объект "солдат" с параметром "роль", в том числе изменяемым, может быть объект "роль", может быть объект "караульный" или "дневальный", имеющий функцию "роль". т.е. вообще никаких ограничений, что угодно, никаких обязательных свойств нет.

Re: Мебель Вам привезли?.. ;-)

[identity profile] alisarin.livejournal.com 2010-11-12 06:40 pm (UTC)(link)
В философском смысле ответ "нет вообще никаких ограничений" неверен. Поскольку "объект" в программировании открывается и закрывается, для него выделяется область в памяти, и эта же память от него освобождается.

Тогда мы будем думать: объект "солдат" здесь вполне очевидно возможен. А вот как возможен здесь объект "роль" мне трудно представить, поскольку "роль" я могу понимать не как порцию кода, а как некоторую заданную порции кода структуру. Кстати говоря, не разделение отношенческого и своего рода "объемного" формата - это "грех" математики, хотя чтобы такое разделение соблюдать, нужно быть особо скрупулезным в системе понятий...

[identity profile] thedeemon.livejournal.com 2010-11-12 06:54 pm (UTC)(link)
А ведь все самое интересное там только и начинается.
Когда куча магов с их превращениями сами становятся мета-магом, превращения которого (функтор) становятся мета-мета-магом, превращения которого должны подчиняться определенным свойствам. :)

[identity profile] thedeemon.livejournal.com 2010-11-12 06:55 pm (UTC)(link)
Тут вся наглядность твоего примера и пропадает, а мы только подбираемся к монадам.
ext_615659: (Default)

[identity profile] akuklev.livejournal.com 2010-11-12 07:03 pm (UTC)(link)
А вот это очень зря. Вам там правильно сказали. Сок начинается на понятиях функтора и естественного преобразования.

[identity profile] psilogic.livejournal.com 2010-11-12 07:04 pm (UTC)(link)
в любом случае надо сначала почитать те ссылки, что вы давали, а потом уже - "сок" :)

[identity profile] psilogic.livejournal.com 2010-11-12 07:05 pm (UTC)(link)
[ Поскольку "объект" в программировании открывается и закрывается, для него выделяется область в памяти, и эта же память от него освобождается. ]

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

[ А вот как возможен здесь объект "роль" мне трудно представить, поскольку "роль" я могу понимать не как порцию кода, а как некоторую заданную порции кода структуру. ]

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

ext_615659: (Default)

[identity profile] akuklev.livejournal.com 2010-11-12 07:11 pm (UTC)(link)
Просто функтор — это, если очень грубо, будто гомоморфизм категорий. Что наводит на мысль, что может быть можно рассматривать “категорию категорий”. Но тут выясняется, что так не работает, потому что в определении категории фундаментально важную роль играет то, что Hom(A, B) это множество и его объекты можно сличать. Выясняется, что можно придумать новый объект, называемый 2-категорией, где требование, что Hom(A, B) является множеством заменяют на требование, чтобы Hom(A, B) было категорией и соответственно подкручивают другие аксиомы. Так вот общность всех категорий формирует 2-категорию, где объекты это категории, переходы это функторы, а переходы между функторами — естественные преобразования.

Page 2 of 4