返回

文章详情

行动范畴

Hacker News2026年7月14日 11:05

之前:双范畴中的Kan扩展。在编程中,行动范畴在光学中扮演着核心角色:透镜、棱镜、遍历等。为了理解行动范畴,我们先从单元范畴的定义开始。 单元范畴 是带有张量积的范畴。张量积是一个函子。我们假设该乘积是可结合和单位的——至同构。它意味着有一个可逆的结合器:在所有三个论元中都是自然的。我们还有一个单位对象和两个(可逆的,自然的)单位器:为了更好地理解它,我们可以尝试在Haskell中建模一个单元范畴。我们通过张量积的类型来参数化它,ten,我们希望它是一个双函子:定义Hask的子范畴的标准方法是通过施加约束来限制对象的类型。这种限制有一个特殊的类型,称为约束:这种约束的常见例子是类型类。例如,单元将限制范畴的对象为单元。(原则上,我们还应该限制箭头的类型,这里限制为单元态射。)我们可以将单元范畴的单位指定为一个关联类型(由ten参数化): type Unit ten :: Type 单元应为该范畴的对象,因此它应满足约束。我们可以在定义中将其编码为前提:obj (Unit ten)。这会导致循环性,我们可以通过使用语言修饰符UndecidableSuperClasses来克服它:最后,我们可以添加结合器和单位器(及其逆):注意这些函数类型中的obj约束和张量的中缀表示。让我们算出几个示例。最简单的是所有类型的范畴,其中张量为笛卡尔积。我们使用空类定义Hask,并使所有对象成为其实例:类似地,我们可以定义一个使用Either作为张量积的单元范畴,或者使用单元作为对象约束。 行动范畴 是一个支持单元范畴作用的范畴。你可以把它看作是通过单元范畴中的对象“乘以”或“缩放”此范畴的对象。可以将(左)作用定义为从乘积范畴到的函子;或者在柯里化之后,作为从到自函子范畴的函子:一致性条件是可逆的自然变换,它们将作用与张量积及其单位关联起来:此作用在两个论元中都是函子的,因此我们的Haskell翻译为了简单,将其确定为双函子。(文本函子作用也是可能的。从范畴的角度来看,它将对应于使用作为单元范畴。)另一个简化的假设是,该作用唯一确定张量积,在这里编码为功能依赖 act -> ten。行动范畴最简单的示例是笛卡尔积的自作用。在这里,单元范畴自身对自身的作用: 单元函子 使用相同单元范畴进行作用的行动范畴形成一个范畴。该范畴中的态射是(严格的)单元函子。这些函子将一种作用映射到另一种:在Haskell中,我们可以将其建模为:实际上,行动范畴形成一个双范畴,保留作用的自然变换在单元函子之间起作用。这是一个非平凡的行动范畴之间单元函子的有趣示例:Haskell代码可在此处获得。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡