SUBST : (term,thm) subst -> term -> thm -> thm
    A1 |- t1 = u1 ,  ... , An |- tn = un ,    A |- t[t1,...,tn]
   -------------------------------------------------------------
        A u A1 u ... u An |- t[u1,...,un]
   SUBST [x1 |-> (A1 |- t1=u1) ,..., xn |-> (An |- tn=un)]
         t[x1,...,xn]
         (A |- t[t1,...,tn])
The assumptions of the returned theorem may not contain all the assumptions A1 u ... u An if some of them are not required. In particular, if the theorem Ak |- tk = uk is unnecessary because xk does not appear in the template, then Ak is not be added to the assumptions of the returned theorem.
- val x = “x:num”
  and y = “y:num”
  and th0 = SPEC “0” arithmeticTheory.ADD1
  and th1 = SPEC “1” arithmeticTheory.ADD1;
(*    x = `x`
      y = `y`
    th0 = |- SUC 0 = 0 + 1
    th1 = |- SUC 1 = 1 + 1     *)
- SUBST [x |-> th0, y |-> th1]
        “(x+y) > SUC 0”
        (ASSUME “(SUC 0 + SUC 1) > SUC 0”);
> val it = [.] |- (0 + 1) + 1 + 1 > SUC 0 : thm
- SUBST [x |-> th0, y |-> th1]
        “(SUC 0 + y) > SUC 0”
        (ASSUME “(SUC 0 + SUC 1) > SUC 0”);
> val it = [.] |- SUC 0 + 1 + 1 > SUC 0 : thm
- SUBST [x |-> th0, y |-> th1]
        “(x+y) > x”
        (ASSUME “(SUC 0 + SUC 1) > SUC 0”);
> val it = [.] |- (0 + 1) + 1 + 1 > 0 + 1 : thm