This is a well known "chicken and egg" problem. If you do
\coprod will be good, while calling
\bigcoprod would produce
\amalg again. The fact is that macros defined with
\newcommand are simply substituted by their replacement text:
\bigcoprod -> \coprod -> \amalg
\amalg is not a macro, but an instruction to print a certain mathematical symbol.
What you need is to "freeze" the meaning of
is what you're looking for: the meaning of
\bigcoprod is now the same as the meaning
\coprod has at the moment
\let is executed. If later
\coprod is assigned a new meaning,
\bigcoprod will not change. So the correct way to proceed is
The first line is a safety measure against the possibility that some package loaded earlier defines
\bigcoprod. If this happens, you'll know it when the provisional
\newcommand is executed. The second line will immediately change the meaning of
\bigcoprod to what's desired. Indeed,
\let doesn't check whether the command has already a meaning. Something like
\let\box\square would be disastrous, if one doesn't take the precaution of testing whether
\box is defined (it is, and it's a very important internal command of TeX that mustn't be redefined).
There are some risks in using
\let, however, in case the command to be "frozen" has a special definition, namely it was introduced to LaTeX by means of
\DeclareRobustCommand or variations thereof, or it has been defined via
\newcommand with an optional argument.
letltxmacro package comes to the rescue and its macro
\LetLtxMacro should be used whenever one has the slightest doubt about the command to be "frozen". The syntax is just the same:
In this particular case the package is not really needed: "simple" math symbols can always be treated with
\let. In other cases
\LetLtxMacro can be a life saver.