否定文のcan't 〜はずがない という表現は
肯定文のmay 〜かもしれない という表現とセットなんです。
だから肯定文ではmay 、否定文や疑問文ではcanになると思えばいいです。これは「可能性(の肯定と否定)を頭の中で認識している」という意味です。
ただし、そっくりだけと文法的には区別する用法(学校の教材はそれを混同していると思います)として次のような場合
Such accident sometimes can happen.
「そのような事故は時々起こり得る」
これは、「あるかもしれない」というただ頭の中で可能性を認識しているのではなくて、
「実際に時々起こってもおかしくない状況がある」という事実を指しています。
追記です
couldn't have doneとcould have doneは
仮定法、もしくは、仮定法から転じて丁寧な言い方な言い方をするときに使います。
couldn't have doneは「〜なはずがない」
can't have doneと変わりませんが、丁寧な言い方というか、断定を避けているニュアンスになります。日本語訳に現れにくいですが。
could have doneは「〜できる状況があった(のに実際はしなかった)」という、さっき「学校の教材が混同してる」って言った用法の、仮定法過去完了バージョン。
can have doneは今まで見たことないような気がします。
助動詞自分も苦手です。
話そうと思うと、複雑な助動詞は出せません。
なので説明がごちゃごちゃしましたが、よくわからなかったら流してください。