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