我可能没有留下这个问题,所以请忍受我,因为我试图解释我的意思。

我正在研究学习类别理论,适用于编程。到目前为止,我明白:

  • 类别中的对象是“不间断的”;你不应该在他们内部看到他们的内部结构。
  • 任何集合是一个类别
  • 编程语言类型可以被认为是集。 (bool是set true,false; int是所有整数的集合;等等。)
  • 因此,语言中的所有类型都形成了一类集合。
  • 态态是物体之间的箭头。
  • 如果这些对象本身是类别,那么态度被称为函数。

一起携带,这意味着从int到bool的函数是一个仿函数,因为它是从Set类别Int到Set类别Bool的地图。

但是,我还在别处阅读(特别是 https://www.johndcook.com/blog/2014/05/10/haskell-category-theory/ )那种方式是错误的,我们真的不应该谈论语言类型基本类别,“只是”态态。但我没有看到它如何与我以前的逻辑合作。

我必须得出结论,我以前的逻辑是有缺陷的,但我不清楚如何或为什么。概念化这一点是什么?套装只是额外的特殊例外吗?或者真的只是一个任意偏好的偏好,如何查看问题空间?或者我只是在某个地方出错了?

有帮助吗?

解决方案

这里有几个想法漂浮在这里。您可以通过分类镜头查看编程语言,然后类型是对象,它们确实是不透明的。所以Bool在这张照片中不是一组真实和假。这是一个物体,有两个态度(注射)进入它,一个对应于真实的一个,一个是一个到假的。在Haskell,这些是Bool的两个构造函数。他们没有参数,但这被解释为来自终端物体的态度(单位类型)。这一切都很好地效果。

然后,存在更传统的图片,其中类型仅仅是值集,而态态是集合之间的功能。集和函数表格组成一个类别。只要你不谈论部分函数(永远循环),那张照片很长。

然后有第三个想法,每个单独的集合都是一个类别。这是一个离散的类别,这意味着元素之间没有态度(除了身份之外)。在这种情况下,集合之间的功能确实对应于离散类别之间的函数。但是离散类别之间的仿函数只不过是对象(元素)的功能,这在态度上微不足道,因此这不是一个非常有趣的观点。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top