PSUB_CONV
PairRules.PSUB_CONV : (conv -> conv)
Applies a conversion to the top-level subterms of a term.
For any conversion c
, the function returned by
PSUB_CONV c
is a conversion that applies c
to
all the top-level subterms of a term. If the conversion c
maps t
to |- t = t'
, then
SUB_CONV c
maps a paired abstraction "\p.t"
to
the theorem:
|- (\p.t) = (\p.t')
That is, PSUB_CONV c "\p.t"
applies c
to
the body of the paired abstraction "\p.t"
. If
c
is a conversion that maps "t1"
to the
theorem |- t1 = t1'
and "t2"
to the theorem
|- t2 = t2'
, then the conversion PSUB_CONV c
maps an application "t1 t2"
to the theorem:
|- (t1 t2) = (t1' t2')
That is, PSUB_CONV c "t1 t2"
applies c
to
the both the operator t1
and the operand t2
of
the application "t1 t2"
. Finally, for any conversion
c
, the function returned by PSUB_CONV c
acts
as the identity conversion on variables and constants. That is, if
"t"
is a variable or constant, then
PSUB_CONV c "t"
returns |- t = t
.
PSUB_CONV c tm
fails if tm
is a paired
abstraction "\p.t"
and the conversion c
fails
when applied to t
, or if tm
is an application
"t1 t2"
and the conversion c
fails when
applied to either t1
or t2
. The function
returned by PSUB_CONV c
may also fail if the ML function
c:term->thm
is not, in fact, a conversion (i.e. a
function that maps a term t
to a theorem
|- t = t'
).
Conv.SUB_CONV
, PairRules.PABS_CONV
, Conv.RAND_CONV
, Conv.RATOR_CONV