基于朴素集理论的类型系统


11

据我了解,在计算机科学中,由于罗素悖论之类的原因,数据类型不是基于集合论的,但是像在现实世界中的编程语言中一样,我们不能将复杂的数据类型表示为“不包含自身的集合”,说实际上,类型是其成员的无限集合,其中实例成员资格由该类型/集合固有的功能数量(某些属性,方法的存在)定义?如果没有,那反例是什么?


1
罗素的悖论与它没有直接关系。
安德烈·鲍尔

Answers:


11

避免类型语义中的集合的主要原因是典型的编程语言允许我们定义任意递归函数。因此,无论类型的含义是什么,它都必须具有定点属性。具有此类属性的唯一集合是单例集合。

更准确地说,类型为τ的递归定义值(其中通常τ是函数类型)由定点方程v = Φ v )定义,其中Φ τ τ可以是任何程序。如果将τ解释为集合T,那么我们将期望每个f T T具有一个固定点。但是具有此属性的唯一集合T是单例。vττv=Φ(v)Φ:τττTf:TTT

当然,您还可以意识到,罪魁祸首是经典逻辑。如果您使用直觉集合论,则可以假设存在许多具有定点性质的集合。实际上,这已用于给出编程语言的语义,例如

亚历克斯·辛普森(Alex Simpson),《直觉集合论模型中递归类型的计算充分性》,《纯逻辑与应用逻辑》(Annals of Pure and Applied Logic)年刊130:207-275,2004。


7

语义子类型化基于类型的基础集合理论解释,其中子类型化是子集。我相信,最初的工作是Castagna在XML处理语言CDuce的上下文中完成的。类型对应于XML文档集。这些想法,至今已被重新应用演算和一个微积分的对象和类π


1
有Castagna的前身。很久以前,人们已经使用子集关系对PER模型中的子类型进行建模。有一个类型对应于部分对等关系(PER),子类型化只是这些关系的包含。
安德烈·鲍尔

4

除了少数例外(Dave Clarke引用了一个例外),类型的简单集合论语义很难使用。原因是数据抽象在集合论语义上不能很好地发挥作用。

基本问题是最容易看到总共有态类型纯粹功能的语言,并考虑多态型α.ααU

[[α.αα]]=ΠXU.XX

UUXXXüα

ααα


尼尔,我认为这个答案没有道理。如果语言的语义是标准的F样式语义,则编译器可以根据类型系统很好地进行优化。如果语义是集合理论的语义,那么优化将是不合理的。您没有为类型使用哪种模型。
山姆·托宾·霍斯塔特

山姆,我不明白你的意思:这听起来像你完全同意我的观点!标准的集合论语义不能证明该类型的唯一居民就是身份,因此您需要不同的语义。
Neel Krishnaswami 2012年

1
@Neel:即使我们远离场景,您描述的问题仍然存在。解决方案不是用其他方法更改集合的类别,而是以不同的方式对参数进行建模。也就是说,正如我确定的那样,必须使用关系参数。但是,如果我没有记错的话,事情也会成组地解决。集的“唯一”问题是缺少固定点(在递归值和递归类型的级别上)。
安德烈·鲍尔

1
啊,我想我明白为什么我让您和山姆感到困惑!我当然不是要暗示使用幼稚的集理论模型是不合理的,只是该模型通常会给出无用的答案-这就是为什么我说“很难使用”而不是“错误”。当然,您可以使用集合来构建有用的模型(即,建立关系模型),但是那样我们就不再以问题中建议的方式来解释类型即集合。(此外,如您所知,对于强制性多态性,没有幼稚的模型,但是参数性仍然对谓语有意义。)
Neel Krishnaswami 2012年

1
我认为您的意思是语义之间的对应关系-集合论的语义不适用于System F风格的多态性,因为它具有无法表达的居民。但这并不是针对集合论语义的论点,而只是声明我们的语义应该一致。如果我们的语言可以让我们表达您正在谈论的功能(例如Typed Racket所做的事情),那么我们可能需要集合理论的语义。
Sam Tobin-Hochstadt
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.