集合和类型之间的语义区别到底是什么?


33

编辑:我现在已经问过有关类别和集合之间差异类似问题。

每当我读到类型理论(这诚然是相当非正式的),我无法真正了解它集理论的不同之处,具体

我知道说“ x属于一个集合X”和“ x是类型X”之间存在概念上的区别,因为从直觉上讲,集合只是对象的集合,而类型具有某些“属性”。尽管如此,集合通常也根据属性进行定义,如果确实如此,那么我将很难理解这种区别的重要性。

所以在最具体的方式可能,究竟是什么暗示 关于x的说,它的类型是,比说,这是集合的元素?TS

(您可以选择任何类型和设置以使比较最清晰)。


您使用/听到“类型”一词的环境是什么?顾名思义,它是编程语言吗?因为我认为以下答案是相反的。
einpoklum-恢复莫妮卡

@einpoklum,我不确定100%如何描述“上下文”是什么,但基本上是这样的:我试图理解类型在数学中的作用。从本质上讲,集合(如我所见)具有两个上下文:首先,它们被用作日常数学运算的对象的集合。其次,它们是公理化集合理论中的对象,在其中它们通常被用作非常奇怪但有用的工具通过让集合对应于函数和数字等来讨论一阶逻辑中的数学。我主要对第一意义上的“集合”与“类型”之间的关系感兴趣。
user56834 '18

哪种类型的作用?您在数学论文/教科书中看到的类型,还是计算机程序中的变量类型?
einpoklum-恢复莫妮卡

1
@einpoklum,这个问题是关于数学论文中的问题。(尽管实际上我也很想知道数学类型和编程语言类型之间的根本区别(如果有的话。但这不是这个问题的意思))。
user56834 '18

Answers:


29

要了解集合和类型之间的区别,必须先回到“集合”和“构造”的数学思想,然后看看集合和类型如何将它们数学化

关于什么是数学,存在多种可能性。其中两个是:

  1. 我们认为数学是一种根据某些规则构造数学对象的活动(将几何学视为使用尺子和罗盘构造点,线和圆的活动)。因此,数学对象根据其构造方式进行组织,并且存在不同类型的构造。数学对象总是以某种独特的方式构造的,这决定了它的独特类型。

  2. 我们将数学视为充满了预先存在的数学对象(考虑给定的几何平面)的广阔宇宙。我们发现,分析并考虑了这些对象(我们观察到平面中存在点,线和圆)。我们收集他们入。通常,我们收集具有共同点的元素(例如,所有通过给定点的线),但是原则上一组可以将任意选择的对象组合在一起。集由其元素指定,并且仅由其元素指定。数学对象可能属于许多集合。

我们并不是说上述可能性是仅有的两种,或者其中任何一种都完全描述了数学是什么。尽管如此,每个人的观点都可以作为通用数学理论的有用起点,该理论有用地描述了广泛的数学活动。

很自然地接受类型并想象我们可以使用的规则构造的所有事物的集合。这是扩展的,这是不是本身。例如,以下两种类型具有不同的构造规则,但是它们具有相同的扩展名:ŤŤŤ Ť

  1. 对的类型,其中被构造为自然数,被构造为证明是大于的偶质数的证明。(n,pñpñ3

  2. 对的类型,其中被构造为自然数,被构造为证明的奇数质数小于的证明。(m,qq2

是的,这些都是愚蠢的琐碎示例,但要点是:两种类型的扩展名都没有,但是它们的构造规则不同。相反,的集合 和 相等的,因为它们具有相同的元件。

{nññ 比...还要大素数 3}
{ñ is an odd prime smaller than 2}

请注意,类型理论与语法无关。它是构造的数学理论,就像集合论是集合的数学理论一样。碰巧的是类型理论的通常表现形式强调语法,因此人们最终认为类型理论就是语法。不是这种情况。将数学对象(构造)与表示它的句法表达(术语前项)相混淆是一个基本的类别错误,长期以来一直困扰着逻辑学家,但现在已经不复存在了。


1
美丽,谢谢!您能澄清一个细节吗?当列出扩展名都为空的两种类型时,您会说“其元素为... 的类型”。纯粹出于我的澄清,这是100%正确的说法吗?您在上一句话中说过,类型不是集合,因此似乎不能包含“元素”(我将其与集合关联)。本质上,您现在编写它的方式就像是根据作为其扩展集的Type定义Type一样。如果您不打算这样做,是否可以更准确地重新定义它们,以便将它们的想法描述为类型?
user56834 '18

类型的扩展是一个非常有用的概念,并且由于它是一种集合,因此我们可以说“类型的扩展的元素”。这很麻烦,因此通常缩写为“一种类型的元素”。我删除了措辞以减少混淆的可能性,但是请注意,这是常用术语。
安德烈·鲍尔

谢谢,这澄清了。因此,要跟进,说以下内容是否正确?说一个对象是“类型T”的意思与该对象是“ T的扩展的元素”的意思相同,因此从类型到集合都有自然的排斥。但是相反并不成立,因为任何集合都可以多种方式构造。从本质上讲,从特定对象的角度来看,集合和类型之间的区别并不重要,因为和(其中是的扩展)可以为我们提供与完全相同的信息。但是,xx:TxXTXTTx
user56834 '18

当我们要谈的区别是相关的大约类型及组合,以及它们的属性和关系。换句话说,当我们而不是中说时,我们丢失的信息并没有告诉我们任何与有关的信息,但是如果我们想谈论超集-子集或类型-亚型关系?那是对的吗?xXTx:Tx
user56834 '18

4
是的,有人想知道这些书在哪里。有人应该写它们。
安德烈·鲍尔

11

首先,集合和类型甚至不在同一个领域。集是一阶理论(例如ZFC集理论)的对象。而类型就像杂草丛生的排序。把它用不同的方式,一套理论是一阶理论中的一阶逻辑。类型理论是逻辑本身的扩展。例如,马丁-洛夫类型理论在一阶逻辑中并未作为一阶理论提出。同时讨论集合和类型并不常见。

正如离散蜥蜴所言,类型(和排序)具有句法功能。排序/类型表现为句法类别。它使我们知道哪些表达式格式正确。对于使用排序的简单示例,假设我们将任意字段上的向量空间理论描述为2排序理论。我们对标量有一个排序,对向量V有一个排序。在许多其他的事情,我们希望有缩放操作:小号Ç é小号 × VV。这让我们知道小号ç é小号ç éSVscale:S×VV根本不是一个格式正确的术语。在类型理论的上下文中,像 f x 这样的表达式要求 f对于某些 X Y类型具有 X Y类型。如果 f没有函数的类型,则 f x 根本不是格式正确的表达式。表达式是某种形式还是某种类型是一种元逻辑陈述。写这样的东西没有道理:x X scale(scale(s,v),v)f(x)fXYXYff(x)。首先, x X根本不是一个公式,其次,它在概念上甚至没有意义,因为排序/类型是让我们知道哪些公式格式正确的东西。我们只考虑格式正确的公式的真值,因此,当我们考虑某个公式是否成立时,我们最好已经知道它格式正确!(x:X)y=3x:X

在集合论中,特别是在ZFC中,唯一的非逻辑符号是集合成员关系的关系符号。所以X ý是具有真值一合式公式。除变量外,没有其他术语。集合论的所有常用符号都是对此的定义扩展。例如,像式˚F X = ý通常取为速记X ÿ ˚F其本身可以作为简写p p ˚F p = Xxyf(x)=y(x,y)f是用于速记p p ˚F Ž ž pp.pfp=(x,y) 在任何情况下,任何一组可利用的地方 ˚F和一切是一组!正如我最近在另一个问题中指出的那样, π 7 = 3其中 π

p.pf(z.zp[z=x(w.wzw=y)])
fπ(7)=3π是实数是一个完全合法且有意义(甚至可能是真的)的理论表达。基本上,您在集合论中所解析的任何内容都可以被赋予一定的含义。这可能是一种完全虚假的含义,但有一个含义。在集合论中,集合也是“一流”的对象。(它们最好是因为它们是唯一的通常的对象。)等的函数
f(x)={N,if x=17,if x=QxRR,if x=(Z,N)
在集合论中是完全合法的功能。在类型理论中,没有什么比这更遥远了。最接近的是使用Tarskian宇宙的代码。集合是集合论的对象。类型不是类型理论的对象。

类型不是事物的集合(也不是事物的集合...),并且它不是由属性定义的。类型是一种语法类别,可让您知道哪些操作适用于该类型的术语以及哪些表达式格式正确。从作为类型的命题角度来看,正在分类的类型是该类型所对应的命题的有效证明。也就是说,给定类型的格式良好(即类型良好)的术语对应于相应命题的有效证明(也是语法对象)。集合论中没有发生这样的事情。

集合论和类型论实际上并没有什么相似之处。


1
类型只是句法实体是错误的。
安德烈·鲍尔

1
这非常有帮助,但是您的回答中有一个要点困扰我。在我看来,说“一组不是事物的集合”是一个错误(很多人犯了错,或者这不是一个错误,我错了)。我要说的是,集合就是事物的集合。这是集合中最基本的本质属性。实际上,我们怎么可能知道ZFC是选择的正确公理(而不是完全任意的公式),而不能说给定集合是对象集合的话它们是真的?当然,我了解...
user56834 '18

公理集合论将集合视为对象,而只是一个符号,因为公理集合论不是数学逻辑意义上的数学结构。
user56834 '18

1
@ Programmer2134要回答这个问题,我们就必须进入语义含义的词“集合”。除非您花时间精确定义“正确”的含义,否则我们无法确定它们是否正确。但是,我们可以说的是,“集合”是一百多年来数学家击败集合概念,寻求与集合的直观概念相匹配的一致系统的结果。为了实现这种一致性,他们必须做出决定。例如,集合不是数学中唯一的集合。“类”还描述了一个集合。
Cort Ammon-恢复莫妮卡

1
@AndrejBauer我(主要)采取非哲学立场,而不是试图解释“真正”是什么类型,而是更多地说明它们的使用方式。(我一开始说“服务为”和“行为为”,但最后我确实滑入了“是”。)可能会认为变量T类型意味着只有“值”该X可以“采取”是类型的(大概闭合)术语Ť。这不是真的,也不是我上面所说的任何暗示。我同意您可以将类型视为不仅仅是语法实体,但是我认为不同的语法角色类型与集合形成了鲜明的对比。xTxT
德里克·埃尔金斯

9

在实践中,声称通常T类型通常用于描述语法,而声称x在集合S通常用于表示语义属性。我将举一些例子来阐明类型和集合在用法上的差异。对于哪些类型和实际设置的区别,我指的是安德烈·鲍尔的回答xT xS

一个例子

为了阐明这种区别,我将使用Herman Geuvers讲义中给出的示例。首先,我们来看一个居住类型的例子:

和是一组的部件的例子: 3 { Ñ Ñ | ∀ X ÿ ž Ñ +X Ñ + ý ñŽ Ñ}

3+(78)5:Nat,
3{nNx,y,zN+(xn+ynzn)}

这里的主要区别在于,要测试第一个表达式是否为自然数,我们不必计算某些语义,我们只需“读”所有文字均为Nat类型且所有运算符均为在类型Nat上关闭。

然而,对于该组的第二个例子,我们要确定的语义的集合中的上下文。对于这个特定的集合,这是很难的:该集合的3的隶属关系等于证明Fermat的最后一个定理!请注意,如注释中所述,语法和语义之间的区别不能始终如此清晰。(而且您甚至可能会争辩说,即使这个示例也不清楚,正如Programmer2134在评论中提到的那样)33

算法与证明

总而言之,类型通常用于对某些表达式的语法进行``简单''声明,以便可以通过算法检查类型的成员资格,而要测试集合的成员资格,通常需要证明

要了解为什么使用这种区别很有用,请考虑一种类型化编程语言的编译器。如果该编译器必须创建形式检验来“检查类型”,则要求编译器执行几乎不可能完成的任务(通常,自动定理证明很难)。另一方面,如果编译器可以简单地运行(高效)算法来检查类型,则它可以实际执行任务。

严格解释的动机

集和类型的语义含义有多种解释。尽管根据此处的区别,扩展类型和具有不确定类型检查的类型(例如,如注释中提到的在NuPRL中使用的类型)将不是“类型”,但其他人当然可以自由地这样称呼它们(就像免费一样) (只要它们的定义合适,就称它们为别的东西)。

但是,我们(Herman Geuvers和我)宁愿不要将这种解释丢在窗外,为此,我(不是Herman,尽管他可能同意)具有以下动机:

首先,这种解释的意图与Andrej Bauer 的意图并不遥远。语法的目的通常是描述如何构造某些东西,并使用一种算法来实际构造它通常很有用。此外,通常仅在需要语义描述的情况下才需要集合的特征,因为语义描述允许不确定性。

因此,我们更严格的描述的优点是保持分隔更简单,从而获得与常见实际用法更直接相关的区别。只要您不需要或不想放松使用(如NuPRL),此方法就可以很好地工作。


3
类型检查不需要是可决定的(尽管当然是可取的)。例如,NuPRL确实要求用户提供一个术语居住在类型上的证明。
德里克·埃尔金斯

3
谢谢。事情变得越来越清晰。我仍然想知道的是:这里没有类型论的语义成分和集合论的句法成分?例如,我们可以,而不是看到你“ ”语句语义声明,认为这是在公理集合论一个命题,不是吗?另外,“ Nat”类型是否不具有语义含义,即,其前面的任何内容都是自然数?所以说说集是语义和类型的句法属性仍然让我感到困惑。3...
user56834 '18

1
@DerekElkins我对NuPRL不熟悉,但是例如,证明助手Coq肯定会自己进行类型检查(即“我的定理类型”的术语)。如果用户必须“证明”某种类型的术语这一事实,NuPRL如何验证该证明?(换句话说,这听起来像NuPRL不使用Curry-Howard对应,那么它使用了什么呢?)
离散蜥蜴

1
@Discretelizard我并不是说NuPRL是典型的。绝对可以确定类型检查的通常情况。我强烈建议您熟悉它,因为它所走的路完全不同。NuPRL是Curry式而不是Church式演算,这使其更像是类型优化系统。无论如何,您实际上拥有一个LCF样式的证明系统来自己键入派生,而不仅仅是写术语(或产生术语的策略)。可以说,派生是重要的,我们可以从术语中推断出它们是有点“骗子”。
Derek Elkins '18

3

4

我相信,关于集合和类型最具体的差异之一就是您脑海中“事物”被编码为形式语言的方式上的差异。

Both sets and types allow you to speak about things, and collections of things. The main difference is that with sets, you can ask any question you want about things and it will maybe be true, maybe not; while with types, you first have to prove that the question makes sense.

For example, if you have booleans B={true,false} and natural numbers N={0,1,}, with types, you can not ask if true=1 which you can with sets.

One way to interpret this is that with sets, everything is encoded into a single collection: the collection of all sets. 0 is encoded as [0]={}, ñ+1个 编码为 [ñ+1个]={[ñ]}[ñ]真正可以由任何两个不同的集合进行编码。所以问一下是否真的有意义真正=1个,因为可以理解为询问“ 真正 与选择的编码相同 1个“。但是,如果我们选择其他编码,则此问题的答案可能会改变:它与编码有关,而与事物无关。

然后,您可以将类型视为描述其内部事物的编码。用类型,问是否一种=b,您首先必须证明 一种b have the same type, i.e. that they were encoded in the same way, which prohibits questions such as true=1. You could still want to have a big type S in which both B and N could be encoded, and then given two encodings ιB:BS and ιN:NS, you could ask whether ιB(true)=ιN(1) but the fact that this question depends on the encodings (and the choice of encodings) is now explicit.

Note that in those cases, whether the question made sense was actually easy to see but it could be much harder as in, for example, (ifvery_hard_questionthen1elsetrue)=1.

In summary, sets let you ask any question you want, but types force you to make encodings explicit when the answer may depend on them.


You are probably thinking of one specific kind of set theory (something along a single-sorted theory a la ZFC). However, there are other kinds of set theory which require lots of checking that it makes sense. And the way set theory is used in practice is much closer to these other set theories. Do you think a student could ask "Is R an element of sin(2)?" without being scolded? The distinction between type theory and set theory is not in the formalism, it's in the meaning.
Andrej Bauer

@AndrejBauer Right. Would you agree that this answer gives a differences between single-sorted theories (including most set theories, or at least the most common ones), and multi-sorted theories (including all (?) type theories)?
xavierm02

Even in a single-sorted theory you have to distinguish terms from formulas...
Andrej Bauer

@AndrejBauer I don't understand your second comment.
xavierm02

A single-sorted first-order theory has two syntactic categories: logical formulas and terms. One has to make sure they're not mixed up, or else you could end up writing "(xX.ϕ(x))N".
Andrej Bauer
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.