There's an interesting letter posted to CACM by (the) David Parnas. He points out that abstraction is good and important but if you abstract too far then the results can not be trusted. He quotes Dijkstra's definition: "An abstraction is one thing that represents several real things equally well." As Parnas puts it, a model that fails this definition is a lie. Interesting.
I'm sure that I've fallen into this trap in various papers, but we have been very careful in our recent work on C#3.0 to formalize our fragment in a way that works for all the other language features, even though we don't give them in the paper. This was a real pain, but I'm happier with the result even though it looks clumsy in places!