参考要求:分类理论,因为它适用于类型系统


13

我不断听到关于如何必须学习类别理论才能真正理解编程语言理论的信息。到目前为止,我在不涉足类别领域的情况下学到了很多PL。但是,我认为是时候该大踏步地看看我所缺少的了。

不幸的是,我找不到的任何资料似乎都与类型系统或编程没有任何联系。他们这是计算机科学家对类别理论的入门,但是随后转向一般的抽象废话(我很爱说),而没有给出任何实际的例子或应用。

我想我的问题实际上有两个方面:

  1. 范畴论对于理解PL中的“深层概念”是否必不可少?
  2. 从实际应用到类型系统和编程的角度来看,有什么资料可以解释类别理论?

到目前为止,我得到的最深入的是模糊的函子概念(据我所知,它似乎与ML中的函子无关)。我对要从类别理论的角度理解monad所需的抽象感到恐惧。


2
@Raphael提出一个问题,这个问题由两个彼此隐约相关的不同问题组成,是一个坏主意。但是问题1.不是主观的。而是要求澄清和解释。我猜想问题2的意思是,他很乐意提及该地方,而不是实际的解释。
Thomas Klimpel

2
将来,每个帖子最好只问一个问题。您可以提出问题1,然后根据您得到的答案,决定是否单独提出问题2。这通常会使事情变得更顺利。
DW

1
@Raphael问题一是主观的吗?可能很难判断-这是您的意思吗?它可能会有一个答案:“这取决于您是哪种人。” - 你是这个意思吗?仍然可能证明它绝对是必不可少的,或者不是绝对必要的,对吗?(而且人们似乎同意这不是必需的。)
k.stm

1
@ k.stm问题的一般形状令我担心。如果有人问“代数对理解形式语言的深层概念是否必不可少?”,我就知道一个事实,不同的人会根据他们的喜好和品味给出不同的答案。我希望这里不会有所不同。
拉斐尔

1
@Raphael好的,我明白了。但是我认为那是人们对一个客观问题给出主观答案。(当被问及咖啡是否健康时,人们会说“哦,我每天喝五杯,感觉
真好

Answers:


15

范畴论对于理解编程语言不是必需的,甚至没有必要对编程语言进行高级研究。大多数编程语言的人都不了解类别理论。

类别理论方法主要在编程语言研究的一小部分中有用,即在函数式编程的分析中,尤其是由于Moggi伟大的发现,即某些计算效果具有单子结构的情况。在1990年代,随着Moggi的突破,进行了大量研究以将分类方法扩展到其他形式的编程语言。但是,据我所知,分类方法对于OO,并发,并行和分布式计算,定时计算或编译器都没有发现所有有用的方法。因此,人们大多放弃了扩展分类方法。

类型化编程的分类方法在纯函数中效果很好。实际上,一些简单的键入系统是类别。这在例如

现在,有关并发流程的类型(例如,会话类型)有很多工作,截至2016年9月,这些工作本质上都不是绝对的。

就是说,永远不会知道太多的数学,知道类别理论是有用的。因此,这是成本/收益的问题。如果您喜欢数学,那么也许您对代数有一定的背景知识(例如,集合中的自由组是什么,自由环是什么),那么学习类别理论将很容易,并且如果您计划从事(受启发)函数式编程,了解类别将很有用。

最后,范畴论是一门美丽的数学,值得一提,因为它是如此的简洁。


请参阅本讨论中的Uday Reddy的贡献以获得不同的观点。


“但是,就我所知,分类方法并没有发现对...有用的所有方法。”这正是我的问题。操作语义可以准确地描述所有这些概念,因此我不觉得自己会错失良机。我喜欢数学,但可悲的是我缺乏抽象代数的背景。我只了解普通代数结构的基本知识。这使得掌握范畴论变得尤为麻烦。
gardenhead

2
@gardenhead然后CT可能对您没什么用。如果您想在“函数式编程”空间中阅读大量论文,包括有关类型的工作,那么很多论文将使用CT语言。
Martin Berger

这一个副本?
拉斐尔

2
我还建议使用本书cs.unibo.it/~asperti/PAPERS/book.pdf “类别,类型和结构”,该书显然已经绝版,但这是从其中一本到pdf的链接作者的主页,所以我认为这是合法的。
John Forkosh

6

学习类别理论是一项巨大的时间投入,是否值得这一问题非常有效。我仍然对此感到困惑,并且我已经知道为什么要学习它。我写:

开始编程时,我喜欢汇编语言,并且集合论与汇编语言相似。类别理论是解决嵌入在主流ZFC集理论中的所有关于逻辑和模型理论的根深蒂固的偏见的替代方法。

这里的想法是使用类别而不是集合或“未指定的位”作为给定类型理论或编程语言的可能语义。为什么要这样做?考虑一个动作和一个观察之间的对偶。不同的观察(或至少它们的时间顺序)不会互相干扰(在量子力学之外),但是对于不同的动作不一定是正确的。与建模观察相比,对于嵌入在集合论中的逻辑的根深蒂固的偏见使其难以建模。


我不相信类别理论和类型理论之间确实存在完美的对应关系,就像这里所说的:

通过语法语义对偶,人们可以将类型理论视为形式论的形式语法语言或演算,相反,可以将类别理论视为为类型论提供语义。

类别理论确实可以为类型理论提供语义(这可能非常有用),但是我怀疑类型理论是否确实提供了一种足够强大的形式语法语言来表达类别理论中进行的所有计算。


在实践中,类别理论的有用性可以通过提出有用的问题和类比来产生。但是范畴理论也可以建议活动和问题,这些活动和问题最终只是对真正重要问题的干扰(浪费时间)。而且您当然可以学习逻辑和类型理论,而无需关心类别理论。


感谢您的想法。您学习类别理论的原因似乎与我的不同;您的兴趣来自纯数学观点,而我想拓宽对类型的理解。不过,很高兴得知其他人对自己的帮助使自己感到困惑,很难找到和应用该类别
gardenhead 16/09/28
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.