CTFP Ch03 - WinChua/blog GitHub Wiki

概要

第三章举了category中obj的一些例子

摘录

  1. No Object:
这种category是most trivial的, 它没有obj的同时也没有arrow. 类似于0、empty set、identity function, 虽然看起来没有什么作用, 但是能够让某种类型的对象进行代数操作. 比如说:
  * 0让整数的代数运算成为可能;
  * empty set让集合的代数运算成为可能;
  * identity function让函数的代数运算成为可能;
  * empty category让category of all category 上的代数运算成为可能;
  1. Simple Graph
给定一个有向图, 通过在它上面添加一些边来让整个有向图满足category的条件(1. id; 2. composition), 构造出一个category;这种category被称为free category。
  1. Order
这种category中的arrow是object之间的关系. 比如说两个obj之间的小于等于关系. 首先检查下这种关系是否满足两个条件:
  *  id : 每一个obj是不是小于等于自己? ✅ 
  *  composition : a <= b and b <= c, then a <= c? ✅ 
所以小于等于关系能够满足上面两个条件, 形成了category。数学上称为preorder
另外, 如果在order上面添加多一些条件可以得到另外的关系:
  * a <= b and b <= a then a == b, 这种关系成为partial order
  * 任意两个obj之间一定存在某个序关系, 成为total order

order 跟 category之间的联系:
  * preorder: 任意两个obj之间最多可能有一条morphism, 这种category称为thin; 注意由于不是total order, 允许两个obj之间不存在morphism; 所以preorder中的Hom-set要么是empty,要么是singleton; preorder中可以存在circle,但是在partial order中就不可以

preorder加上某些限制就变成了另外的order:
  * partial order: forbidden circle in preorder;
  * total order: forbidden C(a, b) == empty;

一些概念:
  * Hom-Set: 在category C中, 两个对象a, b之间的morphism形成的集合称为Hom-set, 记为 Hom_C(a, b) 或者 C(a,b)
  1. Monoid
  • 题外话:
* 结合律:  (a + b) + c == a + (b + c)
* 交换律:  a + b == b + a
* 分配律:  (a + b) * c == a * c + b * c
  • As set 定义: a set and a operation defined on that set, where the operation satisify the associative and there must be a unit element where a * e = a and e * a = a; 对于某一个集合以及定义在该集合上面的一个二元操作, 如果该操作满足结合律同时集合中存在一个单位元素,满足 a * e = a; e * a = a; 那么我们称该集合以及该二元操作形成了一个monoid结构, 这个定义是从集合的角度定义了monoid的
class Monoid m where
  mempty :: m
  mappend :: m -> m -> m

instance Monoid String where
  mempty = ""
  mappend = (++)
  • As category 上面的定义是从集合的角度来定义monoid, 但是对于category来说, 我们只能够从obj的外部来描述关系, 而不能从对象的内部(集合从的元素)来描述关系, 那么怎么从category的角度来定义monoid呢?
  对于每一个monoid结构来说, 都存在一个singleton obj的category与之对应, identity function对应了monoid结构中的单位元素, morphsim则与monoid的set的元素一一对应。
  • Monoid Category 与 Monoid Set之间的关系
对于一个Monoid Category C来说, Hom-Set_C(a, a) 就是 Monoid Set, 我们能够找到一些元素与Hom-Set中的morphism一一对应, 同时在这些元素上面定义一个binary operator使得binary operator满足结合律以及单位元