Int是所有整数的类别吗?

0 haskell category-theory

命题:每种类型本身就是一个类别.

例如: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
Run Code Online (Sandbox Code Playgroud)

And*_*kin 10

取决于你所说的"类型"和"是一个类别".如果你在编程语言中采用任何具体的类型,那么该类型只有很多可能的值,所以你可以只取所有值的集合,并说它是一个离散的类别C,它只有身份态射.

整数可以通过多种不同方式被视为一个类别:

  • (Z,+,0)是一个群,因此一个特殊的群体具有单个对象(Obj(C) = {*}是唯一的对象,每个整数是一个态射,0是身份态射,+是作文).
  • (Z,<=)是一个部分有序的集合,posets是特殊的非常简单的类别.态射是元件之间只是无结构的箭头,与每对的一个整数箭头(a, b)使得a <= b.反身性a <= a是身份态射.及物性就是构成.
  • (Z,|)(可分性关系)又是一个poset,箭头再次简单地表示某个整数除以一些其他整数:a|b.再次,refl_a = a|a是身份态射,以下事实:如果a|bb|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,即使没有整数溢出和其他讨厌的"帮助",关联也不会起作用在真正的计算机上发生的事情.请注意,属性的不可判定性,例如"它是否会终止所有输入值?" 并且"这两个函数对所有输入都返回相同的结果吗?" 不会打破明确的定义.