利用范畴理论框架的单子自然发生


18

今天,亨宁·科斯坦(Henning Kerstan)的演讲(“概率转移系统的轨迹语义”)使我第一次遇到了范畴论。他建立了一个理论框架,以一般方式描述概率过渡系统及其行为,即具有无穷无穷的状态集和不同的迹线概念。为此,他经历了几层抽象,最后得出了monad的概念,并将其与测度理论相结合来构建所需的模型。

最后,他花了45分钟时间(大致)构建了一个框架来描述他最初在5分钟内解释的概念。我欣赏这种方法的优点(它确实很好地概括了痕迹的不同概念),但仍然使我感到奇怪。

我很难理解一个monad到底什么,以及一个概念在应用程序中(在理论上和实践上)多么有用。就结果而言,真的值得付出努力吗?

因此这个问题:

是否存在可以应用单子抽象概念的自然问题(就CS而言),并且可以帮助(甚至起到工具作用)获得期望的结果(完全或以比没有时更好的方式)?


2
用纯功能编程语言编码状态?这是很自然的CS问题吗?
斯特凡希门尼斯

2
我最常看到的示例是使用函数式语言处理效果的更一般的问题:从理论上讲,效果的单子很性感,而对于实践,Haskell的IO单子非常方便。
jmad 2012年

与经典的相对轻量级的语义相比,优点是什么?FP单子甚至与范畴论一样吗?质疑一个问题。
拉斐尔

有关使用类别理论后的更一般性问题,请参见cstheory.SE上的此问题
拉斐尔

Answers:


6

询问monad的发生是否自然与询问一个群体(就群体理论而言)是否自然相似。一旦将某种形式正式化(在本例中为endofunctor),它就可以满足成为monad的公理。如果它确实满足公理,那么人们将免费获得许多技术设备。

Moggi的论文“计算和单子”的概念在很大程度上解决了这一难题:单子非常自然,对于以统一的方式描述计算效果非常有用。瓦德勒其他人则通过使用函子是数据类型构造函数的联系来翻译这些概念,以处理函数式编程语言中的计算效果。这增加了蛋糕上的糖霜。FP monad允许处理诸如IO之类的计算效果,如果没有这些效果,将是极其不自然的。Monads启发了相关的有用概念,例如箭头和成语,它们对于构造功能程序也非常有用。请参阅Wadler链接以获取参考。FP monad与类别理论monad相同,因为要使FP monad工作相同的方程式,必须保持---编译器依靠这些方程。通常,单声道的表示形式有所不同(不同但等效的运算和方程式),但这只是表面上的差异。

仅举一个例子,巴特·雅各布斯Bart Jacobs)的大量作品都使用了monad。大量工作来自于余数,余数是系统的一般理论。雅各布斯(许多)对这一领域的贡献之一是对基于单子的系统(称为结余)的跟踪语义通用概念的发展。有人可能会说跟踪语义的概念是自然的:系统的语义是什么?可以观察到的动作列表!

了解单子的一种方法是使用单子在Haskell中进行首次编程。然后找到许多可用的优秀教程之一(通过Google)。从编程角度开始,然后从一些基本类别理论开始,转向理论方面。

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.