DisCoPy:Python 中的幺半群范畴软件包
我们介绍了 DisCoPy,这是一个用于计算幺半群类别的开源工具箱。这个库提供了一个直观的语法来定义字符串图表和幺正函子。它的模块化允许在范畴理论的各种应用中有效地实现计算实验,在这些应用中,图已经成为通用语言。作为一个例子,我们首次使用 DisCoPy 在量子硬件上进行自然语言处理。
介绍
弦图是monoidal范畴的图形演算,由Hotz [34]计算机科学和彭罗斯[56]在物理学中,然后被 Joyal和Street正式化[35,36].在Selinger [62],它们已经成为应用范畴理论的标准工具。我们举几个不断增长的应用清单:计算机科学[12,1],量子理论和 ZX-微积分[16,2,19],网络和控制理论[5,6,7],并发性[11]、数据库和知识 代表权[55,10],贝叶斯推理和因果关系[21,13,39],语言学和认知学[14,9],函数式编程 [60]、机器学习和博弈论[29,30].在所有这些应用中,字符串图是语法,结构保持函子用于计 算它们在具体类别中的语义。
有几个现有的带有图形用户界面的校对助手,用于以或多或少自动化的方式重写字符串图 quantomatic 41]和PyZX [40]对于ZX-calculus,globular [8]及其后继https://homotopy.io [59]对于更高的类别,cartographer[65]对于对称幺半群范畴。然而,这些都是独立的工具,它们对图使用不同任务特定的编码,阻止了它们之间以及与应用程序域的软件生态系统的互操作性。
DisCoPy(分布式组合 Python)还不是另一个重写工具,而是一个将图表编译成代码的工具 箱,无论是用于神经网络、张量计算还是量子电路。它为图表提供了直观的 Python 语法,允 许在高抽象层次上可视化和推理计算。Monoidal 函子允许将这些图翻译成具体的计算,与优化 的特定任务库接口。DisCoPy 是一个开源软件包,它包含大量文档和演示笔记本,位于:
https://github.com/oxford-quantum-group/discopy
本文描述了 DisCoPy 的体系结构,重点是从抽象的分类定义到它们在 Python 中的具体实现的转 换。我们假设一些范畴理论的工作知识,并请读者参考[49]和[3]进行介绍。在面向对象编程语言中实现一个类别相当于为它的对象和箭头定义一对类,以及为标识和组合定义一对方 法。当类别空闲时,通过列表连接实现合成,通过空列表实现标识。具体的类别然后可以通过子类化这个自由类别和覆盖身份和组成来定义。这些应该遵守通常的结合性和单位公理,但是 它们不能在 Python 中被正式检查。
从自由类别开始(1节)作为基类,可以通过子类化和添加新方法来增加更多的结构。商范畴可以通过计算范式的方法来实现。例如,幺半群类别(2节)子类类别,具有用于张量积的额 外方法和用于互换范式的额外方法。现在,我们实现了笛卡尔和严格的幺半群类别(3节),因 为它们为DisCoPy: Python函数中实现的具体类别提供了语法(附录A)和numpy [69]张量(节4).DisCoPy 的开发最初是由在量子硬件上实现自然语言处理推动的。因此,我们实现了量子电 路 5)作为刚性幺半群范畴的子类,具有额外的方法
对于作为数值张量的计算以及与 t|ket> 编译器的接口[64]. 我们希望这个工具箱将被证明对应用范畴理论社区有用,并计划在未来添加更多的分类工具。
文档: