从线性逻辑视角看按推值调用
1. 引言
线性逻辑(LL)是直觉主义逻辑的一种细化。Girard曾提出将直觉主义逻辑和lambda演算简单自然地翻译到线性逻辑中,从范畴论角度看,这种翻译对应于线性逻辑指数余单子“!”的Kleisli范畴的构建。同时,线性逻辑中还提到另一种对直觉主义公式的翻译,被奇怪地称为“无聊”翻译。后来发现,原始Girard翻译对应lambda演算的按名调用(CBN)求值策略,而“无聊”翻译对应按值调用(CBV)归约策略。
这两种翻译都突出了“!”余单子的Kleisli范畴的重要性。线性逻辑为CBN和CBV提供了一个能忠实解释的通用环境,但线性逻辑证明网的语法复杂,不适合作为编程语言设计的起点,更适合用于分析编程语言的操作和指称性质。因此,寻找能翻译到线性逻辑中,且能嵌入CBN和CBV的lambda演算很有必要。
Levy引入了一种包含CBN和CBV的lambda演算——按推值调用lambda演算。这里提出一种类似的函数演算,称为半极化lambda演算(ΛHP),它能编码CBN和CBV,且与线性逻辑有简单联系。该演算与SFPL的一个子演算同构,与伴随演算和富集效应演算有相似之处。
线性逻辑的指数“!”可通过提升操作将类型A的项转换为类型!A的项,使该项可复制和丢弃,这得益于!A所具备的结构规则。Girard观察到“具备结构规则”这一性质在线性逻辑的⊗和⊕连接符下是保持的。具体来说,“具备结构规则的类型”是“!”连接符的余代数,即“!”的Eilenberg - Moore范畴的对象,该范畴以⊕为余积,⊗为笛卡尔积。这个范畴通常不是笛卡尔闭范畴(CCC),但包含“!”的CCC Kleisli范畴作为全子范畴。
用更大的Eile
超级会员免费看
订阅专栏 解锁全文
2186

被折叠的 条评论
为什么被折叠?



