Про теорию категорий в стиле фэнтези
Тут пошла такая пьянка:
a_shen помянул теорию категорий,
avva помянул теорию категорий... причем, помянули в таком смысле, что это нечто жутко абстрактное, непонятно, как объяснить простым смертным.
Захотелось мне посмотреть, что за страшная такая теория категорий. То есть, попробовать объяснить хотя бы самому себе. :)
Начинать я люблю с определений: раз и два.
Ну что тут скажешь: видим образчики того, как составить определение так, "чтобы никто не догадался". Как нарочно, чтобы было непонятно. Значков много, разложены значки кривовато. Например, определение в вики содержит такое:
"задано множество морфизмов (или стрелок) HomC(A,B)..."
- ну и к чему относится "Hom" - к понятию "морфизм" или к понятию "множество морфизмов"? Я сначала подумал первое, потом стал читать дальше, оказалось - второе. Вот и получается: вроде как математика, формулы, а все-равно - двусмысленности.
Дальше пошли примеры, и, когда сопоставил примеры с определениями, стало более-менее ясно. Не так страшен черт, как его малюют. И объяснить, вроде бы, не так уж и сложно - по крайней мере себе. Можно даже в стиле фэнтези.
Объект
Во-первых, представьте себе некий "объект". Тут есть первая психологическая ловушка - для примера может прийти в голову что-то простое типа "число 5" или "точка A". Так вот, не берите простое, берите сразу сложное - и тогда (как ни парадоксально) понять будет проще.
В качестве объекта возьмем... робота-трансформера или... мага-полиморфа. Маг-полиморф - это который умеет превращаться в разных животных. Все-таки предпочту второе - когда-то для одной игрушки программировал магов-полиморфов, ностальгия, знаете ли. :)
Вот что такое объект. А в категории таких объектов много. То есть, клан магов-полиморфов например. Замечу: это вовсе НЕ аналогия и не художественная метафора, это - вполне корректный пример, частный случай, поскольку теория категорий почти не ограничивает, что именно считать объектами.
Морфизм = превращение
Во-вторых, понятие "морфизм" или "стрелка". Маг-полиморф говорит: "лупус-задрупус-мордус-впередус-жопус-в-хвостус" и превращается, скажем, в волка. Вот морфизм - это и есть превращение. Опять же, для понятности лучше представлять себе превращение сложного объекта в другой сложный объект. Дальше я буду часто говорить "превращение" - мне кажется, это "качественный" и интуитивно понятный перевод термина "морфизм" на русский язык.
Кстати, еще одна психологическая ловушка, мешающая пониманию: слово морфизм - существительное. Но существительные по-умолчанию ассоциируются с предметами. А морфизм удобнее представлять себе как действие с началом и завершением.
Композиция = последовательное превращение
Есть один тонкий момент: может быть много заклинаний превращения мага в волка. Например, заклинание "лупус-задрупус..." заставляет хвост постепенно вырастать из задницы, а заклинание "хомо-дисперсус-конденсус-канис" запускает сложный процесс: сначала превращает мага в облако протоплазмы (первая часть - "хомо-дисперсус"), а потом из облака формируется матерый волчара (вторая часть - "конденсус-канис").
Последний пример называется "композиция". Композиция - это два превращения, идущих друг за другом: маг -> облако протоплазмы -> волк.
Еще одно извращение, мешающее пониманию: вместо того, чтобы писать превращения в порядке применения, их пишут наоборот:
("конденсус-канис" o "хомо-дисперсус")
- значок "o" - обозначает операцию композиции. Почему пишут наоборот - не знаю, может, изобретатель теории категорий был евреем, и ему так привычнее :)
Тождественный морфизм = превращение в себя
А теперь представим себе студента школы магии. Перепутал он "у" и "о" в астральных формулах. Начал балаболить: "лОпус-задрОпОс..." - и дело не пошло. Хвост начал отрастать, но отвалился и испарился. И вроде бы все на месте - лишних деталей не осталось. То есть, была некая попытка превращения, но объект вернулся в прежнее состояние. Вот вам тождественный морфизм.
Категория
Категория - это когда есть совокупность объектов (пример: клан магов-полиморфов), совокупность морфизмов (пример: заклинания превращения, которые используют те маги) и выполняется еще парочка условий.
Что за условия? Да ничего особенного - пара аксиом: ассоциативность и закон тождества.
- Ассоциативность. Пусть маг-полиморф может принимать 4 формы: человек, волк, собака, кот. И пусть есть 4 заклинания:
1. человек->волк
2. волк->собака->кот
3. человек->волк->собака
4. собака->кот
Так вот, закон ассоциативности утверждает, что в кота можно превратиться обоими возможными путями:
(заклинание 1) человек->волк, (заклинание 2) волк->собака->кот
все равно, что:
(заклинание 3) человек->волк->собака, (заклинание 4) собака->кот
- Закон тождества. Пусть есть заклинание превращения в самого себя (как "лОпус-задрОпОс"). Тогда неважно, когда его применять - до другого превращения или после:
человек->волк
все равно, что:
человек->человек, человек->волк
или:
волк->человек
все равно, что:
волк->человек, человек->человек
Всякие-разные морфизмы
Еще один студент с факультета полиморфизма обнаружил в Книге Заклинаний формулу превращения в дракона. Пробормотал: "драгонаутус-фойер-гросс-райзер!" - и превратился в огромное жЫвотное. Попробовал изрыгнуть пламя - вах! Получается! "Ладно", - подумал он, - "а теперь обратно". Обернулся к подставке, на которой лежала книга, а там - только пепел. Упс! Кажется, перестарался огнеметчик.
Вот когда для заданного превращения все-таки есть возможность превратиться обратно - тогда это превращение называется "изоморфизм".
Студент стал искать выход из своего затруднительного положения. Оказалось, что подходящего заклинания - чтобы превратиться из дракона прямиком в человека - никак не обнаруживается. Но нашлось нечто другое: куча заклинаний превращения из дракона в разных животных. Студент решил посмотреть, нельзя ли скомбинировать все эти заклинания так, чтобы найти путь к человеческому облику. Обнаружилось, что есть заклинание лемур->человек и длинная, сложная цепочка заклинаний, ведущих от дракона к лемуру. Причем, единственная цепочка.
Вот такая ситуёвина, когда для первой части превращения есть только один подходящий метод, называется "мономорфизмом".
А "эпиморфизм" – это когда есть только один подходящий вариант для заданной второй части. Скажем, обнаружилось, что из дракона можно превратиться в виверну, тогда студент стал искать путь превращения из виверны в человека, и нашел только один вариант.
"Биморфизм" – когда и для первой, и для второй части есть по одному подходящему варианту.
"Эндоморфизм" – когда одно превращение или серия превращений возвращает к исходной точке, например человек->волк->человек.
"Автоморфизм" – изоморфизм И эндоморфизм.
Тонкость, которую я НЕ понял: чем отличаются тождественный морфизм, эндоморфизм и автоморфизм? На первый взгляд – это одно и то же, в смысле определения эквивалентны. Может ли быть эндоморфизм, который НЕ является единичным? Может ли быть эндоморфизм, который НЕ является изоморфизмом?
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Захотелось мне посмотреть, что за страшная такая теория категорий. То есть, попробовать объяснить хотя бы самому себе. :)
Начинать я люблю с определений: раз и два.
Ну что тут скажешь: видим образчики того, как составить определение так, "чтобы никто не догадался". Как нарочно, чтобы было непонятно. Значков много, разложены значки кривовато. Например, определение в вики содержит такое:
"задано множество морфизмов (или стрелок) HomC(A,B)..."
- ну и к чему относится "Hom" - к понятию "морфизм" или к понятию "множество морфизмов"? Я сначала подумал первое, потом стал читать дальше, оказалось - второе. Вот и получается: вроде как математика, формулы, а все-равно - двусмысленности.
Дальше пошли примеры, и, когда сопоставил примеры с определениями, стало более-менее ясно. Не так страшен черт, как его малюют. И объяснить, вроде бы, не так уж и сложно - по крайней мере себе. Можно даже в стиле фэнтези.
Объект
Во-первых, представьте себе некий "объект". Тут есть первая психологическая ловушка - для примера может прийти в голову что-то простое типа "число 5" или "точка A". Так вот, не берите простое, берите сразу сложное - и тогда (как ни парадоксально) понять будет проще.
В качестве объекта возьмем... робота-трансформера или... мага-полиморфа. Маг-полиморф - это который умеет превращаться в разных животных. Все-таки предпочту второе - когда-то для одной игрушки программировал магов-полиморфов, ностальгия, знаете ли. :)
Вот что такое объект. А в категории таких объектов много. То есть, клан магов-полиморфов например. Замечу: это вовсе НЕ аналогия и не художественная метафора, это - вполне корректный пример, частный случай, поскольку теория категорий почти не ограничивает, что именно считать объектами.
Морфизм = превращение
Во-вторых, понятие "морфизм" или "стрелка". Маг-полиморф говорит: "лупус-задрупус-мордус-впередус-жопус-в-хвостус" и превращается, скажем, в волка. Вот морфизм - это и есть превращение. Опять же, для понятности лучше представлять себе превращение сложного объекта в другой сложный объект. Дальше я буду часто говорить "превращение" - мне кажется, это "качественный" и интуитивно понятный перевод термина "морфизм" на русский язык.
Кстати, еще одна психологическая ловушка, мешающая пониманию: слово морфизм - существительное. Но существительные по-умолчанию ассоциируются с предметами. А морфизм удобнее представлять себе как действие с началом и завершением.
Композиция = последовательное превращение
Есть один тонкий момент: может быть много заклинаний превращения мага в волка. Например, заклинание "лупус-задрупус..." заставляет хвост постепенно вырастать из задницы, а заклинание "хомо-дисперсус-конденсус-канис" запускает сложный процесс: сначала превращает мага в облако протоплазмы (первая часть - "хомо-дисперсус"), а потом из облака формируется матерый волчара (вторая часть - "конденсус-канис").
Последний пример называется "композиция". Композиция - это два превращения, идущих друг за другом: маг -> облако протоплазмы -> волк.
Еще одно извращение, мешающее пониманию: вместо того, чтобы писать превращения в порядке применения, их пишут наоборот:
("конденсус-канис" o "хомо-дисперсус")
- значок "o" - обозначает операцию композиции. Почему пишут наоборот - не знаю, может, изобретатель теории категорий был евреем, и ему так привычнее :)
Тождественный морфизм = превращение в себя
А теперь представим себе студента школы магии. Перепутал он "у" и "о" в астральных формулах. Начал балаболить: "лОпус-задрОпОс..." - и дело не пошло. Хвост начал отрастать, но отвалился и испарился. И вроде бы все на месте - лишних деталей не осталось. То есть, была некая попытка превращения, но объект вернулся в прежнее состояние. Вот вам тождественный морфизм.
Категория
Категория - это когда есть совокупность объектов (пример: клан магов-полиморфов), совокупность морфизмов (пример: заклинания превращения, которые используют те маги) и выполняется еще парочка условий.
Что за условия? Да ничего особенного - пара аксиом: ассоциативность и закон тождества.
- Ассоциативность. Пусть маг-полиморф может принимать 4 формы: человек, волк, собака, кот. И пусть есть 4 заклинания:
1. человек->волк
2. волк->собака->кот
3. человек->волк->собака
4. собака->кот
Так вот, закон ассоциативности утверждает, что в кота можно превратиться обоими возможными путями:
(заклинание 1) человек->волк, (заклинание 2) волк->собака->кот
все равно, что:
(заклинание 3) человек->волк->собака, (заклинание 4) собака->кот
- Закон тождества. Пусть есть заклинание превращения в самого себя (как "лОпус-задрОпОс"). Тогда неважно, когда его применять - до другого превращения или после:
человек->волк
все равно, что:
человек->человек, человек->волк
или:
волк->человек
все равно, что:
волк->человек, человек->человек
Всякие-разные морфизмы
Еще один студент с факультета полиморфизма обнаружил в Книге Заклинаний формулу превращения в дракона. Пробормотал: "драгонаутус-фойер-гросс-райзер!" - и превратился в огромное жЫвотное. Попробовал изрыгнуть пламя - вах! Получается! "Ладно", - подумал он, - "а теперь обратно". Обернулся к подставке, на которой лежала книга, а там - только пепел. Упс! Кажется, перестарался огнеметчик.
Вот когда для заданного превращения все-таки есть возможность превратиться обратно - тогда это превращение называется "изоморфизм".
Студент стал искать выход из своего затруднительного положения. Оказалось, что подходящего заклинания - чтобы превратиться из дракона прямиком в человека - никак не обнаруживается. Но нашлось нечто другое: куча заклинаний превращения из дракона в разных животных. Студент решил посмотреть, нельзя ли скомбинировать все эти заклинания так, чтобы найти путь к человеческому облику. Обнаружилось, что есть заклинание лемур->человек и длинная, сложная цепочка заклинаний, ведущих от дракона к лемуру. Причем, единственная цепочка.
Вот такая ситуёвина, когда для первой части превращения есть только один подходящий метод, называется "мономорфизмом".
А "эпиморфизм" – это когда есть только один подходящий вариант для заданной второй части. Скажем, обнаружилось, что из дракона можно превратиться в виверну, тогда студент стал искать путь превращения из виверны в человека, и нашел только один вариант.
"Биморфизм" – когда и для первой, и для второй части есть по одному подходящему варианту.
"Эндоморфизм" – когда одно превращение или серия превращений возвращает к исходной точке, например человек->волк->человек.
"Автоморфизм" – изоморфизм И эндоморфизм.
Тонкость, которую я НЕ понял: чем отличаются тождественный морфизм, эндоморфизм и автоморфизм? На первый взгляд – это одно и то же, в смысле определения эквивалентны. Может ли быть эндоморфизм, который НЕ является единичным? Может ли быть эндоморфизм, который НЕ является изоморфизмом?
Re: Мебель Вам привезли?.. ;-)
Re: Мебель Вам привезли?.. ;-)
Нет более дурацких понятий, чем математические. Например, "объект" в программировании (вообще - http://nounivers.narod.ru/ofir/fraud.htm). Тогда данное рассуждение подразумевает "структуры" или "упорядоченности" состава - типа "колонной" или "шеренгой". Я не прав?
Re: Мебель Вам привезли?.. ;-)
Данное рассуждение подразумевает, что категория - это некая совокупность объектов (в смысле программирования), которые можно превращать друг в друга.
Re: Мебель Вам привезли?.. ;-)
А в смысле "объекта" в программировании лучше всего опять подходит солдатский пример: всякий дневальный может стать караульным (или старшим наряда, как хотите, я не ограничиваю ;-) ; следовательно, речь идет именно о ролевой модели, поскольку содержание не переноминализируется (и лед отличается от воды запасом энергии). Следовательно, подразумевается нечто вроде того, что каждому элементу группы открыта возможность выбрать для себя любую из возможных для таких элементов вообще ролей.
типа "как вы яхту назовете, так она и поплывет" ;-)
Re: Мебель Вам привезли?.. ;-)
Re: Мебель Вам привезли?.. ;-)
Тогда мы будем думать: объект "солдат" здесь вполне очевидно возможен. А вот как возможен здесь объект "роль" мне трудно представить, поскольку "роль" я могу понимать не как порцию кода, а как некоторую заданную порции кода структуру. Кстати говоря, не разделение отношенческого и своего рода "объемного" формата - это "грех" математики, хотя чтобы такое разделение соблюдать, нужно быть особо скрупулезным в системе понятий...
no subject
Он может открываться и закрываться (точнее конструироваться и деструктурироваться), а может и нет, для него может выделяться совершенно произвольная область памяти (или несколько областей памяти). Сам факт выделения памяти важен постольку, поскольку объект должен хоть что-то делать (иначе зачем он вообще), а чтобы делать хоть что-то, понадобится хоть сколько-нибудь памяти.
[ А вот как возможен здесь объект "роль" мне трудно представить, поскольку "роль" я могу понимать не как порцию кода, а как некоторую заданную порции кода структуру. ]
Дык, потому и трудно представить, что ты думаешь, будто у объекта есть какие-то обязательные свойства, а их нет вообще никаких. Объект может представлять собой и данные, и код, и структуру. Код называется "методами", данные, имеющие некоторую структуру, - "полями", подобные друг другу объекты относят к некоторому "классу". Класс - это нечто вроде "категории" в философском смысле. Объект - нечто произвольное, относящееся к данной категории.
no subject
Философское рассуждение иногда требует использование такого рода понятие, указывающее на нечто сверхпроизвольное. Тогда я употребляю слово "условность" (а при некотором раскладе - и "специфика"). Но это лишь указание на то, что "что-то введено (выделено)" и более ни на что. Как его можно после этого упорядочивать, мне просто трудно представить ...
После же "раскрытия условности" - с этим уже можно что-то делать :) Как можно оперировать с тем "пойди туда, не знаю куда, возьми то, не знаю что", ума не приложу. Хотя инструкция "пойди", да, здесь имеет место :))
no subject
Вот это и есть объект. Мы не знаем, зачем нам понадобилась "условность" - поэтому не знаем никаких ее свойств. Вот как только узнаем - так и начинаем уточнять какие-то свойства объекта/условности - определяем данные, структуру, код и т.п. Например, если надо упорядочивать - будет какая-нибудь операция упорядочивания, или номер.
В программировании всегда есть некоторые операции, которые возникают как побочный эффект от того, что любому объекту выделяется какое-то место в памяти - это адрес (расположение в памяти) и размер (занимаемый в памяти). Но, вообще говоря, эти два свойства - просто побочный эффект того, как обычно технически "устроены" объекты в программе.
no subject
А если "объект" есть общее имя ряда возможных порождений, и само определение что есть объект просто соответствует этому списку порождений, то, быть может, такой список и следует привести? ;-)
no subject
Не понтанно :) Есть задачка, которая стоит перед программистом, объекты подбираются так, чтобы решить задачку, из возможных решений, которые приходят в голову программисту, он выбирает то, что ему кажется лучшим.
[ А если "объект" есть общее имя ряда возможных порождений, и само определение что есть объект просто соответствует этому списку порождений, то, быть может, такой список и следует привести? ]
Это подход философа - упомянуть все возможные решения задачки, но саму задачку так и не решить :) Программист выбирает один из вариантов и решает. В результате получается объект определенного класса, содержащий определенные данные, код, структуру.
no subject
Напоминает - "окраина города - район стихийной застройки" :) Мне кажется, признание - супер! ...
no subject
В огороде бузина...
[ Мне кажется, признание - супер! ... ]
Да-да-да-д! Страшная тайна раскрыта! :)
no subject
no subject
no subject