contrapose
contrapose
は対偶を取るタクティクです.
ローカルコンテキストに h : P
という仮定があるときに contrapose h
を実行すると,ゴールの否定がローカルコンテキストに追加されて,同時にゴールが ⊢ ¬ P
に変わります.
import Mathlib.Tactic.Contrapose -- contrapose のために必要
import Mathlib.Init.Data.Int.Order
variable {f : Int → Int} {a b : Int}
def Monotone (f : Int → Int) : Prop :=
∀ ⦃a₁ a₂⦄, a₁ ≤ a₂ → f a₁ ≤ f a₂
example (h : Monotone f) (h' : f a < f b) : a < b := by
-- 対偶をとる
contrapose h'
-- ゴールと仮定が否定になって入れ替わる
show ¬f a < f b
simp_all
apply h
assumption
contrapose!
contrapose!
は,対偶をとった後に簡略化を実行します.
example (h : Monotone f) (h' : f a < f b) : a < b := by
-- 対偶をとる
contrapose! h'
-- 不等号の否定を逆向きの不等号に簡略化してくれる
show f b ≤ f a
apply h
assumption