(the exercise is from Software foundations, I can give all relevant definitions but there'll be a lot of them) Consider this:
Goal empty_st =[ X := 1 ]=> (X ↦ 1).
debug auto. (* (* debug auto: *)
* assumption. (*fail*)
* intro. (*fail*)
* simple apply E_Ass (in core). (*fail*) <- note this fails
* simple apply E_Skip (in core). (*fail*) *)
simple apply E_Ass. (* <- but this works *)
Qed.
Usually, my problems with auto are that it fails to find the relevant thing to apply. Here it does that flawlessly, but for some reason fails to apply it. How can I convince it to try harder?
(Yes, it's the same E_Ass. And no, unfolding doesn't help.)