命题:每种类型本身就是一个类别.
例如:Int属于integersHask 的所有类别.
是这样的吗?
如果是这样,什么是类别中的同态Int,或者所有可能的态射Int->Int?怎么定义呢?
编辑:
--In the category of Hask
--Imagine, I have Str category just of strings under Hask, then:
Obj(Str) is Singelton
Hom (Str) is each string
Composition operation is (++) operator --in Haskell
And*_*kin 10
取决于你所说的"类型"和"是一个类别".如果你在编程语言中采用任何具体的类型,那么该类型只有很多可能的值,所以你可以只取所有值的集合,并说它是一个离散的类别C,它只有身份态射.
整数可以通过多种不同方式被视为一个类别:
Obj(C) = {*}是唯一的对象,每个整数是一个态射,0是身份态射,+是作文).(a, b)使得a <= b.反身性a <= a是身份态射.及物性就是构成.a|b.再次,refl_a = a|a是身份态射,以下事实:如果a|b和b|c然后a|c使所述组合物.如果您只对该类型 感兴趣Int,您还可以构建许多不同的类别:
最简单的例子:Int作为唯一的对象,将身份函数Int作为唯一的态射,完成.这是一个类别,通常称为1.
一些不那么简并的构造:内同态的幺半群Int.再次Int作为您的类别的唯一对象.作为Hom[Int, Int]在Haskell (1)中可实现的所有终止总函数的集合,将该集合上的组合定义为函数的普通组合.
您可以稍微使用这种结构:例如,您可以考虑部分函数,或仅考虑可逆函数(这将给出一组自同构,因此是一个非常简单的类组合).
还有许多其他方法来定义"与...有某种关系Int" 的类别.这取决于你想用它做什么.
在你的'编辑'上:这只是一个特殊情况,每个幺半群都是一个具有单个对象的类别.对于整数,您可以立即构建一些幺半群:
(Int, +, 0)(a+b是作文,0是身份)(Int, *, 1)(a*b是作文,1是身份)(Int, bitwise Xor, 0)(a xor b是作文,0身份)(Int, bitwise And, 0xF...F),类似的你总是通过相同的结构从一个幺半群中获得一个类别:给定一个幺半群(M, op, zero),将一个无结构点{*}作为单个对象,M作为一组态射,zero作为身份,op作为构图,你获得一个类别.这只是因为根据定义,monoids与具有单个对象的类别相同.
编辑:
(1)哦,等等,你需要类似于模数扩展性的等价类,否则即使f . id不相同f,即使没有整数溢出和其他讨厌的"帮助",关联也不会起作用在真正的计算机上发生的事情.请注意,属性的不可判定性,例如"它是否会终止所有输入值?" 并且"这两个函数对所有输入都返回相同的结果吗?" 不会打破明确的定义.
| 归档时间: | 
 | 
| 查看次数: | 280 次 | 
| 最近记录: |