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.

   Create examples that illustrate each of the above cases.
