EXPAND_AUTO_CONV : (thm list -> conv)
"?l1 ... lm. t1 /\ ... /\ ui1 /\ ... /\ uik /\ ... /\ tn"
B |- (?l1 ... lm. t1 /\ ... /\ ui1 /\ ... /\ uik /\ ... /\ tn) = (?li(k+1) ... lim. t1' /\ ... /\ tn')
Suppose the function decides to unwind li1,...,lik using the terms ui1',...,uik' respectively. Then, after unwinding, the lines li1,...,lik are pruned (provided they have been eliminated from the right-hand sides of the conjuncts that are equations, and from the whole of any other conjuncts) resulting in the elimination of ui1',...,uik'.
The li’s are related by the equation:
{{li1,...,lik}} u {{li(k+1),...,lim}} = {{l1,...,lm}}
#EXPAND_AUTO_CONV # [ASSUME "!in out. INV (in,out) = !(t:num). out t = ~(in t)"] # "?l1 l2. # INV (l1,l2) /\ INV (l2,out) /\ (!(t:num). l1 t = l2 (t-1) \/ out (t-1))";; . |- (?l1 l2. INV(l1,l2) /\ INV(l2,out) /\ (!t. l1 t = l2(t - 1) \/ out(t - 1))) = (?l2. (!t. l2 t = ~(l2(t - 1) \/ ~l2(t - 1))) /\ (!t. out t = ~l2 t))