SUBST_CONV implements the following rule of simultaneous substitution
A1 |- t1 = v1 ... An |- tn = vn
------------------------------------------------------------------
A1 u ... u An |- t[t1,...,tn/x1,...,xn] = t[v1,...,vn/x1,...,xn]
The first argument to SUBST_CONV is a list
[{redex=x1, residue = A1|-t1=v1},...,{redex = xn, residue = An|-tn=vn}].
The second argument is a template term t[x1,...,xn], in which
the variables x1,...,xn are used to mark those places where
occurrences of t1,...,tn are to be replaced with the terms
v1,...,vn, respectively.
Thus, evaluating
SUBST_CONV [{redex = x1, residue = A1|-t1=v1},...,
{redex = xn, residue = An|-tn=vn}]
t[x1,...,xn]
t[t1,...,tn/x1,...,xn]
returns the theorem
A1 u ... u An |- t[t1,...,tn/x1,...,xn] = t[v1,...,vn/x1,...,xn]
The occurrence of ti at the places marked by the variable
xi must be free (i.e. ti must not contain any bound variables).
SUBST_CONV automatically renames bound variables to prevent free
variables in vi becoming bound after substitution.