EXPAND_ALL_BUT_RIGHT_RULE : (string list -> thm list -> thm -> thm)
A |- !z1 ... zr.
t = ?l1 ... lm. t1 /\ ... /\ ui1 /\ ... /\ uik /\ ... /\ tn
-------------------------------------------------------------------
B u A |- !z1 ... zr. t = ?li(k+1) ... lim. t1' /\ ... /\ tn'
The li’s are related by the equation:
{{li1,...,lik}} u {{li(k+1),...,lim}} = {{l1,...,lm}}
#EXPAND_ALL_BUT_RIGHT_RULE [`l1`]
# [ASSUME "!in out. INV (in,out) = !(t:num). out t = ~(in t)"]
# (ASSUME
# "!(in:num->bool) out.
# DEV(in,out) =
# ?l1 l2.
# INV (l1,l2) /\ INV (l2,out) /\ (!(t:num). l1 t = in t \/ out (t-1))");;
.. |- !in out.
DEV(in,out) =
(?l1. (!t. out t = ~~l1 t) /\ (!t. l1 t = in t \/ ~~l1(t - 1)))