英語の仮定法とそれに似た表現を対比させながらまとめて紹介します。

現在

  • もしAならBだろう(Aは現実でない)-> if + 動詞の過去形, would/could/might + 動詞の現在形
    • If I were you, I wouldn’t do it -> もし私があなただったらそうはしない(仮定法の時は I was ではなく I were になることに注意)
  • もしAならBだろう(Aは起こり得る)-> if + 動詞の現在形, will/may/might/can/could + 動詞の現在形
    • If you ask her, she will say yes -> 彼女を誘ったら、彼女はいいと言う
    • if you ask her, she may say yes -> 彼女を誘ったら、彼女はいいと言うかもしれない
    • if you ask her, she might say yes -> 彼女を誘ったら、彼女はいいと言うかもしれない
    • if you ask her, she can say yes -> 彼女を誘ったら、彼女がいいと言う可能性は十分ある
    • if you ask her, she could say yes -> 彼女を誘ったら、もしかして彼女はいいと言うかもしれない

過去

  • もしAだったならBだっただろう(AもBも現実でない)-> if + 過去完了, would have + 過去分詞
    • If I had been you, I wouldn’t have done so -> もし私があなただったらそうはしなかった
    • If I had known that then, I would’ve never done it -> その時その事を知っていたなら、私はそれを絶対しなかった
    • If I hadn’t changed my flight, I would have been killed -> もし私が別の飛行機に変えていなかったら私は死んでいた(乗員乗客全員死亡したので、私も間違いなく死んでいた)
  • ~だったかもしれない、~だった可能性が高い -> could have + 過去分詞
    • If I had left my house on time, I could have been killed in that bridge accident -> もし私が時間通りに家を出ていたら、あの橋の事故で死んでいた可能性が高い
    • If you and I had met 30 years ago, we could have had a family together-> もしあなたと私が30年前に出会っていたら、一緒に家庭を持っていたかもしれない
  • ~だったかもしれない -> may/might have + 過去分詞(coud have より確実性が低い)
    • If we had tried, it might or might not have worked, we don’t really know -> 試していたら上手く行ったかもしれないし、上手く行かなかったかもしれないし、本当の事は分からない
  • ~だったに違いない -> must have + 過去分詞
    • They must’ve gotten lost -> 彼等は道に迷ったに違いない
    • He must’ve misunderstood what I said -> 彼は私の言ったことを誤解したに違いない
  • ~すべきだったがそうしなかった/ならなかった -> should have + 過去分詞
    • You should’ve told me that -> あなたは私にそう言うべきだった(が言わなかった)
    • We should’ve won the game easily -> 私達はその試合を楽勝すべきだった(が負けた、或いはギリギリで勝った)

Can/Could/Could have は「必ずそうなるとは言えないが、そうなり得る事には間違いない」、may/might/may have/might have は「そうなるかもしれないし、そうならないかもしれない」という感じになります。