区别主要有:1、意义不同;2、定义不同。集合论依赖于其下层的演绎系统,而类型论同时也是它自己的演绎系统。考虑集合论的证明论(proof theory)没有意义,因为集合论的证明论就是下层演绎系统的证明论。而考虑类型论的证明论则有意义,并且十分有帮助。
1、意义不同
集合论依赖于其下层的演绎系统,而类型论同时也是它自己的演绎系统。例如,同样是ZF公理,在一阶古典逻辑和一阶直觉主义逻辑中进行推理,所能证明的命题是不同的。而类型论则不然:我们定义项和类型的关系的同时,也定义了怎样对这些关系进行推理。因此,每个类型论都是包含一个演绎系统的。
换言之,考虑集合论的证明论(proof theory)没有意义,因为集合论的证明论就是下层演绎系统的证明论。而考虑类型论的证明论则有意义,并且十分有帮助。
2、定义不同
集合论中的定义基本是自下而上(bottom-up)的,而类型论中的定义则不然。在集合论中,我们先定义我们想要的物件(object),再定义这些物件的集合。而在类型论中,我们定义一个类型的同时,也定义了该类型所包含的物件。举个例子:假如我们要在集合论里定义自然数(即建构一个皮亚诺算术的模型),我们可能会定义0为 ∅\varnothing\varnothing ,然后再定义对于任意自然数(或表示自然数的集合) nnn ,有 S(n)=n∪{n}S(n) = n \cup \{n\}S(n) = n \cup \{n\} 。接着,我们再递归地定义 N\mathbb{N}\mathbb{N} 为所有这样建构的物件的集合。而在类型论(如Calculus of Inductive Constructions)中则不然。如果我们要在CIC中定义自然数,我们会使用如下的定义:
Inductive nat : Set :=
| zero : nat
| succ : nat -> nat.
可以看到,我们定义nat类型的同时定义了它所有的构造方法,进而间接定义了其所有成员。(这里使用了Coq的语法。)换言之,集合论中集合建立在其成员的基础之上,而类型论中的类型和其成员是共生的。因此,如果我们定义一个恒等函数 ididid ,在集合论里我们可以说 id∉Nid \notin \mathbb{N}id \notin \mathbb{N} ,但在类型论的语言中考虑 id是否nat的一员并没有意义(或者说,not even wrong)。当然,在类型论的元理论中我们可以表达”id的类型不是nat“这个命题,但这是元理论的范围了。
延伸阅读:
什么是类型论?
在较广泛的层面上,类型论是关注把实体分类到叫做类型的搜集中的数学和逻辑分支。在这种意义上,它与类型的形而上学概念有关。现代类型论在部分上是响应罗素悖论而发明的,并在伯特兰·罗素和阿弗烈·诺夫·怀海德的《数学原理》中起到重要作用。
在计算机科学分支中的编程语言理论中,类型论提供了设计分析和研究类型系统的形式基础。实际上,很多计算机科学家使用术语“类型论”来称呼对编程语言的类型语言的形式研究,尽管有些人把它限制于对更加抽象的形式化如有类型lambda演算的研究。
另外在社会学和心理学上也有相关应用。
文章标题:类型(Types)和集合(Sets)二者之间有何区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/38603