Our logical notation is standard, so only one comment on logical notation is called for. When stating the theorem that propositions A,B, and C imply proposition D, we write
rather than
We do this because, in constructive logic, every theorem has an extract
and the extract of the first form is a Curried function while the extract of
the second form is uncurried. Our tactics work best on the Curried form.
In the proofs given in this paper (which are English summaries of the Nuprl
proofs), we will refer to D as ``the conclusion'' and to
B as ``the second hypothesis''.
The type theory prerequisites are minimal. We will mention only that Nuprl
type theory includes intersection types and void types, and this lets us
define the type Top by:
The only thing we need to know about this type is that every type T is a
subtype of Top. In our treatment of structures, we use the dependent product
type
We will also remind readers that in constructive type
theory, propositions are types, not booleans , and that we have
P (P) only for decidable propositions. For this paper, we can mostly
ignore this distinction because whenever we need to know that a proposition
is decidable, Nuprl's Auto-tactic can prove it for us.
We will use a number of operations on lists and will use facts about them
without proof. The real Nuprl proofs come from an extensive list-theory
library. Here, we will merely show the notations we use for list operations.
In a list type T List, we have nil and cons constructors, [] and [a / L],
and lists built by cons-ing to nil will display like [x; y; z].
The length and append functions are ||L|| and L @ L
. The type
||L|| of natural numbers less than the length of L is the domain of the
selection function L[i]. The prefix, or initial-segment, relation is
written L
L
. The filter operation forms lists like <xL | P x>,
the list obtained by swapping the elements of L at indices i and j is
swap(L;i;j)
and we define the swap adjacent relation on lists by:
Notice that, as in the lefthand side of this definition, we like to use
infix notation for the application of a relation.