类别理论在TCS中的扎实应用?


103

我一直在学习一些类别理论。当然,这是另一种看待事物的方式。(对于未曾看过它的人,这是一个非常粗略的总结:类别理论提供了仅根据对象之间的功能关系来表达各种数学行为的方式。例如,两组的笛卡尔积之类的东西完全按照其他函数的行为方式,而不是集合中的元素是什么。)

我有些模糊的理解,范畴论在编程语言/逻辑(“理论B”)方面很有用,我想知道算法和复杂性(“理论A”)能从中受益。但是,如果我知道理论B中类别理论的某些可靠应用,那可能会帮助我起步。(我已经隐含地假设,到目前为止,理论A中没有发现任何应用,但是如果您有其中一些,那甚至对我来说更好!)

我所说的“可靠的申请”是:

(1)应用程序非常依赖于类别理论,以至于不使用机器就很难实现。

(2)应用程序调用至少一个类别理论的非平凡定理(例如,Yoneda引理)。

(1)可能暗示(2),但是我想确保它们是“真实的”应用程序。

虽然我确实有一些“理论B”背景,但已经有一段时间了,因此,不加任何术语都将不胜感激。

(根据我得到的答案的种类,我可能会在以后将这个问题转换为社区Wiki。但是我确实希望有良好的应用程序,并且要有很好的解释,所以似乎不给某些答卷人奖励是可耻的。)

Answers:


79

我可以想到一个实例,其中类别理论被直接“应用”以解决编程语言中的一个开放问题:Thorsten Altenkirch,Peter Dybjer,Martin Hofmann和Phil Scott,“通过对具有共同积的Lambda微积分求值进行归一化”。从他们的摘要中:“我们解决具有强二进制和的简单类型Lambda演算的决策问题,等效于具有二进制联积的自由笛卡尔封闭类别的词问题。我们的方法基于称为'通过评估进行归一化'的语义技术,涉及将语法解释转化为合适的捆模型,并从中提取合适的独特范式。”

不过,总的来说,我认为类别理论通常不用于证明编程语言中的深层定理(没有那么多定理),而是提供了通常有用的概念框架(例如,在上文中, (预)捆束语义的想法)。

一个重要的历史例子是Eugenio Moggi的建议,即monad(在范畴论中是基本的和普遍存在的)的概念可以用作编程语言(例如状态,非确定性)副作用的语义解释的一部分。这也激发了对编程语言语法的思考,例如直接导致Haskell中的“ Monad类型类”(用于封装效果)。

最近(过去十年),从单子与代数理论之间的旧联系(由范畴理论家在60年代建立)的观点出发,重新审视了单子效应的这种解释:参见马丁·海兰德和约翰·鲍尔的,“通用代数的类别理论理解:Lawvere理论和Monads”。想法是效果的单子视图与效果的(在某些方面更具吸引力)代数视图兼容,其中效果(例如存储)可以根据操作(例如“查找”和“更新”)进行解释。和相关的方程式(例如,更新的幂等)。保罗·安德烈·梅里斯(Paul-AndréMelliès)就此建立了最近的论文,西格条件满足计算效果”,它也严重依赖于来自“更高类别理论”的思想(例如,“ Yoneda结构”概念是一种组织前期语义的方式)。

另一类相关的示例来自线性逻辑。在让·伊夫·吉拉德(Jean-Yves Girard)于80年代提出(旨在更好地理解构造逻辑)之后不久,便建立了与范畴论的牢固联系。有关此连接的某些解释,请参见John Baez和Mike Stay的“物理,拓扑,逻辑和计算:Rosetta Stone”

最后,如果不参考sigfpe的启发性博客“无限邻居”,这个答案是不完整的。特别是,您可以查看“应用于Haskell的某些类别理论的偏序”


3
嗨,诺姆,我认为在回答这个问题后,您的代表足够高,可以添加链接!
Suresh Venkat 2010年

我和新手一样面临同样的问题。我只是在等待我的答案被投票,然后我输入了链接。您可以做同样的事情……
Andrej Bauer 2010年

10
谢谢!对不起,超链接限制...希望有某种方式告诉系统“哟,我是Noam Zeilberger,我是合法的人”
Ryan Williams 2010年

添加了链接!是的,这是完全合理的政策,有时会遇到麻烦。
Noam Zeilberger 2010年

46

量子计算

一个非常有趣的领域是将各种单曲面类别应用于量子计算。有人可能会说这也是物理学,但是这项工作是由计算机科学部门的人员完成的。该领域的早期论文是Samson Abramsky和Bob Coecke撰写的“量子协议分类语义”AbramskyCoecke等最近发表的许多论文继续朝着这个方向努力。

在这项工作中,将量子协议公理化为(某些类型的)紧凑封闭类。这样的类别在字符串(和功能区)图表方面具有优美的图形语言。类别中的方程式对应于弦的某些运动,例如拉直缠结但未打结的弦,这又对应于量子力学中有意义的事物,例如量子隐形传态。

对于通常涉及非常低级别的计算的内容,分类方法提供了高级的逻辑视图。

系统理论

FF

图变换

G1,G2Pe1:PG1e2:PG2G1G2G1G2P

(L,K,R)LRKl:KLr:KRLKRKdKDdlGdk

编程语言(通过MathOverflow)

范畴论在程序设计语言和程序设计语言理论的设计中已经有许多应用。可以在MathOverflow上找到广泛的答案。https://mathoverflow.net/questions/3721/programming-languages-based-on-category-theoryhttps://mathoverflow.net/questions/4235/relating-category-theory-to-programming-language-theory

二部曲-过程计算

最后,还有米尔纳的传记,这是一个用于描述和推理交互代理系统的通用框架。可以将其视为推理过程代数及其结构和行为理论的通用框架。该方法也基于推出。


35

我已经隐含地假设,到目前为止,理论A中没有发现任何应用程序,但是如果您有其中一些应用程序,那对我来说甚至更好!

  • 我的理解是,Joyal的物种理论在枚举组合学中得到了相对广泛的应用,作为生成函数的概括,该函数除了告诉您有多少事物外,还告诉您如何对事物进行置换。

  • 皮蓬格(Pippenger)已应用Stone对偶性来关联常规语言和半群变体。尚德尔介绍了拓扑自动机,将这些思想应用于量子自动,概率自动和普通自动机的统一描述(和证明!)。

  • 罗兰·巴克豪斯(Roland Backhouse)通过Galois与热带半环的联系给出了贪婪算法的抽象特征。

更具推测性的是,诺姆提到了捆模型。这些抽象地描述了逻辑关系的句法技术,这可能是语义学中最强大的技术之一。我们主要使用它们来证明不可表达性和一致性结果,但是对于复杂性理论家来说应该是很有趣的,因为它是实用的非自然(在Razborov / Rudich的意义上)证明技术的一个很好的例子。(但是,逻辑关系通常经过精心设计以确保它们相对化-作为语言设计师,我们希望能够向程序员保证函数调用是黑盒!)

编辑:我将继续猜测,应瑞安的要求。据我了解,自然证明大致上就是试图定义电路结构在各种敏感条件下的感应不变式。当您尝试定义由lambda-演算术语归纳维护的不变式时(例如,证明类型安全性),类似的想法在编程语言中也很常见(毫无疑问)。1个

ABABA

ABAB。请注意,没有单个归纳不变式-我们通过递归输入的结构来定义整个不变式家族,并使用其他方式来表明所有术语都位于这些不变式之内。从理论上讲,这是一种非常强大的技术,这就是为什么它可以让您证明一致性结果的原因。

与滑轮的连接源于以下事实:我们经常需要对开放术语(即具有自由变量的术语)进行推理,因此需要区分由于错误而卡住和由于需要减少变量而卡住。滑轮是通过将lambda演算的约简定义为以其项为对象的类别(即归因于约简的偏序)定义态素,然后将该类别的函子考虑为集合(即谓词)而产生的。吉恩·加里尔(Jean Gallier)在2000年代初就此发表了一些不错的论文,但是我怀疑它们是否可读,除非您已经吸收了大量的λ演算。


1
你能给《后院》论文提个参考吗?他的标题中有几处提到“ Galois连接”,但是快速搜索并没有清楚地发现哪一项与贪婪算法有关(而且我认为我对这一领域并不熟悉,无法详细了解细节和数据。轻松找出哪一个与贪婪算法有关。谢谢!
约书亚·格罗肖

1
除了约书亚的问题外,我还对捆模型和逻辑关系与自然证明的关系感兴趣。
瑞安·威廉姆斯

回复:石对偶,有关更激动人心的最新著作,请参阅麦· 格克Mai Gehrke)的“石对偶和代数上可识别的语言”(math.ru.nl/~mgehrke/Ge09.pdf)和Gehrke,Grigorieff和Pin的“一种识别拓扑的方法” “(math.ru.nl/~mgehrke/GGP10.pdf
诺姆Zeilberger

回复:盖里尔,你指的是90年代末(如sciencedirect.com/science/article/pii/0304397594002800?)
Blaisorblade

24

有很多示例,首先想到的是Alex Simpson使用类别理论来证明编程语言的属性,请参见“ 直觉集合论模型中递归类型的计算充分性 ”,《纯粹逻辑与应用逻辑》。 ,130:207-275,2004。尽管标题提到了集合论,但该技术还是范畴论的。有关更多示例,请参见Alex的主页。


感谢您的推荐,但请注意,我没有问:“使用类别理论获得了什么结果,否则无法获得?”
瑞安·威廉姆斯

没错,您没有。我编辑了答案。
Andrej Bauer'9

11

我认为您在询问有关适用性的两个问题,分别是A型和B型。

如您所注意到的,类别理论在B类主题上有许多实质性的应用:编程语言的语义(monad,笛卡尔封闭类别),逻辑和可证明性(拓扑,线性逻辑的变体)。

但是,理论A(算法或复杂性)似乎没有什么实质性的应用。

基本对象中有一些用途,例如描述自动机或组合对象的类别(图形,序列,排列等)。但是这些似乎并不能说明对语言理论或算法的更深入的了解。

从推测上讲,这可能与当前的范畴论策略和理论A学科不匹配:

  • 范畴理论的中心策略是处理平等(事物相同时,事物不同时以及它们如何相互映射)。

  • 对于复杂性理论,主要策略是缩减和设置界限(有人会认为缩减就像箭一样,但我认为除了这种表面相似性之外,没有研究任何东西)。

  • 对于算法,除了临时的巧妙组合思维之外,没有其他总体策略。对于某些领域,我希望可以进行富有成果的探索(代数算法?),但我还没有看到。


2
事实证明,归约与Goedel的Dialectica解释的分类重构和线性逻辑的语义有关。请参阅安德烈亚斯·布拉斯(Andreas Blass)的“问题与解答-线性逻辑,复杂性理论和集合论中出现的类别”。math.lsa.umich.edu/~ablass/qa.pdf
Neel Krishnaswami

3

我想到的“ TCS-A”应用是Joyal的组合种类(将幂级数泛化为函子,以便描述诸如树,集合,多集等组合对象),以及使用关系式,概率Hoare逻辑(Easycrypt,Certicrypt,Andreas Lochbihler的著作)。尽管类别没有直接出现在后者中,但它们在基础逻辑(例如单子)的发展中起了重要作用。

PS:因为在第一个答案中提到了我的名字:托马斯·斯特雷彻(Thomas Streicher)和我本人在马丁·洛夫(Martin-Löf)的类型理论中使用类群纤维来显示某个公理的不可推导性也可以被视为类别理论的“坚实”使用(尽管逻辑或“ TCS-B”)。


3

最近出版的《构成中的七个草图》一书列出了类别理论在计算机科学和工程中的几种应用。值得注意的是有关数据库的一章,作者在其中描述了基于分类模型的查询,组合,迁移和发展数据库。作者进一步研究了这一点,并基于他们的数据库分类模型开发了分类查询语言(CQL)和集成开发环境(IDE)。

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.