在类型理论的背景下,“处于正面位置”和“处于负面位置”是什么意思?
我从鲍勃·哈珀(Bob Harper)的博客文章中唯一了解到的是类型理论中的极性与逻辑上的极性之间存在联系,但我不知道这种联系是什么。
在类型理论的背景下,“处于正面位置”和“处于负面位置”是什么意思?
我从鲍勃·哈珀(Bob Harper)的博客文章中唯一了解到的是类型理论中的极性与逻辑上的极性之间存在联系,但我不知道这种联系是什么。
Answers:
不幸的是,“极性”是类型理论中有点过载的概念。“正位置”和“负位置”所指的极性概念不同于鲍勃在聚焦/偏振方面的讨论。
在定义归纳类型时,您将给出一系列规则,这些规则与要定义的类型的操作相对应。例如,您可能会说a Nat
与
zero : Nat
suc : Nat -> Nat
然后期望Nat
包含可以重复应用suc
到其他Nat
s 可以生成的所有值,并包含zero
。与这种归纳构造相一致,我们得到了跨Nat
s 的递归原理,该原理基于Nat
那些构造函数生成的任何事实。
rec : A -> (A -> A) -> Nat -> A
以便
rec Z S zero = zero
rec Z S (suc n) = S (rec Z S n)
但是,对于我们可以写为规则的内容有一些限制。否则,我们可以写下一系列无法证明递归原理的规则。考虑D
具有一个构造函数的“归纳类型”
d : (D -> D) -> D
这里没有理智的递归原理。并且有充分的理由!如果我们具有某种递归原理,则可以使用它来编码自我应用程序的版本,并以此来编码非终止。这意味着D
不能称为“归纳”,因为归纳类型是重复应用构造函数而生成的有限构造!
为了解决这个问题,我们限制了归纳类型在类型理论中如何递归的。具体来说,我们阻止它们出现在“负面位置”。这就是您在谈论的极性概念。由此确定位置的极性,
所以X
前两个为正,后两个为负
X
Int -> X
X -> Int
(Unit -> X) -> Int
这个想法可以通过使用类别理论来证明,在类别理论中,仅递归为正的归纳类型会产生协变函子。这是如何工作的,为什么有趣的细节有点长。
哈珀在他的博客文章中谈论极性的另一种含义。这种极性是指逻辑中的各种连接词如何赋予含义。特别是,我们可以通过两种方式对连接词进行分类
用编程语言来讲,这很好地捕捉了惰性和严格类型之间的区别。严格类型由其值定义。懒惰的定义是如何在它们上进行模式匹配。为了正确处理此问题,我们定义了一种具有2种主要结构的语言,即构造肯定类型的方法和分解否定类型的“脊柱”。我们可以使用它来将严格和惰性计算合并到一种语言中。
为了更好地理解这一点,我请您参考Bob Harper的书的第38章。