As Leonid explained in the comment, HoldForm is not transparent for the pattern matcher as opposed to HoldPattern:
MatchQ[#, HoldForm[_]] & /@ {a, HoldForm[a]}
MatchQ[#, HoldPattern[_]] & /@ {a, HoldForm[a]}
{False, True}
{True, True}
From the above you see that an expression will match the pattern HoldForm[_] only if its Head is HoldForm. HoldPattern is specially designed to be transparent for the pattern matcher, and so HoldPattern[_] is equivalent to _ for the pattern matcher.
Condition (/;) is interpreted as a part of rule only if it is placed on level 1 inside it:
FullForm[lhs :> rhs /; test]
RuleDelayed[lhs, Condition[rhs, test]]
{1, 2} /. x_Integer :> f[x] /; OddQ[x]
{f[1], 2}
Mathematica converts such structures to undocumented RuleCondition for the purposes of pattern matching:
Trace[1 /. x_ :> f[x] /; OddQ[x]]
(*=> {{x_:>x/;test,x_:>x/;test},1/. x_:>x/;test,{RuleCondition[$ConditionHold[$ConditionHold[1]],test],Fail},1} *)
If one wraps Condition with arbitrary head it is no more a part of the rule:
{1, 2} /. x_Integer :> f[x /; OddQ[x]]
{f[1 /; OddQ[1]], f[2 /; OddQ[2]]}
The role of such head may serve Identity as Leonid suggests:
{1, 2} /. x_Integer :> Identity[x /; OddQ[x]]
{1 /; OddQ[1], 2 /; OddQ[2]}
HoldPattern is also suitable but it is not necessary in your case.
HoldForm? It works fine without it. – Leonid Shifrin Apr 25 '14 at 18:17rule = datePicked /. {t_, n_, o_, b___} :> Identity[{t, n, v_, b} /; v <= o];, whereIdentityserves as an escaping mechanism, so that the condition is not interpreted as a part of the rule during rule application in the above code. The reason your pattern didn't work was not due tovtov$renaming, but due to the presence ofHoldFormin your pattern - theHoldFormhead is not transparent for pattern-matching. As an alternative, you could useHoldPatternin place ofHoldForm, but I like the solution withIdentitybetter. – Leonid Shifrin Apr 25 '14 at 18:35rulewith mine, and try again. – Leonid Shifrin Apr 25 '14 at 18:47Tracewhen there are non-trivial calls to evaluator (viaConditionorPatternTest). In this case, your entire pattern was wrapped inHoldForm, and the pattern-matcher was able to determine the fact of (non)match without testing the condition in the pattern. The problem ofConditionbeing interpreted as a part of the rule rather than belonging to the answer (r.h.s.) only, is indeed rather subtle. This is a good question. If no one does this first, I will convert my comment into a proper answer – Leonid Shifrin Apr 25 '14 at 19:14