suffices
suffices
は、数学でよくある「~を示せば十分である」という推論を行うタクティクです。
ゴールが ⊢ P
であるときに suffices h : Q from
を実行すると、以下が実行されます。
suffices h : Q from
のブロック内で、仮定にh : Q
が追加される。suffices h : Q from
以降で、ゴールが⊢ Q
に書き換えられる。
apply
タクティクと似ていますが、apply
と違って「十分条件になっていること」の証明が明らかでないときにも使うことができます。
example (P : Prop) : ¬ ¬ (P ∨ ¬ P) := by
intro h
-- `¬ P` を示せば十分である。
suffices hyp : ¬ P from by
-- 仮定に `¬ P` が追加される。
guard_hyp hyp : ¬ P
-- このとき、特に `P ∨ ¬ P` が成り立つので、示すべきことが言える。
have : P ∨ ¬ P := by simp_all
contradiction
-- 無事ゴールを `¬ P` に帰着させることができた。
-- 以下 `¬ P` を示す。
guard_target =ₛ ¬ P
intro hP
have : P ∨ ¬ P := by simp_all
contradiction
構文
suffices Q from by ...
という構文では、タクティクによって証明を構成するモードになります。suffices Q from ...
という構文では、証明項を直接構成するモードになります。
example (n : Nat) (h : n ≤ 0) : n = 0 := by
-- `n = 0` を示すためには、`n ≤ 0` であることを示せば十分である。
suffices hyp : n ≤ 0 from Nat.eq_zero_of_le_zero h
-- `n ≤ 0` であることを示す。
assumption