There is also a dual relationship between the elimination rules
and an introduction rule for the corresponding elimination form.
For instance, the union elimination rule has a goal of the form
H >> T; the extracted code is a term of the form
decide(z;;
).
Correspondingly there is an introduction rule with a goal of the form
H >> decide(e;
;
) in
.
This rule states the general conditions under which we
may introduce a decide.
Notice that any decide introduced by an elimination rule
will have a variable in the first argument position.
However, the additional generality of the introduction is obtained at a price;
it is not possible to produce the subgoals of the rule instance
from the goal alone.
Two parameters are needed: one to specify the union type,
written using A|B,
and one to specify the range type,
written using
.
This additional complexity is part of the price of
the increased expressiveness of the Nuprl
logic.