|
|
 |

Я не математик, поэтому просьба относится к моим математическим постам с большой осторожностью - вероятность ошибок в них очень велика. Возможно, обычный IE для чтения моих постов с формулами не подходит - в этом случае нужно установить дополнительные математические фонты или использовать другие браузеры. Для записи формул я использую вот эту таблицу дополнительных символов.
20 есть | обсудить | запомнить | сообщить другу | ссылка
Ух ты, а это что такое? :D Какое-то неожиданное "зеркало сайта" у меня появилось...
11 есть | обсудить | запомнить | сообщить другу | ссылка
Вот думаю об этих словах. Вот если встретить, скажем, человека сильного, красивого, веселого. Может оказаться, что просто дурак, как и я, только веселый. А может и так, что - учитель.
видео via lafinur
обсудить | запомнить | сообщить другу | ссылка
"держи ум во аде и не отчаивайся"
говорят, Силуан Афонский сказал. via aleatorius
5 есть | обсудить | запомнить | сообщить другу | ссылка
Ага, у меня тоже появился этот немного глючный LJ Messenger. Уже даже приятно пообщались с falcao. (Ой, falcao, это мы с Вами общались? А то я запутался...)
8 есть | обсудить | запомнить | сообщить другу | ссылка
Что означает "категория бимоноидов"? Это значит, что каждый объект A в некоторой моноидальной категории обладает морфизмами "умножение" μA: A⊗A→A и "коумножение" ΔA: A→A⊗A. Кроме того, есть единица и коединица, но нам они пока не нужны. Все эти морфизмы должны быть в определенном смысле совместимы.
Поскольку эти морфизмы определены для каждого объекта, то можно ввести и новые ( операции для морфизмов... )
Upd: Вот ghbdtn поправляет: это у меня не категория бимоноидов, а категория, где все объекты - бимоноиды.
13 есть | обсудить | запомнить | сообщить другу | ссылка
Кажется есть математически более красивый способ получить категорию моноидов, нежели моя конструкция LN. Для этого нужно использовать категорию Клейсли монады Set конечных множеств. Умножение этой монады - просто объединение множества множеств. В качестве тензорного произведения будет использоваться декартово произведение (с попарными декартовыми произведениями в кодомене), а операция моноида будет выглядеть так: (x, y) → {x, y}, т.е. упорядоченная пара превращается просто в множество из двух элементов.
Но с точки зрения количества лишних вычислений... нет, я на это пойтить не могу...
23 есть | обсудить | запомнить | сообщить другу | ссылка
Итак, мы умеем создавать "схемы из элементов" в некоторой моноидальной категории бимоноидов (если мои сомнения разрешатся), т.е. пользуясь довольно богатым языком биалгебр (не обращайте там внимания на слова vector space, подходит любая моноидальная категория).
Хотелось бы теперь, однако, уметь визуализировать полученные схемы. Для этого нужно выбрать некоторый язык визуализации.
У меня пока есть лишь один кандидат: dotty. Есть еще варианты? Учитывая хорошую поддержку XML в Scala - может есть какой-нибудь удобный XML-стандартик?
4 есть | обсудить | запомнить | сообщить другу | ссылка
Возможно, если вы посмотрите test2 из eltest.scala, будет более понятно, к чему я примерно веду (для тестирования нужно обновить elemendi.scala). Смысл таков: морфизмом является некоторый "элемент" или "модуль" (не в математическом смысле, а "программный модуль"), причем его домен - это тип набора "интерфейсов", который предоставляется этому модулю для работы (setServer), а кодомен - набор интерфейсов, предоставляемый самим модулем (getServer). Тогда, если m - наш модуль, мы можем построить Kleisli.Arrow, используя функцию
f(x) = {
m.setServer(x)
m.getServer
}
обсудить | запомнить | сообщить другу | ссылка
Теперь однако меня одолевают сомнения, является ли Kleisli#Tensor[X, Y] в каком-либо смысле тензором, в частности есть ли у него ассоциатор и единица.
В терминах категории множеств это (1 + X) × (1 + Y). Причем в категории где стрелки между A и B - это теоретико-множественные морфизмы из (1 + A) в List(1 + B).
обсудить | запомнить | сообщить другу | ссылка
То, что я задумывал - получилось. Не совсем так, как я рассказал, но математически вроде-бы чисто, т.е. без переписывания чего-либо ad hoc.
Видоизмененная elemendi. (cделайте Ctrl+R) Тест.
В тесте я определяю три морфизма (mul2, minus2 и div2) с типизацией Int => Int в специальной категории, которую я назвал просто Kleisli, потому что она построена отталкиваясь от категории Клейсли списков. Все объекты этой категории являются моноидами и комоноидами (но только если Kleisli#Tensor является в действительности тензором!), поэтому мы можем применить к этим трем морфизмам convolution:
mul2 ** div2 ** minus2,
получив стрелку опять-же с типизацией Int => Int. Эта стрелка соответствует функции, применяющей mul2, minus2 и div2 к значению и выдающей список результатов. Операция =>> соответствует "гибридной" композиции стрелок из Kleisli и Functional.
Ну, теперь можно спокойно продолжать...
обсудить | запомнить | сообщить другу | ссылка
В одной недавней записи я допустил неясное замечание о том, что мол в категории Клейсли списков "свертка не работает". Имелось в виду следующее. Если бы в категории Клейсли списков существовало категорное произведение, можно было бы ввести операцию моноида как (x, y) => List(x, y). Я ввел "нечто вроде" произведения через zip, но поскольку это никакое не произведение, то и "моноид" работает неправильно, что привело к необходимости введения моноида "руками" и девальвации всей идеи.
Вот есть задумка как ( все сделать хорошо )
Upd: keldoor нашел баг в этом определении, что пока не смертельно, если переопределить отношение эквивалентности так: List(x0,..,xk, None) = List(x0,..,xk)
18 есть | обсудить | запомнить | сообщить другу | ссылка
Итак, моя цель - записывать "схемы соединения элементов" моноидальными формулами в Scala. Для удобства пользователя неплохо было бы переместиться в strictified категорию относительно (декартова) произведения. Иными словами, тип, в терминах Scala записываемый как ((A, B), C) хочется преобразовывать каким-то способом (удобным для пользователя библиотечки) в (A, B, C). Казалось бы, тут поможет ( implicit conversion... )
А нельзя ли воспользоваться непосредственно strictification theorem?
обсудить | запомнить | сообщить другу | ссылка
Продолжаю свои опыты над Scala. Ничего существенного пока не получилось, но кому интересно - ( загляните. )
Код библиотечки elemendi.
PS: Кстати, мне на этот раз удалось замучить компилятор по настоящему: на одном из вариантов библиотечки он упал... Правда это еще версия 2.7.3, на свежей не проверял.
2 есть | обсудить | запомнить | сообщить другу | ссылка
При написании этих примеров на Scala я думал, если честно, что for реализован на основе итераторов. Все оказалось намного проще и лучше: для for в Scala нужны map и flatMap, т.е. именно функциональность монады. Таким образом, все возможности хаскелловских монад в Scala уже доступны.
Конечно, о потраченном времени не жалею, т.к. попутно кое-что понял и проверил.
Upd: Кстати, приятно в этом смысле посмотреть на стандартный класс Option, обладающий методами map и flatMap и, таким образом, являющийся полным аналогом монады Maybe в Haskell.
обсудить | запомнить | сообщить другу | ссылка
Пытаюсь улучшить вот это, дабы еще приблизиться к синтаксису монад Haskell (но на Scala). Напоминаю, исходный хаскелловский код выглядел так:
cross l1 l2 = do
x <- l1
y <- l2
return (x,y)
Получился следующий правильно работающий код на Scala: import monad._
import monad.Utils._
object monadsample extends Application
{
def cross(l1: String, l2: String) = {
val x, y = by(l1)
l1 -> x in {
l2 -> y in
List((x?, y?))
}
}
println( cross("ab", "def").toList )
}
Кому интересно, ( код библиотечки monad... )
12 есть | обсудить | запомнить | сообщить другу | ссылка
Ого, по количеству посетителей чувствую, что меня здесь еще помнят. Спасибо, друзья. Я тут увлекся немного семинаром по ТК, но теперь у нас каникулы :).
11 есть | обсудить | запомнить | сообщить другу | ссылка
Захотелось изобразить на Scala примерчик со страницы 131 "Yet Another Haskell Tutorial" (в самом начале страницы). ( И ведь получилось... )
Upd: Специальное определение mapf'a (действия функтора) для хаскелловской монады, вообще-то, конечно, излишне, его ведь можно выразить через >>=.
2 есть | обсудить | запомнить | сообщить другу | ссылка
|
 | |
 |
 |