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