PRUNE_SOME_RIGHT_RULE : (string list -> thm -> thm)
A |- !z1 ... zr. t = ?l1 ... lr. t1 /\ ... /\ eqni1 /\ ... /\ eqnik /\ ... /\ tp ----------------------------------------------------------------------- A |- !z1 ... zr. t = ?li(k+1) ... lir. t1 /\ ... /\ tp
"!y1 ... ym. lij x1 ... xn = b"
{{li1,...,lik}} u {{li(k+1),...,lir}} = {{l1,...,lr}}
If there is more than one line with a specified name (but with different types), the one that appears outermost in the existential quantifications is pruned. If such a line name is mentioned twice in the list, the two outermost occurrences of lines with that name will be pruned, and so on.
#PRUNE_SOME_RIGHT_RULE [`l1`;`l2`] # (ASSUME # "!(in:num->bool) (out:num->bool). # DEV (in,out) = # ?(l1:num->bool) l2. # (!x. l1 x = F) /\ (!x. l2 x = ~(in x)) /\ (!x. out x = ~(in x))");; . |- !in out. DEV(in,out) = (!x. out x = ~in x)