类别理论(不是)用于编程?


21

在学习了Haskell和其他不是那么纯正的FP语言之后,我决定阅读有关类别理论的文章。在对分类理论有了很好的理解之后,我开始思考如何将分类理论的概念用于设计程序,但是无论我多么努力,这似乎都不是路要走。

在花了许多不成功的尝试将类别理论与设计程序联系起来之后,我得出以下结论:

  • 类别理论在设计编程语言时很有用。
  • 设计程序时(甚至在使用基于类别原理设计的语言时)也不需要使用类别理论。例如:在Haskell中进行编程时,您将使用类型,类型构造函数,函数,高阶函数等来设计程序,而不是类别理论概念。

总而言之,我们有下层系统(顺序从低到高):

范畴论->编程语言->程序

在特定的层上,使用直接基础层的概念。

这种理解正确吗?如果不是这样,并且您认为在设计程序时我们可以直接使用类别理论的概念,请参阅一些论证该文章的文章或博客文章。

注意:通过设计程序,我的意思是基于不同的概念来设计程序,例如并发,并行,响应式,消息传递等。


1
您是否认为monad是编程语言或程序的一部分?箭?
戴夫·克拉克

2
这至少部分地使我成为一个哲学问题。我不确定是否有一个正确的答案。类别理论的一个熟练者将运用从编程中获得的直觉,而另一个则倾向于不同的思维方式。
拉斐尔

2
编写的大多数程序都使用不受类别理论启发的编程语言。据我所知,普通程序员并不了解类别理论,因此大多数程序(包括您的操作系统和浏览器)都不受高等数学的启发。
Yuval Filmus 2013年

1
@YuvalFilmus:我的问题针对函数式编程语言
Ankur,

1
另请参阅有关
monoid的

Answers:


13

好吧,这当然取决于您要设计哪种程序。

如果您正在为您姑姑的巧克力店设计会计程序,我非常怀疑类别理论是否会有用。

但是当然,在某些情况下,类别理论在程序设计中非常有用(我也指数据结构,库等)。当所涉及的程序具有数学性质时,通常会发生这种情况。

如果要编写使用精确的实数和数学分析中出现的其他结构进行计算的程序,则需要回答的第一个问题是正确实现复杂的数学对象(例如可微函数,流形等)的含义。 )。在这里,了解一些类别理论和逻辑非常有帮助,因为它们为您提供了一种将数学结构的定义转换为相应数据结构的规范和实现的系统方法。您应该寻找的流行词是可实现性理论。但这只是一个例子。

了解类别理论如何派上用场的最佳方法是查看由了解许多类别理论(以及一般数学)的人编写的程序。一个明显的例子是MartinEscardó及其无法实现的功能,例如:

M.Escardó和P. Oliva:什么顺序游戏,Tychonoff定理和双重否定移位在 2010年数学结构函数式编程中是共同的,ACM出版社。(带有随附的Haskell和Agda文件

您可能会抱怨这不仅是类别理论,而且是逻辑和拓扑。这样的投诉将被严重误导。最佳类别理论总是与其他事物混杂在一起。

最后,我建议不要基于一些自给自足的阅读而得出关于事物本质的宏大结论。


这正是我的观点。如果我正在设计会计软件,则类型系统将是我的设计语言。即使我在设计数学软件,也将使用类型系统来表示类别理论概念。这基本上表明类型理论或类型系统比类别理论更通用。
Ankur 2013年

1
那是荒谬的说法。我认为您可能应该在做出类似这样的概括性陈述之前学到更多。也许你可以开始existentialtype.wordpress.com/2011/03/27/the-holy-trinity
安德烈·鲍尔

我不是研究员,博士生,科学家,数学家或分类理论家,所以请不要为我的陈述而烦恼,它们不会在某些科学期刊或研究论文中发表。我只是一个试图了解硬币另一面的程序员。顺便说一句,感谢您的链接。
Ankur 2013年

1
我意识到了这一点,这就是为什么我建议您应该谨慎地得出结论的原因:您根本不具备得出这些结论所需的信息。这也是为什么我要向您推荐Bob Harpher的博客文章,而不是例如有关类型理论与范畴理论之间关系的技术书籍。我正在努力提供帮助,但是在就整个数学分支的性质作出重大结论时,我希望您能多一些保留。
Andrej Bauer 2013年

例如,您说过“类型理论比类别理论更笼统”。这是一个陈述的示例,您应该不知道该陈述是基于很少的知识。我在这方面工作很专业,即使我会非常小心地做出这样的结论,或者相反。
Andrej Bauer 2013年

6

人们过去使用CT描述数据类型。

  1. 数据类型由特定类别定义,该类别的对象是(指定语言)类型的有限序列,并且其箭头是投影或数据类型操作的组合。例如,对象是堆栈的推入操作的域,并且是该域的共域。这为您提供了语法,但是您仍然没有语义概念。
  2. 代数(即类型的实例)是从理论到Ens(小集合)的函子。(我们使用“小”来避免罗素的悖论,但这并不重要。)
  3. 事实证明,类别的闭包属性对应于逻辑理论族。例如,如果理论类别在乘积下是封闭的,则可以通过方程式对数据类型进行公理化。如果通过撤回来关闭理论类别,则可以用Horn句子对数据类型进行公理化。

我不完全确定有人会再注意这一点。我认为,链接以及其中的链接将对其进行更详细的说明。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.