subst
Term.subst : (term,term) subst -> term -> term
Substitutes terms in a term.
Given a “(term,term) subst” (a list of {redex, residue}
records) and a term tm
, subst
attempts to
replace each free occurrence of a redex
in tm
by its associated residue
. The substitution is done in
parallel, i.e., once a redex has been replaced by its residue, at some
place in the term, that residue at that place will not itself be
replaced in the current call. When necessary, renaming of bound
variables in tm
is done to avoid capturing the free
variables of an incoming residue.
Failure occurs if there exists a {redex, residue}
record
in the substitution such that the types of the redex
and
residue
are not equal.
- load "arithmeticTheory";
- subst [Term`SUC 0` |-> Term`1`]
(Term`SUC(SUC 0)`);
> val it = `SUC 1` : term
- subst [Term`SUC 0` |-> Term`1`,
Term`SUC 1` |-> Term`2`]
(Term`SUC(SUC 0)`);
> val it = `SUC 1` : term
- subst [Term`SUC 0` |-> Term`1`,
Term`SUC 1` |-> Term`2`]
(Term`SUC(SUC 0) = SUC 1`);
> val it = `SUC 1 = 2` : term
- subst [Term`b:num` |-> Term`a:num`]
(Term`\a:num. b:num`);
> val it = `\a'. a` : term
- subst [Term`flip:'a` |-> Term`foo:'a`]
(Term`waddle:'a`);
> val it = `waddle` : term