Hi!
All of these things are manifestations of evaluation control in
Mathematica.
If you write something it is usually evaluated before the result
is stored or displayed.
However, you can stop it from being evaluated with Hold,
HoldPattern etc.
This is why manipulation of your patterns containing HoldPattern
does not work the way you expected.
For instance
HoldPattern[aaa*bbb + ccc] /. {aaa -> 1, ccc -> 0}
gives
HoldPattern[1*bbb + 0]
The internal expression 1*bbb + 0 is not evaluated to bbb because
HoldPattern stops the evaluation.
If you just write 1*bbb + 0 it is automatically evaluated to bbb,
so 1*bbb + 0 would never appear in any ordinary expression.
If you temporarily want to evaluate what is in the HoldPattern,
you can for instance do
% /. HoldPattern -> FFF /. FFF -> HoldPattern
Here, HoldPattern[1*bbb + 0] is changed to FFF[1*bbb + 0] which
does not stop evaluation, so it is turned into FFF[bbb]. Finally,
this is changed to HoldPattern[bbb].
Here, FFF can be any symbol that is not used for something else.
However, this trick might cause problems due to the evaluation of
the left hand side of the rules. There might be a good reason for
the HoldPattern to be there in the first place. It is not always
necessary though.
The special property of HoldPattern is that
Attributes[HoldPattern] contains HoldAll. This stops the
evaluation. You an read more about evaluation in the Mathematica
help under tutorial/Evaluation.
If you do manipulate long lists of rules in this way, it is very
easy to get something unexpected. For instance you might get a
rule 0->"something complicated". Applying a rule like that is a
bad idea.
Your long list of questions to this forum regarding unexpected
rules shows that manipulating rules is difficult and can cause
problems unless you understand every single detail of what is
happening.
Therefore, I would strongly recommend that you do as much of the
manipulations as possible in the form of equations. Only after the
manipulation, you turn the equation into a rule with for instance
EqToRule and apply it.
For instance
expr /. EqToRule@myeq1
If you are using this many times, you can do
myrule1=EqToRule@myeq1;
expr/.myrule1
instead, but I seldom bother to do that.
Equations are also easier to display and read. Therefore, you
would notice an equation like 0="something" before you try to turn
that into a bad rule of the form 0->"something".
Regards
Thomas