Take this standard definition for the factorial function:
primrec factorial :: "nat ⇒ nat"
where
"factorial 0 = 1"
| "factorial (Suc n) = (Suc n) * (factorial n)"
If we ask for value "factorial 3", Isabelle will predictably give us 6. However, if we try to make that a lemma, it'll fail:
lemma "factorial (3::nat) = (6::nat)"
by simp
(* Failed to apply initial proof method *)
simp, auto, and even arith fail to find a solution. However, if we add numeral_nat or numeral.simps, simp can solve it:
lemma "factorial (3::nat) = (6::nat)"
by (simp add: numeral_nat)
lemma "factorial (3::nat) = (6::nat)"
by (simp add: numeral.simps)
Funnily enough, in both of these proofs Isabelle gives the warning "Ignoring duplicate rewrite rule", which means that it should already know about these. Furthermore, Isabelle has no problem proving that "3*2*1 = 6", which puzzles me even more about how these lemmas are being used.
So, if this is such a simple and easily computable equality - so much so that Isabelle can compute it with the value command - and these rules were apparently already present, why can't Isabelle solve the lemma without them?