指数型的推广

时间:2014-12-26 17:37:03

标签: haskell category-theory

(->)a -> b为$ b ^ a $)的指数解释如何(如果有的话)推广到Hask / Set以外的类别?例如,似乎非确定性函数类别的解释大致为Kliesli [] a b,为$ 2 ^(a * b)$(a - > b - > Bool)。

1 个答案:

答案 0 :(得分:4)

指数的概念可以用Hask / Set之外的一般术语来定义。具有指数和产品的类别称为cartesian closed category。这是理论计算机科学的一个关键概念,因为每个c.c. category本质上是输入的lambda演算的模型。

粗略地说,对于任何一对对象a,b,在笛卡尔封闭类别中存在:

  • 产品对象(a * b)
  • 指数对象(b^ab)

with morphisms

  • eval : (b^a)*a -> b(在Haskell:\(f,x) -> f x,AKA适用)
  • 对于任何f : (a*b)->c,存在Lf : a -> (c^b)(在Haskell中:curry f

满足等式"他们喜欢lambda演算",即如果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