PRUNE_ONCE_CONVunwindLib.PRUNE_ONCE_CONV : conv
Prunes one hidden variable.
PRUNE_ONCE_CONV "?l. t1 /\ ... /\ ti /\ eq /\ t(i+1) /\ ... /\ tp"
returns a theorem of the form:
|- (?l. t1 /\ ... /\ ti /\ eq /\ t(i+1) /\ ... /\ tp) =
(t1 /\ ... /\ ti /\ t(i+1) /\ ... /\ tp)
where eq has the form
"!y1 ... ym. l x1 ... xn = b" and l does not
appear free in the ti’s or in b. The
conversion works if eq is not present, that is if
l is not free in any of the conjuncts, but does not work if
l appears free in more than one of the conjuncts. Each of
m, n and p may be zero.
Fails if the argument term is not of the specified form or if
l is free in more than one of the conjuncts or if the
equation for l is recursive.
#PRUNE_ONCE_CONV "?l2. (!(x:num). l1 x = F) /\ (!x. l2 x = ~(l1 x))";;
|- (?l2. (!x. l1 x = F) /\ (!x. l2 x = ~l1 x)) = (!x. l1 x = F)
unwindLib.PRUNE_ONE_CONV,
unwindLib.PRUNE_SOME_CONV,
unwindLib.PRUNE_CONV,
unwindLib.PRUNE_SOME_RIGHT_RULE,
unwindLib.PRUNE_RIGHT_RULE