在给定类型(Type)中的每个元素(element)都是可构建(constructive)的。这是与集合(set)的最大区别。
类型(Type)像是一个集合(set),包含了给定类型的元素 (element)。比如,C语言的int类型,如果在32位机器上,该int类型就包含了 2^32个整数值。此时,类型就相当于是集合,给定了对应的类型,就能知道该类型定义的可能的值是什么。即,如果一个变量 a,它的类型是 int,那么 a 的值就只能是 2^32个整数里面的一个。
那么,为什么不用集合直接作为类型来用,而非要用一个新的概念(类型)来替代呢?
原因在于,当我们使用集合的概念时,比如定义一个集合时,需要确定该集合包含哪些元素(element)。例如,一个经典的悖论,a set containing sets which do not contain itself。此时,有个隐含的前提是,这些备选的元素都是已经存在的,我们在定义集合时,只是将其中的部分划分到我们要定的集合里。这样就有可能存在一些不知道如何构建的元素也划分至集合里面。
例如,A = P U not P,P 是一个集合,not P 是该集合的补集,U 是这两个集合的与运算,其结果为集合A。那么,集合A包括了 P和非P里面的所有元素。但是,实际上,我们不知道集合A包含了哪些元素,因为,我们不知道P或非P包含了哪些元素。
换个角度来看,P是一个命题 (proposition),not P 是该命题的否定,如果P是对的,那么P包含了一个元素,该元素证明了P是对的。如果 not P 是对的,那么not P 也包含一个元素,证明 P是错的。那么 P V not P,这个命题在经典逻辑学上是 对的,意味着 P V not P包含一个元素,证明其是对的。但是,不确定是 P 是对的,还是 not P 是对的。
因此,在集合的概念上,允许了不可构建的元素存在。更确切地说是,没有明确规定,集合里的所有元素都是可构建的。即我们确定该元素是存在的,但是不知道如何构建该元素。