我想为这些简单的推理规则提供 Ltac 策略。
在 Modus Ponens 中,如果我有H:P->Q和H1:P,Ltac mp H H1将添加Q到上下文中作为H2 : Q.
在 Modus Tollens 中,如果我有H:P->Qand H1:~Q,那么Ltac mt H H1将添加H2:~P到上下文中。
我已经写了一个用于 ponens 的方法,但它不适用于先例也是暗示的复杂情况。
Ltac mp H0 H1 :=
let H := fresh "H" in
apply H0 in H1 as H.
编辑:我在另一个看似不相关的问题中找到了 Modus Ponens 的答案(在 Coq 中重写假设,保持暗示),其中“简化”版本apply是用generalize.
Ltac mp H H0 :=
let H1 := fresh "H" in
generalize (H H0); intros H1.
不过,我仍然会感谢 Modus Tollens 的回答。