Когда мы размышляем о прошлом или о неких действиях в прошлом с разной степенью уверенности или вероятности, мы можем использовать несколько грамматических конструкций по следующим схемам:
Must + have done something — Должно быть (полная уверенность)
He must have been late for school — Должно быть, он опоздал в школу.
Should + have done something — Cледовало бы, было бы лучше
He should have gone to the doctor — Ему следовало бы пойти в доктору (но он этого не сделал).
Might + have done something — Вероятно, могло бы быть (нет полной уверенности)
He might have left the keys at home — Он, вероятно, оставил ключи дома.
Could + have done something — Возможно, могло бы быть (нет полной уверенности)
She could have forgotten about it — Она, возможно, забыла об этом.