A.3.8 Scoping Constructs
Scoping constructs in Mathematica.
Scoping constructs allow the names of certain symbols to be local.
When nested scoping constructs are evaluated, new symbols are automatically generated in the inner scoping constructs so as to avoid name conflicts with symbols in outer scoping constructs.
In general, symbols with names of the form xxx are renamed xxx$.
When a transformation rule or definition is used, ReplaceAll (/.) is effectively used to replace the pattern names that appear on the right-hand side. Nevertheless, new symbols are generated when necessary to represent other objects that appear in scoping constructs on the right-hand side.
Each time it is evaluated, Module generates symbols with unique names of the form xxx$nnn as replacements for all local variables that appear in its body.