The critical point about judging that T is a type is knowing what it means for an expression to be an element of T. This is what we know when we show that T is a type.
Assertions about objects require their classification into types. Moreover, we
need relative or hypothetical classification because an object t occurring in
a proposition may be built contingently from other objects xi of type Ti,
and will be in some type T. We understand these relative type membership
judgments as follows. To judge that t[x] is a member of T2 provided xis a member of T1 means that for any object t1 of type T1, t[t1] is
an object of T2. We write this as
.
We
extend the notation to n assumptions by writing
for xi distinct identifiers. (We write
only when we need to be explicit about the variables; this
notation is a second order variable.) We give concrete examples of this
judgment below and discuss them at length in section 3.
We don't treat this judgment as an assertion. It summarizes what must hold for
a statement about t to make sense. It is not the kind of expression that is
true or false. For example, when we say
,
we are thinking that
0 is a natural number. This is a fact. We are thinking ``
,'' and it does not make sense to deny this, thinking that 0is something else.
In order to consider propositional functions of more than one argument, say
P(x, y), we explicitly construct pairs of elements,
and
express P(x, y) as
.
The pair
belongs to the Cartesian product type. So our types have at least this
structure.
Propositions are elements of the large type (or category) Prop. We use
membership judgements
The membership rules are that if
and
,
then
for opa
connective; and if
,
then
where Q is a
quantification operator and where
is obtained by removing the typing
assumption
.
The usual names for the compound propositions are:
proposition | English equivalent | operator name | |
![]() |
is | F and G | conjunction |
![]() |
is | F or G | disjunction |
![]() |
is | F implies G | implication |
F(t) | is | F at t | instance |
![]() |
is | for all x of type A, F(x) | universal quantification |
![]() |
is | for some x of type A, F(x) | existential quantification |
With these definitions in place we can write examples of general typed propositions. We use definiendum == definiens to write definitions.