SUBST_ALL_TAC breaches the style of natural deduction, where the assumptions
are kept fixed.  Given a theorem A|-u=v and a goal ([t1;...;tn], t),
SUBST_ALL_TAC (A|-u=v) transforms the assumptions t1,...,tn and the term
t into t1[v/u],...,tn[v/u] and t[v/u] respectively, by substituting v
for each free occurrence of u in both the assumptions and the conclusion of
the goal.
           {t1,...,tn} ?- t
   =================================  SUBST_ALL_TAC (A|-u=v)
    {t1[v/u],...,tn[v/u]} ?- t[v/u]
SUBST_ALL_TAC automatically renames bound variables to prevent
free variables in v becoming bound after substitution.