Home
Algebraic Brain
рациональные фантазии
навигация
ссылки
July 2009
 

Алгебраин
2024-06-03 21:26
Основные темы блога.
Public


Я не математик, поэтому просьба относится к моим математическим постам с большой осторожностью - вероятность ошибок в них очень велика.

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


...

20 есть | обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-07-05 14:17
(no subject)
Public

Ух ты, а это что такое? :D Какое-то неожиданное "зеркало сайта" у меня появилось...

11 есть | обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-07-02 22:53
(no subject)
Public

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



видео via [info]lafinur

обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-07-01 21:29
Хорошие слова
Public

"держи ум во аде и не отчаивайся"

говорят, Силуан Афонский сказал.
via [info]aleatorius

5 есть | обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-30 20:22
(no subject)
Public

Ага, у меня тоже появился этот немного глючный LJ Messenger. Уже даже приятно пообщались с [info]falcao. (Ой, falcao, это мы с Вами общались? А то я запутался...)

8 есть | обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-30 17:29
Пояснение и пример.
Public
programming, scala

Что означает "категория бимоноидов"? Это значит, что каждый объект A в некоторой моноидальной категории обладает морфизмами "умножение" μA: A⊗A→A и "коумножение" ΔA: A→A⊗A. Кроме того, есть единица и коединица, но нам они пока не нужны. Все эти морфизмы должны быть в определенном смысле совместимы.

Поскольку эти морфизмы определены для каждого объекта, то можно ввести и новые операции для морфизмов... )

Upd: Вот [info]ghbdtn поправляет: это у меня не категория бимоноидов, а категория, где все объекты - бимоноиды.

13 есть | обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-30 11:07
(no subject)
Public
programming, scala

Кажется есть математически более красивый способ получить категорию моноидов, нежели моя конструкция LN. Для этого нужно использовать категорию Клейсли монады Set конечных множеств. Умножение этой монады - просто объединение множества множеств. В качестве тензорного произведения будет использоваться декартово произведение (с попарными декартовыми произведениями в кодомене), а операция моноида будет выглядеть так: (x, y) → {x, y}, т.е. упорядоченная пара превращается просто в множество из двух элементов.

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

23 есть | обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-29 22:52
Визуализация
Public
programming, scala

Итак, мы умеем создавать "схемы из элементов" в некоторой моноидальной категории бимоноидов (если мои сомнения разрешатся), т.е. пользуясь довольно богатым языком биалгебр (не обращайте там внимания на слова vector space, подходит любая моноидальная категория).

Хотелось бы теперь, однако, уметь визуализировать полученные схемы. Для этого нужно выбрать некоторый язык визуализации.

У меня пока есть лишь один кандидат: dotty. Есть еще варианты? Учитывая хорошую поддержку XML в Scala - может есть какой-нибудь удобный XML-стандартик?

4 есть | обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-29 17:22
(no subject)
Public
programming, scala

Возможно, если вы посмотрите

test2
из eltest.scala, будет более понятно, к чему я примерно веду (для тестирования нужно обновить elemendi.scala).

Смысл таков: морфизмом является некоторый "элемент" или "модуль" (не в математическом смысле, а "программный модуль"), причем его домен - это тип набора "интерфейсов", который предоставляется этому модулю для работы (setServer), а кодомен - набор интерфейсов, предоставляемый самим модулем (getServer). Тогда, если m - наш модуль, мы можем построить Kleisli.Arrow, используя функцию

f(x) = {
   m.setServer(x)
   m.getServer
}

обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-28 22:36
Tensor
Public
programming, scala

Теперь однако меня одолевают сомнения, является ли Kleisli#Tensor[X, Y] в каком-либо смысле тензором, в частности есть ли у него ассоциатор и единица.

В терминах категории множеств это (1 + X) × (1 + Y). Причем в категории где стрелки между A и B - это теоретико-множественные морфизмы из (1 + A) в List(1 + B).

обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-28 17:03
Получилось.
Public
programming, scala

То, что я задумывал - получилось. Не совсем так, как я рассказал, но математически вроде-бы чисто, т.е. без переписывания чего-либо 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.

Ну, теперь можно спокойно продолжать...

обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-28 13:51
Метапрограммирование на Scala
Public
programming, scala

Интересный блог о метапрограммировании на Scala

3 есть | обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-25 12:43
Конструкция LN.
Public
programming, scala

В одной недавней записи я допустил неясное замечание о том, что мол в категории Клейсли списков "свертка не работает". Имелось в виду следующее. Если бы в категории Клейсли списков существовало категорное произведение, можно было бы ввести операцию моноида как (x, y) => List(x, y). Я ввел "нечто вроде" произведения через zip, но поскольку это никакое не произведение, то и "моноид" работает неправильно, что привело к необходимости введения моноида "руками" и девальвации всей идеи.

Вот есть задумка как все сделать хорошо )

Upd: [info]keldoor нашел баг в этом определении, что пока не смертельно, если переопределить отношение эквивалентности так:
List(x0,..,xk, None) = List(x0,..,xk)

18 есть | обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-25 09:35
Проблема с типами.
Public
programming, scala

Итак, моя цель - записывать "схемы соединения элементов" моноидальными формулами в Scala. Для удобства пользователя неплохо было бы переместиться в strictified категорию относительно (декартова) произведения. Иными словами, тип, в терминах Scala записываемый как ((A, B), C) хочется преобразовывать каким-то способом (удобным для пользователя библиотечки) в (A, B, C). Казалось бы, тут поможет implicit conversion... )

А нельзя ли воспользоваться непосредственно strictification theorem?

обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-22 17:42
Повозился с категорией Клейсли списков
Public
programming, scala

Продолжаю свои опыты над Scala. Ничего существенного пока не получилось, но кому интересно - загляните. )

Код библиотечки elemendi.

PS: Кстати, мне на этот раз удалось замучить компилятор по настоящему: на одном из вариантов библиотечки он упал... Правда это еще версия 2.7.3, на свежей не проверял.

2 есть | обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-14 22:54
Все оказалось гораздо лучше.
Public
programming, scala

При написании этих примеров на Scala я думал, если честно, что for реализован на основе итераторов. Все оказалось намного проще и лучше: для for в Scala нужны map и flatMap, т.е. именно функциональность монады. Таким образом, все возможности хаскелловских монад в Scala уже доступны.

Конечно, о потраченном времени не жалею, т.к. попутно кое-что понял и проверил.

Upd: Кстати, приятно в этом смысле посмотреть на стандартный класс Option, обладающий методами map и flatMap и, таким образом, являющийся полным аналогом монады Maybe в Haskell.

обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-14 20:40
Еще ближе к хаскелловскому синтаксису.
Public
programming, scala

Пытаюсь улучшить вот это, дабы еще приблизиться к синтаксису монад 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 есть | обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-13 13:45
(no subject)
Public

Ого, по количеству посетителей чувствую, что меня здесь еще помнят. Спасибо, друзья. Я тут увлекся немного семинаром по ТК, но теперь у нас каникулы :).

11 есть | обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-12 17:47
Теперь монады (или нечто вроде).
Public
programming, scala

Захотелось изобразить на Scala примерчик со страницы 131 "Yet Another Haskell Tutorial" (в самом начале страницы).
И ведь получилось... )

Upd: Специальное определение mapf'a (действия функтора) для хаскелловской монады, вообще-то, конечно, излишне, его ведь можно выразить через >>=.

2 есть | обсудить | запомнить | сообщить другу | ссылка



Алгебраин
2009-06-12 00:57
Первый опыт на Scala
Public
programming, scala

Оно работает!
Моя версия категорного функтора на Scala )

16 есть | обсудить | запомнить | сообщить другу | ссылка



Advertisement