Ordinary mathematical statements are usually expressed in a typed
languagetype. Consider the trivially true proposition: ``if
there is a rational number q whose absolute value is less than the reciprocal
of any natural number n, then for every natural number n, there is a real
number r whose absolute value is also less than 1/n.'' Symbolically we
express this as follows for
the natural numbers,
the
rationals, and
the reals:
We can abstract on the relation |r| < 1/n, and speak of any relation
L on
and recognize that
is a
subtypesubtype of
to obtain
Abstracting further, we know that for any types A, A' and B where A' is a
subtypesubtype of A, say
the following is
true
This last statement is an abstraction of * with respect to
and the relation |r| < 1/n. It is these purely
abstract typed propositions that we want to study in the beginning. We
want to know what statements are true regardless of the types and the exact
propositions. We are looking for those properties of mathematical propositions
that are invariant under arbitrary replacement of types and propositions.
Here logic is presented in a way that relates it closely to the type theory of
section 3 and the programming language of
section . Essentially, we will be able to lay one
presentation on top of the others and see a striking correspondence as
Table 1 suggests. This goal leads to a novel presentation of
logic because of the role of explicit typing judgments. We begin now to
gradually make these ideas more precise.