SUBST_OCCS_TAC : (int list * thm) list -> tactic
              A ?- t
   =============================  SUBST_OCCS_TAC [(l1,A1|-t1=u1),...,
    A ?- t[u1,...,un/t1,...,tn]                   (ln,An|-tn=un)]
SUBST_OCCS_TAC automatically renames bound variables to prevent free variables in ui becoming bound after substitution.
?- (m + n) + (n + m) = (m + n) + (m + n)
   SUBST_OCCS_TAC [([3], SPECL [Term `m:num`, Term `n:num`] 
                               arithmeticTheory.ADD_SYM)]
?- (m + n) + (n + m) = (m + n) + (n + m)