Как (если вообще) экспоненциальная интерпретация (->)
(a -> b
как ba) распространяется на категории, отличные от Hask/Set? Например, может показаться, что интерпретация категории недетерминированных функций примерно Kliesli [] a b
как 2a * b (a -> b -> Bool
).
Обобщение экспоненциального типа
Ответы (1)
Понятие экспоненты может быть определено в общих чертах, за исключением Hask/Set. Категория с экспонентами и произведениями называется декартовой закрытой категорией. Это ключевое понятие в теоретической информатике, поскольку каждый c.c. категория по сути является моделью типизированного лямбда-исчисления.
Грубо говоря, в декартовой замкнутой категории для любой пары объектов a,b
существуют:
- объект продукта
(a * b)
и - экспоненциальный объект
(b^ab)
с морфизмами
eval : (b^a)*a -> b
(в Haskell:\(f,x) -> f x
, применяется AKA)- для любого
f : (a*b)->c
существуетLf : a -> (c^b)
(в Haskell:curry f
)
удовлетворяющие уравнению «они пользуются в лямбда-исчислении», т. е. если f : (a*b)->c
, то:
f = (Lf * id_a) ; eval
В Haskell последнее уравнение выглядит так:
f = \(x :: (a,b), y :: a) -> apply (curry f x, id y) where apply (g,z) = g z
или, используя стрелки,
f = (curry f *** id) >>> apply where apply (g,z) = g z
person
chi
schedule
27.12.2014
a -> b
естьb^a
. Рассмотримa -> ()
, в котором проживает только1^a=1
жителей, а именноconst ()
. С другой стороны, в() -> b
проживаетb^1=b
жителей, по одному на каждого жителяb
. - person Cirdec   schedule 26.12.2014