4, Вагнер В. В. Теория отношений и алгебра частичных отображений // Теория полугрупп и её приложения, Саратов : Изд-во Сарат, ун-та, 1965, Вып. 1, С, 3-178,
5, Новиков В. Е. Концепты и функциональные зависимости // Математика, Механика : сб. науч. тр. Саратов : Изд-во Сарат, ун-та, 2007, Вып. 9, С, 68-70,
УДК 519.682.1
А. А. Орел
О НЕКОТОРЫХ ВИДАХ ФАНТОМНЫХ ТИПОВ ДАННЫХ
В работе [1] предложено при конструировании фантомных типов данных использовать в качестве определяющего отношения отношение предпорядка, которому соответствует тип функциональной зависимости, представленный на языке Haskell конструктором типа (->)• На основании рассмотренного отношения была решена задача статической проверки типов. Однако данное отношение не обладает свойством симметричпо-сти, что накладывает ограничения на область его применения. Фантомные типы данных, построенные на основе этого отношения, не позволяют, например, решить задачу динамической проверки типов [2]. Для решения такой задачи требуется реализация свойства рефлективности с помощью функции с сигнатурой ref 1 : : ТЕ a b, где ТЕ a b - тип данных, соответствующий отношению эквивалентности, и реализация двух функций from и to с сигнатурами
from :: ТЕ a b -> а -> b и to :: ТЕ a b -> b -> а
Заметим, что при наличии свойства симметричности, реализуемого функцией symm с сигнатурой symm : : ТЕ a b -> ТЕ b а, достаточно иметь лишь одну из функций from или to, например from, так как to может быть получена как композиция from . symm.
Для определения базового типа ТЕ a b можно воспользоваться отношением эквивалентности в виде (А => В) & (В => А), реализуемым в силу изоморфизма Карри — Ховарда типом пары функциональных зависимостей (а -> b, b -> а) [3], или использовать на основе принципа Лейбница отношение эквивалентности в видеУ f. f а -> f b (см. [2]).
Рассмотрим другие возможности. В начале определим отношение эквивалентности с использованием альтернативы ( | ) в форме (А | В) => (А & В). Соответствующий тип данных ТЕ a b можно представить средствами языка Haskell в виде
type ТЕ a b = Either a b -> (a, b)
76
Функции ref 1, from и to могут быть реализованы следующим образом:
ref1 :: ТЕ а а
ref1 (Left х) = (х, х)
ref1 (Right х) = (х, х)
from :: ТЕ a b -> а -> b from f х = snd (f (Left x))
to : : ТЕ a b -> b -> a to fx— fst (f (Right x))
Поскольку отношение эквивалентности должно обладать свойствами симметричности и транзитивности, определим функции symm и trans, обеспечивающие эти свойства.
symm :: ТЕ a b -> ТЕ b а
symm f (Left х) = case f (Right x) of
(y, z) -> (z, y) symm f (Right x) = case f (Left x) of
(y, z) -> (z, y)
trans :: ТЕ a b -> ТЕ b с -> ТЕ а с trans f g (Left x)
(x, snd (g (Left (snd (f (Left x)))))) trans f g (Right x) =
(fst (f (Right (fst (g (Right x))))), x)
Следует заметить, что в определении функции from используется только второй (snd) элемент результирующей пары, а в определении функции to - только правый (fst). Принимая в расчет это замечание, попытаемся использовать для определения нового варианта типа данных ТЕ a b отношение (А | В) => (А | В), являющееся тавтологией. Соответствующий тип данных на языке Haskell будет иметь вид
type ТЕ a b = Either a b -> Either a b
Функции ref 1, symm, trans, from и to в соответствии со сделанным замечанием могут быть реализованы следующим образом:
ref1 :: ТЕ а а
ref1 (Left х) = Right х
ref1 (Right х) = Left х
symm :: ТЕ a b -> ТЕ b а
symm f (Left x) = case f (Right x) of
77
Left у -> Right у symm f (Right x) = case f (Left x) of
Right у -> Left у
trans :: ТЕ a b -> ТЕ b с -> ТЕ а с trans f g (Left x) = case f (Left x) of
Right у -> case g (Left y) of
Right z -> Right z
trans f g (Right x) = case g (Right x) of
Left у -> case f (Right y) of Left z -> Left z
from :: ТЕ a b -> a -> b from f x = case f (Left x) of Right у -> у Left у -> undefined
to : : ТЕ a b -> b -> a to f x = case f (Right x) of Left у -> у Right у -> undefined
Поскольку определяющее отношение для ТЕ a b является тавтологией, то в силу изоморфизма Карри — Ховарда существует функция f типа ТЕ а Ь. Она определяется следующим образом:
f :: ТЕ а Ъ f = id
Существование функции фантомного типа отличает полученный тип данных от типов, рассмотренных ранее. Отметим, что отношения, определяющие сигнатуры функций from и to, не являются тавтологиями. Вследствие этого обстоятельства функции from и to могут принимать значения undefined, однако это не ограничивает область их применения при решении задач, рассмотренных в работе [2].
Отметим, что в соответствии с [1, 2] определение функции f вида f (С pi ... pn) = е при добавлении к конструктору данных С параметра р типа ТЕ а Ь, контролирующего эквивалентность типов а и Ь, заменяется на f (С р pi ... pn) = from р е.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Орел А. А. Фантомные типы данных на основе отношения предпорядка // Математика. Механика : еб. науч. тр. Саратов : изд-во Сарат. ун-та, 2010. Вып. 12. С. 56-59.
2, Hinze R. Fun with phantom types. Cornerstones in Computing/ eds, J, Gibbons, O, de Moor, Palgrave Maemillan, The Fun of Programming, 2003, P. 245—262,
3, Baars A. I., Swierstra S. Typing dynamic typing// Proc of the Seventh ACM SIGPLAN International Conference on Functional Programming (ICFP '02), October 4-6, 2002. ACM Press / Pittsburgh, Pennsylvania, USA, 2002. SIGPLAN Notices 37(9).
УДК 519.25+519.853
П. Ю. Пасеков
ПРИМЕНЕНИЕ ТЕОРИИ МАРКОВИЦА К ПОРТФЕЛЮ МЕХАНИЧЕСКИХ ТОРГОВЫХ СИСТЕМ
Эффективные методы формирования портфеля, состоящего из ценных бумаг, чрезвычайно важны как для институциональных, так и для частных инвесторов. В настоящей статье рассматривается модель, построенная на объединении понятий портфельного инвестирования, теории Г. Марковица и механических торговых систем.
В 1952 г. Гарри Марковиц опубликовал фундаментальную работу [1], которая считается основой современной теории портфельного инвестирования. По теории Марковица для формирования набора эффективных портфелей необходимо определить ожидаемую доходность, дисперсию для каждого финансового актива и ковариацию между активами. Эффективный портфель - портфель, обеспечивающий самый низкий риск при заданной ожидаемой доходности. Рассмотрим постановку задачи Г. Марковица:
' то то
Е Е üßj Covij ^ min
i=i j=i
то
< E E(ri)9i = E(r)
i=i
то
E 0i = i,
i=i
где - доля г-го актива в портфеле, Covi;j - ковариация ¿-го и j-ro активов, E(r) - ожидаемая доходность портфеля, E(ri) - ожидаемая i
Г. Марковиц ввел понятие «эффективная граница», на которой располагаются все эффективные портфели. Чтобы определить данную границу, необходимо рассчитать соответствующие удельные веса входящих