forall と -> (1.2)
いくつか細かい捕捉。
- intro
- introsと同じひっぺがし作業を1回だけやる
Theorem Modus_ponens: forall (P: Prop), forall (Q: Prop), (P -> Q) -> P -> Q. Proof. intro. intro. intro.
3回だけで止めると
P: Prop Q: Prop H: P -> Q ------------------------------------------------ P -> Q
こうなるので、ここで exact H. という証明もありです。apply とか要らない分簡単かも。
- intro X
- X という名前をつけつつintroでひっぺがす
- intros X1 X2 ... Xn
- X1 X2 ... という名前をつけつつn個introsでひっぺがす
Theorem Modus_ponens: forall (P: Prop), forall (Q: Prop), (P -> Q) -> P -> Q. Proof. intros P Q P_naraba_Q. exact P_naraba_Q. Qed.
他にも、intro/intros にはいくつか賢いオプション指定ができるので、詳しくはマニュアル参照のこと。
- assumption
- 仮定にあるどれかがゴールそのまんまだからそれでお願い!という証明
Theorem Modus_ponens: forall (P: Prop), forall (Q: Prop), (P -> Q) -> P -> Q. Proof. intros. apply H. assumption. (* exact H0. の代わり *) Qed.
実は、"exact H" や "exact H0" のように名前を指定しなくても、そのくらい自動で探してこいよ!というとCoqさんちゃんと見つけてくれます。賢いですね。
賢いと言えば
- auto
- Coqさんならできる!頑張れよ!もっと熱くなれよ!!
Theorem Modus_ponens: forall (P: Prop), forall (Q: Prop), (P -> Q) -> P -> Q. Proof. auto. Qed.
実はCoqさん十分賢いのでこの程度の証明は、auto. って書くと勝手に全部やってくれるんですが、それだとあんまりCoq入門にならないので、この記事ではできるだけautoを使わないようにします。