Pierce(2002)通过撰写第92页的文章介绍打字关系:
算术表达式的类型关系,写为“ t:T”,是由一组将类型分配给项的推理规则定义的
并且脚注说符号经常代替:。我的问题很简单,为什么类型理论家更喜欢使用:而不是?如果类型是一组值,则写入绝对有意义,不需要新的符号。
这是否类似于某些cs编写者甚至认为滥用符号并应将其写为类似?
false
:int
”。也不是必须通过“纯粹的句法手段”得出判断的情况,例如在具有家庭类别的内部类型理论的情况下。
Pierce(2002)通过撰写第92页的文章介绍打字关系:
算术表达式的类型关系,写为“ t:T”,是由一组将类型分配给项的推理规则定义的
并且脚注说符号经常代替:。我的问题很简单,为什么类型理论家更喜欢使用:而不是?如果类型是一组值,则写入绝对有意义,不需要新的符号。
这是否类似于某些cs编写者甚至认为滥用符号并应将其写为类似?
false
:int
”。也不是必须通过“纯粹的句法手段”得出判断的情况,例如在具有家庭类别的内部类型理论的情况下。
Answers:
因为冒号右侧的内容不一定是集合,而冒号左侧的内容不一定是集合的成员。
类型理论起源于20世纪初期,是建立数学基础的一种方法。伯特兰·罗素(Bertrand Russel)在朴素的集合论中发现了一个悖论,他从事类型理论的研究,以限制集合论的表达能力来避免这种(以及任何其他)悖论。多年来,Russel等人定义了许多类型理论。在某些类型理论中,类型是具有某些属性的集合,而在其他类型中,它们是另一种野兽。
特别是,许多类型理论都有句法表述。有些规则使事物具有类型。当打字规则作为一种理论的基础时,重要的是要区分打字规则的内容和通过应用其他外部知识可能得出的结论。如果键入规则是证明理论的基础,则这一点尤其重要:例如,基于具有经典逻辑的集合论和选择公理的定理可能会也可能不会存在于构造逻辑中。该领域的开创性论文之一是丘奇(Church)的《简单类型理论的提法》(A Formulation of Types of Types)(1940)。
类型和集合之间的区别最明显的方式可能是集合的最基本规则,即两个集合具有相同的元素(如果它们具有相同的元素)是相等的,通常不适用于类型。有关一些示例,请参见Andrej Bauer在此处的答案以及他在相关问题上的答案。第二个线程还有其他值得一读的答案。
在类型化演算中,说类型是集合实际上是在给类型赋予语义。为演算赋予类型理论的语义并非无关紧要。例如,假设您要使用功能定义语言。函数的类型是什么?正如我们在集合论101中所教的那样,总功能由它们的图确定。但是偏函数呢?您是否要为所有非终止函数赋予相同的语义?在回答了这个问题之前,您不能将类型解释为允许递归函数的微积分的集合。在1970年代初期,为编程语言或计算赋予名词性语义是一个难题。此处的开创性论文是“迈向计算机语言的数学语义学”(1971年),作者:Dana Scott和Christopher Strachey。该哈斯克尔维基对该主题的好介绍。
正如我在上面写的那样,答案的第二部分是,即使您设法为类型赋予了集合理论的语义,冒号左侧的内容也不总是集合的元素。值具有类型,其他事物也具有类型,例如表达式和变量。例如,使用类型化编程语言的表达式即使不终止也具有类型。您可能愿意integer
与合并,但(x := 0; while true; do x := x + 1; x)
不是的元素。
我不知道类型的冒号是什么时候出现的。现在它在语义上是标准的,并且在编程语言中很常见,但是Russel和Church都没有使用它。Algol并没有使用它,但是受Algol启发的Pascal语言在1971年使用了。我怀疑它不是第一语言,因为许多1970年代初期的理论论文都使用了该符号,但是我不知道较早使用。有趣的是,这是在将编程和逻辑的类型概念统一后不久的-正如西蒙·马丁尼(Simon Martini)在“ 几种编程语言的类型类型”中所展示的那样,直到1960年代,编程语言中的“类型”都来自白话语。这个词的使用,而不是类型理论。
主要的理由,更喜欢的冒号表示的成员关系是隶属关系,可能会产生误导,因为类型不(仅仅)的集合。
[ 补充:我应该注意,历史类型理论是使用编写的。马丁·洛夫(Martin-Löf)的类型概念意在建设性地捕获集合,而罗素(Russell)和怀特黑德(Whitehead)已经将用作班级纪念。追踪以下时刻的有趣之处变得比更普遍。]
类型描述一种特定的构造,即如何使对象具有特定的结构,如何使用它们以及有关它们的方程式。
例如,产品类型具有介绍规则,该规则解释了如何制作有序对,而消除规则则说明了我们可以从任何元素投射第一个和第二个组件。定义也没有的话开始“所有的集合......”也不认为这是说在任何地方任何类似“的所有要素是对”(但它遵循从定义中的每一个元素是命题等于一对)。相反, 的集合理论定义被称为“所有有序对的集合...”。
符号表示具有描述的结构的事实。
不要将类型与它的扩展名混淆,扩展名是所有类型对象的集合。类型不是由其扩展名决定的,就像组不是由其载波集确定的一样。此外,可能会发生两种类型具有相同的扩展名但有所不同的情况,例如:
两者的扩展名都是空的,但是它们不是同一类型。
类型理论和集合理论之间还有其他区别。对象集合论存在独立的什么套属于,它可能属于多套。相反,大多数类型的理论满足独特的打字:如果和然后。或者换种方式,类型理论建构正好有一种,而事实上是没有办法有只是一个对象没有它的(唯一确定)型。
另一个区别是,在集合论中,我们可以否认的事实是由文字或。在类型论中这是不可能的,因为是可以使用类型论的规则得出的判断,但是在类型论中没有什么可以让我们声明尚未得到某些东西。当一个孩子用乐高积木制作东西时,他们自豪地奔向父母向他们展示建筑,但他们从未奔向父母向他们展示自己的东西。
:
吗?
:
理论上的论文中使用20世纪70年代之前?
REAL :: x
但是我不知道这是否早于Pascal。