I occasionally (not frequently, but often enough) see it happen that a proof will be working in Dafny, and then something that appears irrelevant will change (e.g., variable names, function definition that aren't relevant to the proof, and so on) and the proof will break.
I'm interested in knowing the technical reasons why this happens. I currently have a rough understanding of E-matching and quantifier instantiation. It's neither obvious to me that these algorithms ought to be robust to these seemingly-irrelevant input features; nor is it obvious why they wouldn't be robust. I also don't know if there are any considerations for E-matching implementations in practice that would result in non-robustness.
By "robust", I mean "will either always succeed or will always not succeed, independent of factors like variable names".
So, I'm interested in understanding the technical reasons (either practical or theoretical) for this non-robustness.
Part of the reason why I'd like to gain more of an intuition here is so that when I encounter such a situation, I can patch the proof in such a way as to make it more robust. (Instead, what usually happens now is that I will patch the proof in some arbitrary way, it gets fixed, and then it breaks again later.)
The sort of answer I'm hoping to find is something like "Z3 uses algorithm X, which uses complex heuristic Y to determine when to give up looking in a part of the search space, and it's clear that Y depends on the search order". An answer like that probably wouldn't help me write better Dafny proofs, but it would satisfy my curiosity.