如何激发关系参数化?


15

是否有某种自然的方式来理解参数多态性的关系语义的本质?

我刚刚开始阅读有关关系参数性的概念,这是约翰·雷诺兹(John Reynolds)的“类型,抽象和参数多态性”,但我在理解关系语义是如何激发动机方面遇到了麻烦。设置语义对我来说很有意义,我意识到设置语义不足以描述参数多态性,但是跃向关系语义似乎是魔术,完全是天马行空。

是否有某种方式可以按照“假设基本类型和术语之间的关系,然后对派生术语的解释只是……这种编程语言中……这样的自然事物之间的自然关系”的方式进行解释。“?还是其他一些自然的解释?

Answers:


22

嗯,关系参数化是约翰·雷诺兹(John Reynolds)提出的最重要的思想之一,因此看起来像魔术并不令人惊讶。这是关于他可能如何发明的童话。

假设您正在尝试将某些函数(标识,映射,折叠,列表反转)的作用“形式化为多种类型”的想法正式化,即,您对参数多态性有一些直观的想法,并且已经制定了一些规则用于创建这样的图,即多态λ微积分或其早期变体。您会注意到,朴素的集合论语义不起作用。

例如,我们盯着类型

X:Type.XX,
这应该只包含恒等映射,但幼稚集合论语义允许不期望的功能,诸如
λX:Type.λa:X.if (X={0,1}) then 0 else a.
为了消除这种情况,我们需要对函数施加一些其他条件。例如,我们可以尝试一些领域理论:装备每套X与偏序X,并要求所有的功能是单调。但这并不能完全消除它,因为上述不需要的函数要么是常量,要么是恒等,取决于X,并且它们是单调映射。

偏序是相对的,传递的和反对称的。我们可以尝试改变结构,例如,我们可以尝试使用严格的偏序,线性顺序,等价关系或对称关系。但是,在每种情况下,都会出现一些不需要的示例。例如,对称关系消除了我们不需要的功能,但允许使用其他多余的功能(运动)。

然后您会注意到两件事:

  1. 的例子是不会受到限制,你在地方部分订单使用任何关系
  2. 对于您看到的每个特定的不想要的示例,您都可以找到一个消除它的关系,但是没有一个消除所有它们的单一关系。

因此,您有一个绝妙的想法,即所需的功能是保留所有关系的功能,并且关系模型诞生了。


1
谢谢安德烈。这就提出了另一个问题:是否有任何较小的关系子类可以消除所有不需要的示例?
汤姆·埃利斯

好吧,我们可能可以限制关系的逻辑复杂性,因为我们只需要担心可计算映射。但是我还没有足够的专家来回答。我召唤@UdayReddy。
Andrej Bauer

2
@TomEllis。是的,在特殊情况下,关系的子类可能就足够了。最直接的特殊情况是,如果所有操作都是一阶的,则函数(总的单值关系)就足够了。对于场,部分同构就足够了。回想一下雷诺的主要例子是复数领域,他在贝塞尔和笛卡尔之间的逻辑关系是部分同构。
Uday Reddy 2013年

4
@AndrejBauer。需要注意的是具有一个参数元素,但是临时元素太多,无法形成一组!因此,有很多工作要做。关于雷诺如何获得参数化的另一种理论出现在我们即将出版的“雷诺的本质”中。X.XX
Uday Reddy 2013年

您表明,如果将类型解释为集合,则将存在不需要的功能。关系不一样吗?\X:Type. \a:X. if X = {(0,0), (1,0), (0,1), (1,1)} then 0 else a
Jules 2014年

11

问题的答案确实存在于雷诺的寓言中(第1节)。让我尝试为您解释。

在将类型视为抽象的语言或形式主义中,类型变量可以代表任何抽象概念。我们不认为类型是通过某种类型术语的语法或某种类型的运算符的固定集合生成的,也不是我们可以测试两种类型的相等性等。在这种语言中,如果函数涉及类型变量,则唯一函数可以对该类型的值执行的操作是改组已给出的值。它不能发明该类型的新值,因为它不“知道”该类型是什么!这就是参数化的直观思想。

然后,雷诺(Reynolds)考虑了如何从数学上捕捉这个直观的想法,并注意到以下原则。假设我们实例化类型变量,说,两种不同的具体类型,说',在不同的实例,并保留在我们的脑海一些信件[R '的两个具体类型之间。然后,我们可以设想,在一个实例中,我们提供了一个值X 给功能,并且在其他情况下,一个相应的值X '' (其中,“对应”是指XtAAR:AAxAxAx R关联。然后,由于该函数对我们为 t提供的类型或该类型的值一无所知,因此必须以完全相同的方式处理 x x '。因此,我们从函数中获得的结果应该再次与我们一直牢记的关系 R相对应,即,元素 x出现在一个实例的结果中的任何地方,元素 x '必须出现在另一实例的结果中。因此,参数多态函数应保留类型变量的可能实例之间的所有可能关系xRtxxRxx

保持通信的这种想法并不新鲜。数学家对此已经了解了很长时间。首先,他们认为多态函数应该在类型实例之间保留同构。注意,同构意味着一些一对一对应的想法。显然,同构最初被称为“同构”。然后他们意识到我们现在所说的“同态”,即一些多对一对应的想法,也将被保留。这种保存在范畴论中被称为自然变换。但是,如果我们认真考虑一下,就会意识到同构的保存是完全不令人满意的。类型A 'AA我们提到的是完全任意的。如果我们选择作为一个'一个'一个,我们应该得到相同的属性。那么,为什么不对称概念“多对一对应”在形成对称性质时起着作用呢?因此,雷诺兹迈出了从同构到逻辑关系(这是多对多对应关系)的概括的重要一步。这种概括的全部影响尚未完全理解。但是潜在的直觉是相当清楚的。AAAA

这里还有另一种微妙之处。尽管类型变量的实例化可以任意变化,但常量类型应保持固定。因此,当我们为具有变量类型和常量类型的类型表达式制定关系对应关系时,无论类型变量出现在何处,选择的关系都应使用;常量类型K出现于何处,则应使用恒等式I K。例如,对于类型的关系表达式× Ñ Ñ × 将是- [R × 本人Ñ 本人RIKKt×IntInt×t。因此,如果f是这种类型的函数,则应将一对xn和一个相关 x 'n映射到某个对mx和相关m x 'R×IIntIInt×Rf(x,n)(x,n)(m,x)(m,x)。请注意,我们必须通过在两种情况下为常量类型放置相同的值来测试函数,并且保证在输出中为常量类型获取相同的值。因此,在为类型表达式建立关系对应关系时,我们应确保通过插入身份关系(表示那些类型将是一致的想法)来获得身份关系,即。这是至关重要的身份扩展F(IA1,,IAn)=IF(A1,,An) 属性。

tttIntInttt×tt×t(tt)t(tt)(tt)


最后,我的召唤成功了!
Andrej Bauer 2013年

2
@AndrejBauer。嗯,我实际上没有接到传票。@ UdayReddy咒语可能仅在评论开始时起作用。无论如何,都不需要传票。“参数”是我的过滤器之一。
Uday Reddy 2013年

“该函数只能对该类型的值进行洗牌处理”-实际上,除了进行混洗之外,该函数还可以擦除给定值(减弱)并复制(收缩)它。由于这些操作始终可用,因此该值并不像看起来那样抽象。
卢卡斯路易斯

@ŁukaszLew,你是对的。我不知道这是否可以描述为“抽象”的丧失。
Uday Reddy '18年

@UdayReddy我已经删除了该表扬,并作为一个独立的问题进行了询问
卢卡斯卢

3

ω

此外,试图标识具有相同扩展行为的功能,从而导致等价关系也很诱人。如果我们排除“未定义”函数,则该关系是局部的,即对于某些格式正确的输入“循环”的函数。

PER模型是对此的概括。

看这些模型的另一种方式是同伦类型理论的简单集合模型的(非常)特殊情况。在该框架中,类型被解释为(的一般化),具有关系的集合以及这些关系之间的关系等。在最低层次上,我们仅具有PER模型。

最后,建设性数学领域出现了相关概念的出现,特别是Bishop的集合论涉及通过给出元素和明确的相等关系来描述集合,该关系必须是等价的。很自然地期望一些构造数学原理会进入类型理论。


1
嗯,但是PER模型不是很好,可以包含未授权的多态函数。人们必须通过关系PER模型来摆脱它们。
Andrej Bauer

我仍然觉得它激励了关系方法。
科迪

@科迪 我同意。我认为PER是将关系建立到“集合论”中的一种方式,这样我们就可以首先获得强制性模型。感谢您提到同伦类型理论。我不知道它有类似的想法。
Uday Reddy 2013年

@UdayReddy:想法很相似!特别地,可以通过单价相等的角度来理解将抽象类型与依赖关系联系在一起的“兼容的依赖实现”的思想。
2013年
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.