Another of the most fundamental concepts of modern mathematics is the notion of set or class. Class theory arose out of Frege's foundation for mathematics in Grundgesetze and in Principia along similar lines. Even before 1900 Cantor was creating a rich naive set theory which was axiomatized in 1908 by Zermelo and improved by Skolem and Fraenkel into modern day axiomatic set theories such as ZF ([11]) and BG ([51]) and Bourbaki's set theory ([16]).
We could formulate a full blown axiomatic set theory based on the type Set.
But the type theory of section 3 is an alternative into which ZF
can be encoded ([1]). So instead we pursue a much more modest
treatment of sets along the lines of Principia's classes. In
Principia, given a propositional function
whose range of
significance is the type A, we can form the class
of those
elements of A satisfying
.
We write this as
.
We call this a set typeset type or a
classclass. Given two classes
we can form
the usual combinations of union,
,
intersection,
,
complement,
,
universal class, A, and empty class,
.
The typing judgment associated with a set type is what one would expect.
Suppose A is a type and
,
then
![]() |
![]() |
![]() |
The rule for using an assumption about set membership is
![]() |
![]() |
As with the other rules, we can choose to name the assumption P(y)by using the justification by
.
In Nuprl there is the
option to ``hide'' the proof of P(y). This hidden version is the
default in Nuprl. A hypothesis is hidden to prevent the proof object
from being used in computations. This is necessary because the set
membership rule, setR, does not keep track of the proof P(a); so
the constructive elimination rule is
![]() |
![]() |
In local set theories, the concept of the power set,
is
introduced (c.f. [10,78]). This type collects all sets built
over
A and Prop. If A is a type, then
is a type.
In order to express rules about this type, we need to treat the
judgments
and
in the rules.
Thus far we have expressed these judgments only implicitly, not as
explicit goals, in part because Type and
are
not types themselves, but ``large types.'' However, it makes sense to
write a rule such as
We can also imagine the rule
This introduces the large type,
into the type
position. Treating this concept precisely requires that we consider
explicit rules for Type and Prop, especially their stratification
as Typei and Propi. We defer these ideas until
section 3.4.
Let us note at this point that the notion of Prop and set types be at the
heart of topos theorytopos theory as explained in
[10]. Essentially, the subobject classifiersubobject
classifier,
and
,
of topos theory is an
(impredicative) notion of Prop and the subtype of true propositions. The
notion of a pullbackpullback is used to define subtypes of a
type A by ``pulling back'' a characteristic function
and the truth arrow
to get the domain of P,
.
A topostopos is essentially a category with
Cartesian products (n-ary) a subobject classifier and power objects. In other
words, it is an abstraction of a type theory which has Prop, a collection of
true propositions, subtypes and a power type,
for each type. The
notion of a Grothendieck topos
Grothendieck topos (c.f. [10,78]) is essentially a
predicative version of this concept. It can be defined in Martin-Löf
type theory and in Nuprl, but that is beyond the scope of these notes.
(However, see section
.)