![]() |
![]() |
More generally, given an expression f we allow
![]() |
![]() |
In the course of judging that an expression t has a type T, we
allow replacing t by any term t' that is definitionally equal or
by a term t' that t evaluates to. So if t in T and
,
then
.
In the logic over
we add the rule for function equality
![]() ![]() |
![]() |
![]() ![]() |
![]() |
Here is Cantor's interesting argument about functions based on the method of diagonalizationdiagonalization. It illustrates the rules for functions. (See the appendix for a Nuprl proof.)
Cantor shows that for inhabited types A with two distinct elements there
is no function from A onto
--essentially because
is ``too big'' to be enumerated by A. We state the condition
on A using functions. We require that there is a function
such that
for all x in A. The theorem
is
1.
in A
2.
is onto
Next use
on 2 THEN unfold ``onto'' THEN
2.
3.
4.
in
Next
on 1 to replace 1 by 1.1
,
1.2
in A
Let
Now
on 4 with h0
5.
e(g(h0))=h0 in
Let d==g(h0), by
6. e(d)(d)=h0(d) in A
Now evaluate h0(d) to rewrite 6 as
6.
Now by
on 1.2 with e(d)(d)
7.
(which is
)
Finish by
on 7 and 6.