by_contra

by_contra は,背理法を使いたいときに役立つタクティクです.

ゴールが ⊢ P であるときに by_contra h を実行すると,h : ¬ P がローカルコンテキストに追加されて,同時にゴールが ⊢ False になります.

import Mathlib.Tactic.ByContra

variable (P Q : Prop)

example (h: ¬Q → ¬P) : P → Q := by
  -- `P` であると仮定する
  intro hP

  -- `¬Q` であると仮定して矛盾を導きたい
  by_contra hnQ
  show False

  -- `¬ Q → ¬ P` と `¬Q` から `¬P` が導かれる
  have := h hnQ

  -- これは仮定に矛盾
  contradiction