类型理论中“正位置”和“负位置”的含义?


Answers:


9

不幸的是,“极性”是类型理论中有点过载的概念。“正位置”和“负位置”所指的极性概念不同于鲍勃在聚焦/偏振方面的讨论。

你的意思

在定义归纳类型时,您将给出一系列规则,这些规则与要定义的类型的操作相对应。例如,您可能会说a Nat

  • 一个值 zero : Nat
  • 一个功能 suc : Nat -> Nat

然后期望Nat包含可以重复应用suc到其他Nats 可以生成的所有值,并包含zero。与这种归纳构造相一致,我们得到了跨Nats 的递归原理,该原理基于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不能称为“归纳”,因为归纳类型是重复应用构造函数而生成的有限构造!

为了解决这个问题,我们限制了归纳类型在类型理论中如何递归的。具体来说,我们阻止它们出现在“负面位置”。这就是您在谈论的极性概念。由此确定位置的极性,

  1. 争论始于积极立场
  2. 每当我们向左箭头时,极性就会翻转

所以X前两个为正,后两个为负

X
Int -> X
X -> Int
(Unit -> X) -> Int

这个想法可以通过使用类别理论来证明,在类别理论中,仅递归为正的归纳类型会产生协变函子。这是如何工作的,为什么有趣的细节有点长。

鲍勃·哈珀的意思

哈珀在他的博客文章中谈论极性的另一种含义。这种极性是指逻辑中的各种连接词如何赋予含义。特别是,我们可以通过两种方式对连接词进行分类

  • 可以通过定义如何引入正连接词来定义正连接词(它们的引入规则)
  • 否定性连接词可以通过定义用法来定义(它们的消除规则)

用编程语言来讲,这很好地捕捉了惰性和严格类型之间的区别。严格类型由其值定义。懒惰的定义是如何在它们上进行模式匹配。为了正确处理此问题,我们定义了一种具有2种主要结构的语言,即构造肯定类型的方法和分解否定类型的“脊柱”。我们可以使用它来将严格和惰性计算合并到一种语言中。

为了更好地理解这一点,我请您参考Bob Harper的书的第38章。


抱歉,@ jozefg,我理解这个概念,但是我不明白如何查看某个类型是否仅出现在正位置。您能否指定更多内容并给出更多示例?
paulotorrens
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.