范畴、函子与态射

 

"范畴就是使用箭头连接的物体。"

箭头表示范畴成员之间的关系,正式的名称叫做"态射"(morphism)。范畴论认为,同一个范畴的所有成员,就是不同状态的"变形"(transformation)。通过"态射",一个成员可以变形成另一个成员。

1.2 数学模型

既然"范畴"是满足某种变形关系的所有对象,就可以总结出它的数学模型。

  • 所有成员是一个集合
  • 变形关系是函数

也就是说,范畴论是集合论更上层的抽象,简单的理解就是"集合 + 函数"。

理论上通过函数,就可以从范畴的一个成员,算出其他所有成员。

1.3 范畴与容器

我们可以把"范畴"想象成是一个容器,里面包含两样东西。

  • 值(value)
  • 值的变形关系,也就是函数。

下面我们使用代码,定义一个简单的范畴。

 

https://www.cnblogs.com/feng9exe/p/8295402.html

 

我们先记住前面一句话,函子是范畴间的一类映射。我们知道,态射是范畴内对象之间的映射关系。函子与它类似,函子是范畴与范畴间的映射关系,也就是可以通过一个函子,把一个范畴映射到另一个范畴。

 

Pasted Graphic.tiff

 

上图中有两个范畴 C 和 D,还有一个函子 F,意思是范畴 C 通过函子 F 映射到了D。 

我们用白话描述一下函子的定义,免得陷入各种希腊字母的公式中。 

- 范畴 C 中的每一个对象,都可以映射到范畴 D 上的一个对象(这个可以多对一); 

- 范畴 C 中的每一个态射 f: X->Y ,都可以遇到到范畴 D 上的相应态射 F(f) : F(X)->F(Y), 包括单位态射; 

- 映射后的态射的复合规则依然被保持,即 f:X->Y, g:Y->Z, 恒有 F(g.f)=F(g).F(f)。

还有,把一个范畴映射到自身的函子叫做自函子。

--------------------- 

作者:henzox 

来源:CSDN 

原文:https://blog.csdn.net/henzox/article/details/70216214 

版权声明:本文为博主原创文章,转载请附上博文链接!

 

 

函子(Functors

态射是类型之间的映射;函子是范畴之间的映射。可以认为函子是这样一个函数,它从一个容器中取出值, 并将其加工,然后放到一个新的容器中。这个函数的第一个输入的参数是类型的态射,第二个输入的参数是容器。

// myFunctor :: (a -> b) -> f a -> f b

意思是“给我一个传入a返回b的函数和一个包含a(一个或多个)的容器,我会返回一个包含b(一个或多个)的容器”

 

http://www.cnblogs.com/tolg/p/5258029.html

posted @ 2018-12-17 15:25  zzfx  阅读(1692)  评论(0编辑  收藏  举报