"Why couldn't" vs. "why couldn't you have"

Reading Harry Potter 2, I came across the following, and I wonder if the use of couldn't have is the equivalent of couldn't in this context?

"I have got a question, Oliver," said George, who had woken with a start. "Why couldn't you have told us all this yesterday when we were all awake?"

If we change it to the following, how does it change the meaning of it?

"I have got a question, Oliver," said George, who had woken with a start. "Why couldn't you tell us all this yesterday when we were all awake?"

And what is the difference between the following?

If you couldn't do it, you should have told us yesterday.

If you couldn't have done it, you should have told us yesterday.


Solution 1:

Could is sometimes called the "remote" form of can. Sometimes it acts like a simple past tense:

Yesterday I couldn't see the problem, but today I can.
≅ Yesterday I wasn't able to see the problem, but today I am.

but sometimes it acts like a conditional:

I couldn't do it if I tried.
≅ I wouldn't be able to do it if I tried.

or emphasizes the vagueness of a possibility:

Anything could happen between now and November.
≅ Anything can happen, maybe, between now and November.

and sometimes it's simply more polite:

Could you pass the salt?
Can you pass the salt, please?

In your example, both Rowling's "couldn't you have told" and your "couldn't you tell" would be correct. In your "couldn't you tell", could is acting as a past tense. In Rowling's "couldn't you have told", it's have that's providing the past-tense sense, and could is serving a less well-defined role. It could be interpreted as a conditional:

Why couldn't you have told us all this yesterday when we were all awake?
≅ Why wouldn't you have been able to tell us all this yesterday when we were all awake?
≅ You decided not to tell us all this yesterday when we were awake. Why? What made you think you wouldn't be able to?

. . . but for language-learning purposes, I think it might be better to think of could have as an idiom, and not try to unpack it too much. To ask why something "couldn't have" happened is to invoke the idea of alternate world where it did, and could's vague conditional sense is perfect for that.

Solution 2:

I think the difference is really in "why couldn't you have told" as opposed to "why couldn't you tell". The tense difference is subtle, but the present form "tell" implies that the failing is something he could or should remedy now. Of course this is impossible, but there is a greater sense of current failing.

The past version - "have told" implies that his failing is that when it was yesterday, he didn't tell them. The failing is in not having done something in the past, without the sense that there is a failing in the present.

The past tense is better, because it puts all of the action in the past, where is belongs. The present tens is actually mixing up the times. However it works when there is a desire to imply that they should do something now to make up for it.

The response to "have told" might be "because I didn't realise it was important until now" - the past failing is only seen in the current light. The response to "tell" might be "I hate you and i want you all to die" - there is an ongoing sense of guilt.