We use can to talk about present or general ability.
- I can swim.
- She can read Italian, but she can’t speak it.
We use could to talk about general ability in the past.
- She could read when she was four.
Note that was/were able is also possible with this meaning.
- She was able to read when she was four.
We normally use will be able to talk about future ability.
- I will be able to speak good French in a few months.
Unrealized past ability
We use could have + past participle to talk about unrealized past ability – to say that somebody was able to do something, but did not try to do it.
- I was so angry I could have killed her.
- I could have married anybody I wanted to.
Couldn’t have + past participle means that somebody would not have been able to do something even if they had wanted or tried to.
- I couldn’t have won, so I didn’t go in for the race.