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)))