1.  The documentation for `substitute()` says:

    > Substitution takes place by examining each component of the parse tree
    > as follows:
    >
    > * If it is not a bound symbol in `env`, it is unchanged.
    > * If it is a promise object (i.e., a formal argument to a function)
    >   the expression slot of the promise replaces the symbol.
    > * If it is an ordinary variable, its value is substituted, unless
    > `env` is .GlobalEnv in which case the symbol is left unchanged.
