done

done は,証明終了の合図です.証明すべきゴールが残っていない時に成功し,それ以外の時にはエラーになります.QED のようなものです.証明がサブゴールに分かれている場合,サブゴールごとに判定を行います.

variable (P Q : Prop)

example (h : P → Q) : ¬ P ∨ Q := by
  -- `P` が成り立つかどうかで場合分けを行う
  by_cases hP : P

  -- `P` が成り立つ場合
  case pos =>
    -- `P → Q` より `Q` が成り立つ
    have := h hP

    -- したがって結論が従う
    exact Or.inr this

    -- `P` が成り立つ場合の証明終わり.
    done

  -- `P` が成り立たない場合
  case neg =>
    -- `¬ P` が成り立つので,`¬ P ∨ Q` も成り立つ
    exact Or.inl hP

    -- `P` が成り立たない場合の証明終わり.
    done