\DOC SUBST_MATCH \TYPE {SUBST_MATCH : (thm -> thm -> thm)} \SYNOPSIS

advertisement
\DOC SUBST_MATCH
\TYPE {SUBST_MATCH : (thm -> thm -> thm)}
\SYNOPSIS
Substitutes in one theorem using another, equational, theorem.
\KEYWORDS
rule.
\DESCRIBE
Given the theorems {A|-u=v} and {A'|-t}, {SUBST_MATCH (A|-u=v) (A'|-t)}
searches for one free instance of {u} in {t}, according to a top-down
left-to-right search strategy, and then substitutes the corresponding
instance
of {v}.
{
A |- u=v
A' |- t
-------------------- SUBST_MATCH (A|-u=v) (A'|-t)
A u A' |- t[v/u]
}
{SUBST_MATCH} allows only a free instance of {u} to be substituted
for in {t}. An instance which contain bound variables can be substituted
for by
using rewriting rules such as {REWRITE_RULE}, {PURE_REWRITE_RULE} and
{ONCE_REWRITE_RULE}.
\FAILURE
{SUBST_MATCH th1 th2} fails if the conclusion of the theorem {th1} is not
an
equation. Moreover, {SUBST_MATCH (A|-u=v) (A'|-t)} fails if no instance
of {u}
occurs in {t}, since the matching algorithm fails. No change is made to
the
theorem {(A'|-t)} if instances of {u} occur in {t}, but they are not free
(see
{SUBS}).
\EXAMPLE
The commutative law for addition
{
- val thm1 = SPECL [Term `m:num`, Term
arithmeticTheory.ADD_SYM;
> val thm1 = |- m + n = n + m : thm
}
is used to apply substitutions, depending
instances
{
- SUBST_MATCH thm1 (ASSUME (Term `(n +
> val it = [.] |- m - 1 + (n + 1) = m
`n:num`]
on the occurrence of free
1) + (m - 1) = m + n`));
+ n : thm
- SUBST_MATCH thm1 (ASSUME (Term `!n. (n + 1) + (m - 1) = m + n`));
> val it = [.] |- !n. n + 1 + (m - 1) = m + n : thm
}
\USES
{SUBST_MATCH} is used when rewriting with the rules such as
{REWRITE_RULE},
using a single theorem is too extensive or would diverge. Moreover,
applying
{SUBST_MATCH} can be much faster than using the rewriting rules.
\SEEALSO
Rewrite.ONCE_REWRITE_RULE, Rewrite.PURE_REWRITE_RULE,
Rewrite.REWRITE_RULE, Drule.SUBS, Thm.SUBST.
\ENDDOC
Download